atomisp: hmm: Replace list specific spin locks with a single one.
authorIlkka Koskinen <ilkka.koskinen@intel.com>
Fri, 23 Dec 2011 09:49:58 +0000 (11:49 +0200)
committerbuildbot <buildbot@intel.com>
Mon, 16 Jan 2012 16:05:50 +0000 (08:05 -0800)
BZ: 19462

Change-Id: I09f0849d0188c70575ead2c7aacac3bb0361f788
Signed-off-by: Ilkka Koskinen <ilkka.koskinen@intel.com>
Reviewed-on: http://android.intel.com:8080/30887
Reviewed-by: Kruger, Jozef <jozef.kruger@intel.com>
Reviewed-by: Toivonen, Tuukka <tuukka.toivonen@intel.com>
Reviewed-by: Gross, Mark <mark.gross@intel.com>
Reviewed-by: Cohen, David A <david.a.cohen@intel.com>
Reviewed-by: Wang, Wen W <wen.w.wang@intel.com>
Tested-by: Chotard, Celine <celine.chotard@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
drivers/media/video/atomisp/hmm/hmm_bo.c
drivers/media/video/atomisp/hmm/hmm_bo_dev.c
drivers/media/video/atomisp/include/hmm/hmm_bo_dev.h

index e8c3122..bbc8b51 100644 (file)
@@ -142,10 +142,10 @@ int hmm_bo_init(struct hmm_bo_device *bdev,
        /*
         * add to active_bo_list
         */
-       spin_lock_irqsave(&bdev->ablist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        list_add_tail(&bo->list, &bdev->active_bo_list);
        bo->status |= HMM_BO_ACTIVE;
-       spin_unlock_irqrestore(&bdev->ablist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
 
        return 0;
 }
@@ -194,15 +194,9 @@ static void hmm_bo_release(struct hmm_buffer_object *bo)
        /*
         * remove it from buffer device's buffer object list.
         */
-       if (hmm_bo_activated(bo)) {
-               spin_lock_irqsave(&bdev->ablist_lock, flags);
-               list_del(&bo->list);
-               spin_unlock_irqrestore(&bdev->ablist_lock, flags);
-       } else {
-               spin_lock_irqsave(&bdev->fblist_lock, flags);
-               list_del(&bo->list);
-               spin_unlock_irqrestore(&bdev->fblist_lock, flags);
-       }
+       spin_lock_irqsave(&bdev->list_lock, flags);
+       list_del(&bo->list);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
 
        if (bo->release)
                bo->release(bo);
@@ -228,14 +222,11 @@ void hmm_bo_unactivate(struct hmm_buffer_object *bo)
 
        bdev = bo->bdev;
 
-       spin_lock_irqsave(&bdev->ablist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        list_del(&bo->list);
-       spin_unlock_irqrestore(&bdev->ablist_lock, flags);
-
-       spin_lock_irqsave(&bdev->fblist_lock, flags);
        list_add_tail(&bo->list, &bdev->free_bo_list);
        bo->status &= (~HMM_BO_ACTIVE);
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
 
        return;
 
index 9d50825..e3b55e5 100644 (file)
@@ -64,8 +64,7 @@ int hmm_bo_device_init(struct hmm_bo_device *bdev,
        INIT_LIST_HEAD(&bdev->free_bo_list);
        INIT_LIST_HEAD(&bdev->active_bo_list);
 
-       spin_lock_init(&bdev->fblist_lock);
-       spin_lock_init(&bdev->ablist_lock);
+       spin_lock_init(&bdev->list_lock);
 
        bdev->flag = HMM_BO_DEVICE_INITED;
 
@@ -124,7 +123,7 @@ struct hmm_buffer_object *hmm_bo_device_search_start(struct hmm_bo_device *bdev,
 
        check_bodev_null_return(bdev, NULL);
 
-       spin_lock_irqsave(&bdev->ablist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        list_for_each(pos, &bdev->active_bo_list) {
                bo = list_to_hmm_bo(pos);
                /* pass bo which has no vm_node allocated */
@@ -133,10 +132,10 @@ struct hmm_buffer_object *hmm_bo_device_search_start(struct hmm_bo_device *bdev,
                if (bo->vm_node->start == vaddr)
                        goto found;
        }
-       spin_unlock_irqrestore(&bdev->ablist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        return NULL;
 found:
-       spin_unlock_irqrestore(&bdev->ablist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        return bo;
 }
 
@@ -155,7 +154,7 @@ struct hmm_buffer_object *hmm_bo_device_search_in_range(struct hmm_bo_device
 
        check_bodev_null_return(bdev, NULL);
 
-       spin_lock_irqsave(&bdev->fblist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        list_for_each(pos, &bdev->active_bo_list) {
                bo = list_to_hmm_bo(pos);
                /* pass bo which has no vm_node allocated */
@@ -164,10 +163,10 @@ struct hmm_buffer_object *hmm_bo_device_search_in_range(struct hmm_bo_device
                if (in_range(bo->vm_node->start, bo->vm_node->size, vaddr))
                        goto found;
        }
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        return NULL;
 found:
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        return bo;
 }
 
@@ -187,21 +186,18 @@ struct hmm_buffer_object *hmm_bo_device_get_bo(struct hmm_bo_device *bdev,
 
        check_bodev_null_return(bdev, NULL);
 
-       spin_lock_irqsave(&bdev->fblist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        list_for_each(pos, &bdev->free_bo_list) {
                bo = list_to_hmm_bo(pos);
                if (bo->pgnr == pgnr)
                        goto found;
        }
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        return NULL;
 found:
        list_del(&bo->list);
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
-
-       spin_lock_irqsave(&bdev->ablist_lock, flags);
        list_add(&bo->list, &bdev->active_bo_list);
-       spin_unlock_irqrestore(&bdev->ablist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
 
        return bo;
 }
@@ -216,7 +212,7 @@ void hmm_bo_device_destroy_free_bo_list(struct hmm_bo_device *bdev)
 
        check_bodev_null_return(bdev, (void)0);
 
-       spin_lock_irqsave(&bdev->fblist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        while (!list_empty(&bdev->free_bo_list)) {
                bo = list_first_entry(&bdev->free_bo_list,
                                      struct hmm_buffer_object, list);
@@ -224,7 +220,7 @@ void hmm_bo_device_destroy_free_bo_list(struct hmm_bo_device *bdev)
                list_del(&bo->list);
                hmm_bo_unref(bo);
        }
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
 }
 
 /*
@@ -239,7 +235,7 @@ void hmm_bo_device_destroy_free_bo_addr(struct hmm_bo_device *bdev,
 
        check_bodev_null_return(bdev, (void)0);
 
-       spin_lock_irqsave(&bdev->fblist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        list_for_each(pos, &bdev->free_bo_list) {
                bo = list_to_hmm_bo(pos);
                /* pass bo which has no vm_node allocated */
@@ -248,11 +244,11 @@ void hmm_bo_device_destroy_free_bo_addr(struct hmm_bo_device *bdev,
                if (bo->vm_node->start == vaddr)
                        goto found;
        }
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        return;
 found:
        list_del(&bo->list);
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        hmm_bo_unref(bo);
 }
 
@@ -269,17 +265,17 @@ void hmm_bo_device_destroy_free_bo_size(struct hmm_bo_device *bdev,
        check_bodev_null_return(bdev, (void)0);
 
 retry:
-       spin_lock_irqsave(&bdev->fblist_lock, flags);
+       spin_lock_irqsave(&bdev->list_lock, flags);
        list_for_each(pos, &bdev->free_bo_list) {
                bo = list_to_hmm_bo(pos);
                if (bo->pgnr == pgnr)
                        goto found;
        }
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        return;
 found:
        list_del(&bo->list);
-       spin_unlock_irqrestore(&bdev->fblist_lock, flags);
+       spin_unlock_irqrestore(&bdev->list_lock, flags);
        hmm_bo_unref(bo);
        goto retry;
 }
index fbf2d2d..c6fc595 100644 (file)
@@ -49,9 +49,10 @@ struct hmm_bo_device {
        struct hmm_vm           vaddr_space;
 
        struct list_head        free_bo_list;
-       struct spinlock         fblist_lock;
        struct list_head        active_bo_list;
-       struct spinlock         ablist_lock;
+
+       /* list lock is used to protect both of the buffer object lists */
+       struct spinlock         list_lock;
 
        int                     flag;
 };