Module Name:    src
Committed By:   riastradh
Date:           Mon Aug 27 13:44:41 UTC 2018

Modified Files:
        src/sys/external/bsd/drm2/include/linux: kref.h

Log Message:
Insert membars needed for non-x86.

XXX We should really define membar_enter_postatomic and
membar_exit_preatomic to avoid relying on not typoing
__HAVE_ATOMIC_AS_MEMBAR.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/include/linux/kref.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/include/linux/kref.h
diff -u src/sys/external/bsd/drm2/include/linux/kref.h:1.6 src/sys/external/bsd/drm2/include/linux/kref.h:1.7
--- src/sys/external/bsd/drm2/include/linux/kref.h:1.6	Mon Aug 27 06:51:52 2018
+++ src/sys/external/bsd/drm2/include/linux/kref.h	Mon Aug 27 13:44:41 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: kref.h,v 1.6 2018/08/27 06:51:52 riastradh Exp $	*/
+/*	$NetBSD: kref.h,v 1.7 2018/08/27 13:44:41 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -36,6 +36,7 @@
 #include <sys/atomic.h>
 #include <sys/systm.h>
 
+#include <linux/atomic.h>
 #include <linux/mutex.h>
 
 struct kref {
@@ -55,6 +56,10 @@ kref_get(struct kref *kref)
 	    atomic_inc_uint_nv(&kref->kr_count);
 
 	KASSERTMSG((count > 1), "getting released kref");
+
+#ifndef __HAVE_ATOMIC_AS_MEMBAR
+	membar_enter();
+#endif
 }
 
 static inline bool
@@ -69,6 +74,10 @@ kref_get_unless_zero(struct kref *kref)
 	} while (atomic_cas_uint(&kref->kr_count, count, (count + 1)) !=
 	    count);
 
+#ifndef __HAVE_ATOMIC_AS_MEMBAR
+	membar_enter();
+#endif
+
 	return true;
 }
 
@@ -77,6 +86,10 @@ kref_sub(struct kref *kref, unsigned int
 {
 	unsigned int old, new;
 
+#ifndef __HAVE_ATOMIC_AS_MEMBAR
+	membar_exit();
+#endif
+
 	do {
 		old = kref->kr_count;
 		KASSERTMSG((count <= old), "overreleasing kref: %u - %u",
@@ -105,6 +118,10 @@ kref_put_mutex(struct kref *kref, void (
 {
 	unsigned int old, new;
 
+#ifndef __HAVE_ATOMIC_AS_MEMBAR
+	membar_exit();
+#endif
+
 	do {
 		old = kref->kr_count;
 		KASSERT(old > 0);

Reply via email to