From: Ilkka Koskinen Date: Fri, 23 Dec 2011 09:49:58 +0000 (+0200) Subject: atomisp: hmm: Replace list specific spin locks with a single one. X-Git-Tag: 2.1b_release~1596 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=60f5dd290248e828f1f4864e974e4e6391346196;p=kernel%2Fkernel-mfld-blackbay.git atomisp: hmm: Replace list specific spin locks with a single one. BZ: 19462 Change-Id: I09f0849d0188c70575ead2c7aacac3bb0361f788 Signed-off-by: Ilkka Koskinen Reviewed-on: http://android.intel.com:8080/30887 Reviewed-by: Kruger, Jozef Reviewed-by: Toivonen, Tuukka Reviewed-by: Gross, Mark Reviewed-by: Cohen, David A Reviewed-by: Wang, Wen W Tested-by: Chotard, Celine Reviewed-by: buildbot Tested-by: buildbot --- diff --git a/drivers/media/video/atomisp/hmm/hmm_bo.c b/drivers/media/video/atomisp/hmm/hmm_bo.c index e8c3122..bbc8b51 100644 --- a/drivers/media/video/atomisp/hmm/hmm_bo.c +++ b/drivers/media/video/atomisp/hmm/hmm_bo.c @@ -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; diff --git a/drivers/media/video/atomisp/hmm/hmm_bo_dev.c b/drivers/media/video/atomisp/hmm/hmm_bo_dev.c index 9d50825..e3b55e5 100644 --- a/drivers/media/video/atomisp/hmm/hmm_bo_dev.c +++ b/drivers/media/video/atomisp/hmm/hmm_bo_dev.c @@ -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; } diff --git a/drivers/media/video/atomisp/include/hmm/hmm_bo_dev.h b/drivers/media/video/atomisp/include/hmm/hmm_bo_dev.h index fbf2d2d..c6fc595 100644 --- a/drivers/media/video/atomisp/include/hmm/hmm_bo_dev.h +++ b/drivers/media/video/atomisp/include/hmm/hmm_bo_dev.h @@ -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; };