drm: Implement kref_get_unless_zero()
authorFrançois Tigeot <ftigeot@wolfpond.org>
Sat, 22 Feb 2014 15:09:12 +0000 (16:09 +0100)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Sat, 22 Feb 2014 15:14:19 +0000 (16:14 +0100)
Fortunately the existing atomic_add_unless() function is able to manage
all the complexity of this algorithm by itself.

sys/dev/drm/include/linux/kref.h

index 6bdaa4a..d63da23 100644 (file)
@@ -71,4 +71,12 @@ kref_sub(struct kref *kref, unsigned int count,
        return 0;
 }
 
-#endif /* _KREF_H_ */
+/*
+ * kref_get_unless_zero: Increment refcount for object unless it is zero.
+ */
+static inline int __must_check kref_get_unless_zero(struct kref *kref)
+{
+       return atomic_add_unless(&kref->refcount, 1, 0);
+}
+
+#endif /* _LINUX_KREF_H_ */