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);