1. 30 9月, 2013 1 次提交
    • C
      tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT · f862eefe
      Chris Metcalf 提交于
      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 509eb76e.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NChris Metcalf <cmetcalf@tilera.com>
      f862eefe
  2. 05 6月, 2010 1 次提交