aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/android/sync.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-11-06 11:51:38 +0000
committerMark Brown <broonie@linaro.org>2013-11-06 11:51:38 +0000
commit76e8de404a34bfff318da0b31e752db2642511f3 (patch)
treef486e22499fc5ce7548b76f299ecb91f52baf8ed /drivers/staging/android/sync.c
parente9b3bd248b349433215cf01064a866b632fb3f4b (diff)
parent354d86f4daecdc3553830e553f6fc17add736234 (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.c14
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);