linux/arch/arm
Will Deacon a76d7bd96d ARM: 7467/1: mutex: use generic xchg-based implementation for ARMv6+
The open-coded mutex implementation for ARMv6+ cores suffers from a
severe lack of barriers, so in the uncontended case we don't actually
protect any accesses performed during the critical section.

Furthermore, the code is largely a duplication of the ARMv6+ atomic_dec
code but optimised to remove a branch instruction, as the mutex fastpath
was previously inlined. Now that this is executed out-of-line, we can
reuse the atomic access code for the locking (in fact, we use the xchg
code as this produces shorter critical sections).

This patch uses the generic xchg based implementation for mutexes on
ARMv6+, which introduces barriers to the lock/unlock operations and also
has the benefit of removing a fair amount of inline assembly code.

Cc: <stable@vger.kernel.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Nicolas Pitre <nico@linaro.org>
Reported-by: Shan Kang <kangshan0910@gmail.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-07-31 10:30:41 +01:00
..
boot ARM: SoC fixes 2012-06-24 10:57:59 -07:00
common ARM: dma-mapping: fix debug messages in dmabounce code 2012-06-13 14:25:16 +02:00
configs ARM: ux500: Provide regulator support for SMSC911x via Device Tree 2012-06-01 02:04:46 +02:00
include/asm ARM: 7467/1: mutex: use generic xchg-based implementation for ARMv6+ 2012-07-31 10:30:41 +01:00
kernel ARM: 7466/1: disable interrupt before spinning endlessly 2012-07-31 10:30:31 +01:00
lib ARM: Remove support for ARMv3 ARM610 and ARM710 CPUs 2012-05-05 05:50:50 +01:00
mach-at91 Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-05-25 09:31:59 -07:00
mach-bcmring
mach-clps711x ARM: clps711x: Cleanup IRQ handling 2012-05-15 21:20:59 +02:00
mach-cns3xxx ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-davinci arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-dove ARM: Orion: Fix WDT compile for Dove and MV78xx0 2012-07-04 10:37:34 +02:00
mach-ebsa110
mach-ep93xx - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-exynos ARM: EXYNOS: Fix EXYNOS_DEV_DMA Kconfig entry 2012-06-27 10:03:00 +09:00
mach-footbridge ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-gemini
mach-h720x
mach-highbank ARM: highbank: Add smc calls to enable/disable the L2 2012-06-07 22:39:43 -07:00
mach-imx ARM: imx: assert SCC gate stays enabled 2012-07-04 09:38:29 +02:00
mach-integrator Merge branches 'amba', 'devel-stable', 'fixes', 'mach-types', 'mmci', 'pci' and 'versatile' into for-linus 2012-05-21 15:15:10 +01:00
mach-iop13xx ARM: PCI: get rid of pci_std_swizzle() 2012-05-13 17:12:16 +01:00
mach-iop32x ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-iop33x ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-ixp4xx - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-kirkwood ARM: Orion: Fix Virtual/Physical mixup with watchdog 2012-06-23 16:19:21 -07:00
mach-ks8695 ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-l7200/include/mach
mach-lpc32xx GPIO driver changes for v3.5 merge window 2012-05-24 14:01:46 -07:00
mach-mmp ARM: mmp: remove mach/gpio-pxa.h 2012-07-04 15:58:11 +08:00
mach-msm arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-mv78xx0 ARM: Orion: Fix WDT compile for Dove and MV78xx0 2012-07-04 10:37:34 +02:00
mach-mxs ARM: apx4devkit: fix FEC enabling PHY clock 2012-07-05 16:08:01 +08:00
mach-netx
mach-nomadik - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-omap1 - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-omap2 A few more OMAP fixes for 3.5-rc. These fix some bugs with power 2012-07-05 01:12:08 -07:00
mach-orion5x ARM: Orion: Fix Virtual/Physical mixup with watchdog 2012-06-23 16:19:21 -07:00
mach-picoxcell
mach-pnx4008 arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-prima2 arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-pxa ARM: pxa: hx4700: Fix basic suspend/resume 2012-07-01 14:40:58 +08:00
mach-realview
mach-rpc
mach-s3c24xx fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s3c64xx fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s3c2410
mach-s3c2412
mach-s3c2440
mach-s5p64x0 fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s5pc100 fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s5pv210 fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-sa1100 Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2012-05-29 18:21:44 -07:00
mach-shark ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-shmobile ARM: shmobile: r8a7779: Route all interrupts to ARM 2012-06-23 01:12:09 +02:00
mach-spear3xx Viresh has moved 2012-06-20 14:39:36 -07:00
mach-spear6xx Viresh has moved 2012-06-20 14:39:36 -07:00
mach-spear13xx Viresh has moved 2012-06-20 14:39:36 -07:00
mach-tegra ARM: tegra: make tegra_cpu_reset_handler_enable() __init 2012-06-18 16:42:57 -07:00
mach-u300
mach-ux500 serial/amba-pl011: move custom pin control to driver 2012-06-12 15:41:44 -07:00
mach-versatile ARM: fix mach-versatile/pci.c warning 2012-07-04 17:04:57 +01:00
mach-vexpress Merge branch 'late/soc' into devel-late 2012-05-30 16:06:46 -07:00
mach-vt8500
mach-w90x900
mach-zynq
mm ARM: fix warning caused by wrongly typed arm_dma_limit 2012-07-05 13:11:31 +01:00
net ARM: 7421/1: bpf_jit: BPF_S_ANC_ALU_XOR_X support 2012-06-14 15:12:13 +01:00
nwfpe
oprofile
plat-iop ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
plat-mxc Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2012-06-25 14:53:09 -07:00
plat-nomadik ARM: nomadik: enable PINCTRL_NOMADIK where needed 2012-05-15 14:42:57 +02:00
plat-omap Some uncontroversial OMAP clock, hwmod, and compiler warning fixes for 3.5-rc 2012-06-23 16:16:29 -07:00
plat-orion ARM: Orion: Fix Virtual/Physical mixup with watchdog 2012-06-23 16:19:21 -07:00
plat-pxa ARM: MMP: add pxa910-ssp into ssp_id_table 2012-06-11 12:25:50 +08:00
plat-s3c24xx ARM: S3C24XX: move common clock init into common.c 2012-05-12 16:22:18 +09:00
plat-samsung ARM: SAMSUNG: Fix for S3C2412 EBI memory mapping 2012-06-21 03:53:46 +09:00
plat-spear Viresh has moved 2012-06-20 14:39:36 -07:00
plat-versatile ARM: 7389/2: plat-versatile: modernize FPGA IRQ controller 2012-05-04 16:53:37 +01:00
tools ARM: Update mach-types 2012-04-26 08:46:02 +01:00
vfp Merge branch 'misc' into for-linus 2012-05-21 15:15:24 +01:00
Kconfig ARM: Orion5x - Restore parts of io.h, with rework 2012-06-23 16:18:17 -07:00
Kconfig-nommu
Kconfig.debug arm-soc: device tree conversions, part 2 2012-05-26 12:57:47 -07:00
Makefile arm-soc: soc specific changes, part 2 2012-05-26 13:05:55 -07:00