[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCHv1] x86: reintroduce read_unlock() optimization



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.

Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
---
 xen/include/asm-arm/spinlock.h | 6 ++++++
 xen/include/asm-x86/spinlock.h | 7 +++++++
 xen/include/xen/spinlock.h     | 1 +
 3 files changed, 14 insertions(+)
 create mode 100644 xen/include/asm-arm/spinlock.h
 create mode 100644 xen/include/asm-x86/spinlock.h

diff --git a/xen/include/asm-arm/spinlock.h b/xen/include/asm-arm/spinlock.h
new file mode 100644
index 0000000..81955d1
--- /dev/null
+++ b/xen/include/asm-arm/spinlock.h
@@ -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
index 0000000..7d69e75
--- /dev/null
+++ b/xen/include/asm-x86/spinlock.h
@@ -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 */
diff --git a/xen/include/xen/spinlock.h b/xen/include/xen/spinlock.h
index 9286543..fb0438e 100644
--- a/xen/include/xen/spinlock.h
+++ b/xen/include/xen/spinlock.h
@@ -2,6 +2,7 @@
 #define __SPINLOCK_H__
 
 #include <asm/system.h>
+#include <asm/spinlock.h>
 
 #ifndef NDEBUG
 struct lock_debug {
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.