locking/mcs: Allow architecture specific asm files to be used for contended case
authorTim Chen <tim.c.chen@linux.intel.com>
Tue, 21 Jan 2014 23:36:22 +0000 (15:36 -0800)
committerIngo Molnar <mingo@kernel.org>
Sun, 9 Feb 2014 20:18:52 +0000 (21:18 +0100)
This patch allows each architecture to add its specific assembly optimized
arch_mcs_spin_lock_contended and arch_mcs_spinlock_uncontended for
MCS lock and unlock functions.

Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Scott J Norton <scott.norton@hp.com>
Cc: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Cc: AswinChandramouleeswaran <aswin@hp.com>
Cc: George Spelvin <linux@horizon.com>
Cc: Rik vanRiel <riel@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: MichelLespinasse <walken@google.com>
Cc: Peter Hurley <peter@hurleysoftware.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Alex Shi <alex.shi@linaro.org>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: "Figo.zhang" <figo1802@gmail.com>
Cc: "Paul E.McKenney" <paulmck@linux.vnet.ibm.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Davidlohr Bueso <davidlohr.bueso@hp.com>
Cc: Waiman Long <waiman.long@hp.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matthew R Wilcox <matthew.r.wilcox@intel.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1390347382.3138.67.camel@schen9-DESK
Signed-off-by: Ingo Molnar <mingo@kernel.org>
31 files changed:
arch/alpha/include/asm/Kbuild
arch/arc/include/asm/Kbuild
arch/arm/include/asm/Kbuild
arch/arm64/include/asm/Kbuild
arch/avr32/include/asm/Kbuild
arch/blackfin/include/asm/Kbuild
arch/c6x/include/asm/Kbuild
arch/cris/include/asm/Kbuild
arch/frv/include/asm/Kbuild
arch/hexagon/include/asm/Kbuild
arch/ia64/include/asm/Kbuild
arch/m32r/include/asm/Kbuild
arch/m68k/include/asm/Kbuild
arch/metag/include/asm/Kbuild
arch/microblaze/include/asm/Kbuild
arch/mips/include/asm/Kbuild
arch/mn10300/include/asm/Kbuild
arch/openrisc/include/asm/Kbuild
arch/parisc/include/asm/Kbuild
arch/powerpc/include/asm/Kbuild
arch/s390/include/asm/Kbuild
arch/score/include/asm/Kbuild
arch/sh/include/asm/Kbuild
arch/sparc/include/asm/Kbuild
arch/tile/include/asm/Kbuild
arch/um/include/asm/Kbuild
arch/unicore32/include/asm/Kbuild
arch/x86/include/asm/Kbuild
arch/xtensa/include/asm/Kbuild
include/asm-generic/mcs_spinlock.h [new file with mode: 0644]
include/linux/mcs_spinlock.h

index 55a2b0395d480a7c5cf1b7dde54aaddaa146aba9..7736f426ff3b13351a9e0575d0031a508bd0a952 100644 (file)
@@ -3,5 +3,6 @@
 generic-y += clkdev.h
 generic-y += exec.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += trace_clock.h
index 54ceb91c7ce0b20410dad4ee61fd135a868e0ea6..e76fd79f32b0126ee2e83dfaa5ba05d3d4c98452 100644 (file)
@@ -22,6 +22,7 @@ generic-y += kmap_types.h
 generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += msgbuf.h
 generic-y += param.h
index 3b2092049b51e730787463a326bd765f8d20ec7f..23e728ecf8ab3707403c811b6b43baead7198380 100644 (file)
@@ -14,6 +14,7 @@ generic-y += irq_regs.h
 generic-y += kdebug.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += msgbuf.h
 generic-y += param.h
 generic-y += parport.h
index 54038befa0a408352a7054c68512c6bf41905615..3bdfdda70567b0ab1a630d23020591fc91a758f9 100644 (file)
@@ -23,6 +23,7 @@ generic-y += kmap_types.h
 generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += msgbuf.h
 generic-y += mutex.h
index 064ca3c058ffe98a2236cd44d9350992f2c4a67a..8b398ff96974f339d7443122459de08f81caad8e 100644 (file)
@@ -11,6 +11,7 @@ generic-y += hash.h
 generic-y += irq_regs.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += param.h
 generic-y += percpu.h
 generic-y += preempt.h
index ca30a3dc47e7e7dc15f0c10d69c08a4f95bd54a1..0d93b9a79ca9561399a152d25a3545a09496b858 100644 (file)
@@ -20,6 +20,7 @@ generic-y += kmap_types.h
 generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += msgbuf.h
 generic-y += mutex.h
index dea0671524a16e2599e43b0ea0faf6948e991732..8dbdce8421b08c0e58322db87002ef314778cd1b 100644 (file)
@@ -25,6 +25,7 @@ generic-y += irq_regs.h
 generic-y += kdebug.h
 generic-y += kmap_types.h
 generic-y += local.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += mmu.h
 generic-y += mmu_context.h
index 7f8d1b174a34c12999b77fab8ecf87fd480e6e2d..056027f38351894e3764cc7042bb1e2215d8b6d9 100644 (file)
@@ -9,6 +9,7 @@ generic-y += exec.h
 generic-y += hash.h
 generic-y += kvm_para.h
 generic-y += linkage.h
+generic-y += mcs_spinlock.h
 generic-y += module.h
 generic-y += preempt.h
 generic-y += trace_clock.h
index 93428d035cfbdc21bb2a691b4575daa09edad355..babb9338ebf85b4a3fa02f492e1cf68886c9ad8b 100644 (file)
@@ -2,5 +2,6 @@
 generic-y += clkdev.h
 generic-y += exec.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += trace_clock.h
index 9f0eda48643a9a06f0d83f3e387fc6b613bca7e5..eadcc118f9506d8fbfddfd5b0dc7e65c6f3f9673 100644 (file)
@@ -27,6 +27,7 @@ generic-y += kdebug.h
 generic-y += kmap_types.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += msgbuf.h
 generic-y += pci.h
index 81ebef7f1a871462411f484820a4b6b63ae69910..0da4aa2602ae01d9badaca0f960e8d6b4c16ae2b 100644 (file)
@@ -3,6 +3,7 @@ generic-y += clkdev.h
 generic-y += exec.h
 generic-y += hash.h
 generic-y += kvm_para.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += trace_clock.h
 generic-y += vtime.h
index 87042215b5434b6cb0476237c5f10faf5a90858b..5825a35b2c56568cf95eb2095e68c532c197862a 100644 (file)
@@ -2,6 +2,7 @@
 generic-y += clkdev.h
 generic-y += exec.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += module.h
 generic-y += preempt.h
 generic-y += trace_clock.h
index f44ac8f9536acf08bff9a84ecc71620cd0868344..86b4c178cc75893f4bb894e3f046012e4c7742cb 100644 (file)
@@ -16,6 +16,7 @@ generic-y += kmap_types.h
 generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += mutex.h
 generic-y += percpu.h
index ac22144e92a3f25a413bd2d304599ae1c2cd7b2e..c29ead89a31778da9d5f217b6cc984c1176a6772 100644 (file)
@@ -24,6 +24,7 @@ generic-y += kmap_types.h
 generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += msgbuf.h
 generic-y += mutex.h
 generic-y += param.h
index 4b5f12259d81c89e01fa5d9fd9ba288c825a39cc..1f590ab8f32373590c388fa22faab6d41a883b28 100644 (file)
@@ -3,6 +3,7 @@ generic-y += barrier.h
 generic-y += clkdev.h
 generic-y += exec.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += syscalls.h
 generic-y += trace_clock.h
index 82ee17a68ae00009201ee64a607f7e021d606ef4..05439187891dfa02e582dc1caa2b6abbbfb8395b 100644 (file)
@@ -4,6 +4,7 @@ generic-y += current.h
 generic-y += emergency-restart.h
 generic-y += hash.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mutex.h
 generic-y += parport.h
 generic-y += percpu.h
index da3b2f50c07ea4fa521894b4e13c291f6ee33827..cbc6b9bf45daf57210d853d6bc484b8938c4b960 100644 (file)
@@ -3,5 +3,6 @@ generic-y += barrier.h
 generic-y += clkdev.h
 generic-y += exec.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += trace_clock.h
index f62a67a150554fb05862a4d0e65e7cd1e185c6d0..480af0d9c2f5dbe20fb39dc6331648dacb043a97 100644 (file)
@@ -35,6 +35,7 @@ generic-y += kdebug.h
 generic-y += kmap_types.h
 generic-y += kvm_para.h
 generic-y += local.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += module.h
 generic-y += msgbuf.h
index 958b79aac24f1634a5cba7d390450aef7a9577ed..ecf25e6678ad5a2f0e2bd63761699e85c9d2d759 100644 (file)
@@ -14,6 +14,7 @@ generic-y += kdebug.h
 generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mutex.h
 generic-y += param.h
 generic-y += percpu.h
index b618c416d3d98e9cb39cd7f8d58494adc1189e06..3fb1bc432f4f6106f1a892ce02113ec68970af6a 100644 (file)
@@ -1,6 +1,7 @@
 
 generic-y += clkdev.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += rwsem.h
 generic-y += trace_clock.h
index 482f492f0834f82fbcef12bd1b6fc40b8a91d4ee..57892a8a905584d79fd112a7c2e67a319a3f9e45 100644 (file)
@@ -2,5 +2,6 @@
 
 generic-y += clkdev.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += trace_clock.h
index e92319fb146d4cb69aa41c3195bc809185eb9096..4630cf217b5bc82260beb3198da71a4ff7808485 100644 (file)
@@ -5,6 +5,7 @@ header-y +=
 generic-y += barrier.h
 generic-y += clkdev.h
 generic-y += hash.h
+generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += trace_clock.h
 generic-y += xor.h
index 85c214e456f983bc2e6e078adc04387ea1f97592..c19e47dacb31bceec56abeac4c96ca32ad3a2977 100644 (file)
@@ -15,6 +15,7 @@ generic-y += irq_regs.h
 generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += msgbuf.h
 generic-y += param.h
index 82150287bfa41d8fe97f5c03e764d6e183e23411..a45821818003fce80d501b59653ac35eedcc6875 100644 (file)
@@ -11,6 +11,7 @@ generic-y += irq_regs.h
 generic-y += linkage.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += module.h
 generic-y += mutex.h
 generic-y += preempt.h
index e0b1ed967737714dd0bf63ba56e1be5114aef980..0aa5675e7025e1f791da57ed9bc52133dd4121da 100644 (file)
@@ -19,6 +19,7 @@ generic-y += ipcbuf.h
 generic-y += irq_regs.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += msgbuf.h
 generic-y += mutex.h
 generic-y += param.h
index 215e05d8d4b844259c28452bcdc015e18448b2d5..a5e4b6068213f4f147639a9ba428b120d8e9c886 100644 (file)
@@ -15,6 +15,7 @@ generic-y += hw_irq.h
 generic-y += io.h
 generic-y += irq_regs.h
 generic-y += kdebug.h
+generic-y += mcs_spinlock.h
 generic-y += mutex.h
 generic-y += param.h
 generic-y += pci.h
index ad2c737a9cabd01ae77c71360bc56763e4076966..1e5fb872a4aa60d3292705b8bc34a69a9038d85a 100644 (file)
@@ -25,6 +25,7 @@ generic-y += irq_regs.h
 generic-y += kdebug.h
 generic-y += kmap_types.h
 generic-y += local.h
+generic-y += mcs_spinlock.h
 generic-y += mman.h
 generic-y += module.h
 generic-y += msgbuf.h
index 7f669853317a3e940647319c21705ca951fb18ac..a8fee078b92f00dd204633a91b19961714ac6ab8 100644 (file)
@@ -5,3 +5,4 @@ genhdr-y += unistd_64.h
 genhdr-y += unistd_x32.h
 
 generic-y += clkdev.h
+generic-y += mcs_spinlock.h
index 223280d8e61183687397a3105e64b6f362c791c5..c3d20ba6eb86d6f7d42102f076f6085bcbe096c8 100644 (file)
@@ -18,6 +18,7 @@ generic-y += kvm_para.h
 generic-y += linkage.h
 generic-y += local.h
 generic-y += local64.h
+generic-y += mcs_spinlock.h
 generic-y += percpu.h
 generic-y += preempt.h
 generic-y += resource.h
diff --git a/include/asm-generic/mcs_spinlock.h b/include/asm-generic/mcs_spinlock.h
new file mode 100644 (file)
index 0000000..10cd4ff
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef __ASM_MCS_SPINLOCK_H
+#define __ASM_MCS_SPINLOCK_H
+
+/*
+ * Architectures can define their own:
+ *
+ *   arch_mcs_spin_lock_contended(l)
+ *   arch_mcs_spin_unlock_contended(l)
+ *
+ * See kernel/locking/mcs_spinlock.c.
+ */
+
+#endif /* __ASM_MCS_SPINLOCK_H */
index e9a4d74c63dc90364227128fec365183d31c5914..f2a5c63600838f148ebb715ec585ec10835aa71a 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef __LINUX_MCS_SPINLOCK_H
 #define __LINUX_MCS_SPINLOCK_H
 
+#include <asm/mcs_spinlock.h>
+
 struct mcs_spinlock {
        struct mcs_spinlock *next;
        int locked; /* 1 if lock acquired */