From: Chris Metcalf Date: Thu, 26 Sep 2013 17:24:53 +0000 (-0400) Subject: tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT X-Git-Tag: v3.2.53~47 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06c5e3983fcaca7a9953890d603b075607e8bbd2;p=pandora-kernel.git tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT commit f862eefec0b68e099a9fa58d3761ffb10bad97e1 upstream. 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 509eb76ebf97. Signed-off-by: Chris Metcalf Signed-off-by: Ben Hutchings --- Reading git-diff-tree failed