]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/xen.git/commitdiff
x86: reintroduce read_unlock() optimization
authorDavid Vrabel <david.vrabel@citrix.com>
Mon, 13 Jul 2015 09:50:51 +0000 (11:50 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 13 Jul 2015 09:50:51 +0000 (11:50 +0200)
Commit 902d1b5c310fb63b511f0b967cf5f32d3f605f3d (x86,arm: remove
asm/spinlock.h from all architectures) inadvertantly removed an
x86-specific optimization for read_unlock*().

Re-add asm/spinlock.h to allow architectures to provide an optmized
_raw_read_unlock() and make x86 provide the previous implementation.

Reported-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
xen/include/asm-arm/spinlock.h [new file with mode: 0644]
xen/include/asm-x86/spinlock.h [new file with mode: 0644]
xen/include/xen/spinlock.h

diff --git a/xen/include/asm-arm/spinlock.h b/xen/include/asm-arm/spinlock.h
new file mode 100644 (file)
index 0000000..81955d1
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef __ASM_SPINLOCK_H
+#define __ASM_SPINLOCK_H
+
+/* Nothing ARM specific. */
+
+#endif /* __ASM_SPINLOCK_H */
diff --git a/xen/include/asm-x86/spinlock.h b/xen/include/asm-x86/spinlock.h
new file mode 100644 (file)
index 0000000..7d69e75
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef __ASM_SPINLOCK_H
+#define __ASM_SPINLOCK_H
+
+#define _raw_read_unlock(l) \
+    asm volatile ( "lock; dec%z0 %0" : "+m" ((l)->lock) :: "memory" )
+
+#endif /* __ASM_SPINLOCK_H */
index 9286543beab5a67c19ede8f71f0ef55a22bc9942..fb0438e5425cd822eb42f18b695dd5ee991f0ad2 100644 (file)
@@ -2,6 +2,7 @@
 #define __SPINLOCK_H__
 
 #include <asm/system.h>
+#include <asm/spinlock.h>
 
 #ifndef NDEBUG
 struct lock_debug {