linux/arch/tile
Chris Metcalf f862eefec0 tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT
It turns out the kernel relies on barrier() to force a reload of the
percpu offset value.  Since we can't easily modify the definition of
barrier() to include "tp" as an output register, we instead provide a
definition of __my_cpu_offset as extended assembly that includes a fake
stack read to hazard against barrier(), forcing gcc to know that it
must reread "tp" and recompute anything based on "tp" after a barrier.

This fixes observed hangs in the slub allocator when we are looping
on a percpu cmpxchg_double.

A similar fix for ARMv7 was made in June in change 509eb76ebf.

Cc: stable@vger.kernel.org
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
2013-09-30 10:34:41 -04:00
..
configs tile: refresh tile defconfig files 2013-09-06 13:06:30 -04:00
gxio tile: improve gxio iorpc autogenerated code style 2013-09-16 15:47:20 -04:00
include tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT 2013-09-30 10:34:41 -04:00
kernel tile: ensure interrupts disabled for preempt_schedule_irq() 2013-09-27 16:09:43 -04:00
kvm arch/tile/kvm: remove depends on CONFIG_EXPERIMENTAL 2013-01-17 12:11:26 -08:00
lib tile: include: asm: use 'long long' instead of 'u64' for atomic64_t and its related functions 2013-09-27 16:08:56 -04:00
mm tile: remove HUGE_VMAP dead code 2013-09-13 11:15:24 -04:00
Kbuild
Kconfig tile: double default VMALLOC space 2013-09-16 15:47:14 -04:00
Kconfig.debug tile: remove DEBUG_EXTRA_FLAGS kernel config option 2013-09-03 14:52:17 -04:00
Makefile tile: remove DEBUG_EXTRA_FLAGS kernel config option 2013-09-03 14:52:17 -04:00