Hi, Here is the patchset that performs cmpxchg_local and cmpxchg64_local standardization across architectures. It uses interrupt save/restore to emulate the atomic operation on architectures lacking such atomic op. We have seen interesing performance gain in slub on architectures where the local cmpxchg is faster than interrupt disable, namely x86 and amd64. It becomes less interesting on architectures lacking atomic ops and where the only cmpxchg primitive available is almost as fast as irq disable/enable (ia64); a small performance hit can be expected, mostly due to the additionnal memory barriers it adds to the code (and the fact that it is faster to disable interrupts once for a longer time rather than multiple times). It applies in this order on 2.6.23-mm1 : add-cmpxchg-local-to-generic-for-up.patch i386-cmpxchg64-80386-80486-fallback.patch add-cmpxchg64-to-alpha.patch add-cmpxchg64-to-mips.patch add-cmpxchg64-to-powerpc.patch add-cmpxchg64-to-x86_64.patch # add-cmpxchg-local-to-arm.patch add-cmpxchg-local-to-avr32.patch add-cmpxchg-local-to-blackfin.patch add-cmpxchg-local-to-cris.patch add-cmpxchg-local-to-frv.patch add-cmpxchg-local-to-h8300.patch add-cmpxchg-local-to-ia64.patch add-cmpxchg-local-to-m32r.patch fix-m32r-__xchg.patch fix-m32r-include-sched-h-in-smpboot.patch local_t_m32r_optimized.patch add-cmpxchg-local-to-m68k.patch add-cmpxchg-local-to-m68knommu.patch add-cmpxchg-local-to-parisc.patch add-cmpxchg-local-to-ppc.patch add-cmpxchg-local-to-s390.patch add-cmpxchg-local-to-sh.patch add-cmpxchg-local-to-sh64.patch add-cmpxchg-local-to-sparc.patch add-cmpxchg-local-to-sparc64.patch add-cmpxchg-local-to-v850.patch add-cmpxchg-local-to-xtensa.patch Mathieu -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
- Follow-Ups:
- [patch 13/28] Add cmpxchg_local, cmpxchg64 and cmpxchg64_local to ia64
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 19/28] Add cmpxchg_local to m68knommu
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 05/28] Add cmpxchg64 and cmpxchg64_local to powerpc
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 23/28] Add cmpxchg_local to sh, use generic cmpxchg() instead of cmpxchg_u32
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 07/28] Add cmpxchg_local to arm
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 17/28] local_t m32r use architecture specific cmpxchg_local
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 20/28] Add cmpxchg_local to parisc
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 02/28] Fall back on interrupt disable in cmpxchg8b on 80386 and 80486
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 27/28] Add cmpxchg_local to v850
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 04/28] Add cmpxchg64 and cmpxchg64_local to mips
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 01/28] Add cmpxchg_local to asm-generic for per cpu atomic operations
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 10/28] Add cmpxchg_local to cris
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 16/28] m32r: build fix of arch/m32r/kernel/smpboot.c
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 03/28] Add cmpxchg64 and cmpxchg64_local to alpha
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 18/28] Add cmpxchg_local to m86k
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 06/28] Add cmpxchg64 and cmpxchg64_local to x86_64
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 09/28] Add cmpxchg_local to blackfin, replace __cmpxchg by generic cmpxchg
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 14/28] New cmpxchg_local (optimized for UP case) for m32r
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 11/28] Add cmpxchg_local to frv
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 24/28] Add cmpxchg_local to sh64
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 15/28] Fix m32r __xchg
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 08/28] Add cmpxchg_local to avr32
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 21/28] Add cmpxchg_local to ppc
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 22/28] Add cmpxchg_local to s390
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 28/28] Add cmpxchg_local to xtensa
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 26/28] Add cmpxchg_local to sparc64
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 25/28] Add cmpxchg_local to sparc, move __cmpxchg to system.h
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 12/28] Add cmpxchg_local to h8300
- From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- [patch 13/28] Add cmpxchg_local, cmpxchg64 and cmpxchg64_local to ia64
- Prev by Date: [patch 11/28] Add cmpxchg_local to frv
- Next by Date: [patch 14/28] New cmpxchg_local (optimized for UP case) for m32r
- Previous by thread: tipc_config.h requires linux/string.h, which does not exist in exported headers
- Next by thread: [patch 12/28] Add cmpxchg_local to h8300
- Index(es):
![]() |