This series of patches enables queued rwlock and queued spinlock support for SPARC. These features were introduced some time ago in upstream. Here are some of the earlier discussions. https://lwn.net/Articles/572765/ https://lwn.net/Articles/582200/ https://lwn.net/Articles/561775/ https://lwn.net/Articles/590243/ Tests: Ran AIM7 benchmark to verify the performance on various workloads. https://github.com/davidlohr/areaim. Same benchmark was used when this feature was introduced and enabled on x86. Here are the test results. Kernel 4.11.0-rc6 4.11.0-rc6 + Change baseline queued locks (Avg No.of jobs) (Avg No.of jobs) Workload High systime 10-100 user 17290.48 17295.18 +0.02 High systime 200-1000 users 109814.95 110248.87 +0.39 High systime 1200-2000 users 107912.40 127923.16 +18.54 Disk IO 10-100 users 168910.16 158834.17 -5.96 Disk IO 200-1000 users 242781.74 281285.80 +15.85 Disk IO 1200-2000 users 228518.23 218421.23 -4.41 Disk IO 10-100 users 183933.77 207928.67 +13.04 Disk IO 200-1000 users 491981.56 500162.33 +1.66 Disk IO 1200-2000 users 463395.66 467312.70 +0.84 fserver 10-100 users 254177.53 270283.08 +6.33 fserver IO 200-1000 users 269017.35 324812.2 +20.74 fserver IO 1200-2000 users 229538.87 284713.77 +24.03 Disk I/O results are little bit in negative territory. But majority of the performance changes are in positive and it is significant in some cases. Babu Moger (6): kernel/locking: Fix compile error with qrwlock.c arch/sparc: Define config parameter CPU_BIG_ENDIAN arch/sparc: Introduce cmpxchg_u8 SPARC arch/sparc: Enable queued rwlocks for SPARC arch/sparc: Introduce xchg16 for SPARC arch/sparc: Enable queued spinlock support for SPARC arch/sparc/Kconfig | 6 +++ arch/sparc/include/asm/cmpxchg_64.h | 76 +++++++++++++++++++++++++++---- arch/sparc/include/asm/qrwlock.h | 7 +++ arch/sparc/include/asm/qspinlock.h | 7 +++ arch/sparc/include/asm/spinlock_64.h | 13 ++++- arch/sparc/include/asm/spinlock_types.h | 10 ++++- include/asm-generic/qrwlock_types.h | 6 +- kernel/locking/qrwlock.c | 1 + 8 files changed, 110 insertions(+), 16 deletions(-) create mode 100644 arch/sparc/include/asm/qrwlock.h create mode 100644 arch/sparc/include/asm/qspinlock.h