diff options
author | Mark Brown <broonie@linaro.org> | 2013-11-06 11:51:38 +0000 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-11-06 11:51:38 +0000 |
commit | 76e8de404a34bfff318da0b31e752db2642511f3 (patch) | |
tree | f486e22499fc5ce7548b76f299ecb91f52baf8ed /drivers/staging/android/sync.c | |
parent | e9b3bd248b349433215cf01064a866b632fb3f4b (diff) | |
parent | 354d86f4daecdc3553830e553f6fc17add736234 (diff) |
Merge branch 'linaro-android-3.10-lsk' of git://git.linaro.org/people/jstultz/android into lsk-v3.10-jstultzv3.10/topic/android-fixes
Diffstat (limited to 'drivers/staging/android/sync.c')
-rw-r--r-- | drivers/staging/android/sync.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c index 3893a357476..d38305b4093 100644 --- a/drivers/staging/android/sync.c +++ b/drivers/staging/android/sync.c @@ -79,27 +79,27 @@ static void sync_timeline_free(struct kref *kref) container_of(kref, struct sync_timeline, kref); unsigned long flags; - if (obj->ops->release_obj) - obj->ops->release_obj(obj); - spin_lock_irqsave(&sync_timeline_list_lock, flags); list_del(&obj->sync_timeline_list); spin_unlock_irqrestore(&sync_timeline_list_lock, flags); + if (obj->ops->release_obj) + obj->ops->release_obj(obj); + kfree(obj); } void sync_timeline_destroy(struct sync_timeline *obj) { obj->destroyed = true; + smp_wmb(); /* - * If this is not the last reference, signal any children - * that their parent is going away. + * signal any children that their parent is going away. */ + sync_timeline_signal(obj); - if (!kref_put(&obj->kref, sync_timeline_free)) - sync_timeline_signal(obj); + kref_put(&obj->kref, sync_timeline_free); } EXPORT_SYMBOL(sync_timeline_destroy); |