Chris Metcalf
bc30c3576d
tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT
...
commit f862eefec0 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 509eb76ebf .
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2013-10-13 16:08:34 -07:00
..
2010-06-04 17:11:18 -04:00
2012-05-25 12:48:23 -04:00
2012-03-28 18:30:03 +01:00
2013-03-22 15:47:00 -04:00
2011-05-02 13:49:14 -04:00
2012-03-28 18:30:03 +01:00
2012-03-28 18:30:03 +01:00
2012-04-02 12:00:15 -04:00
2012-05-25 15:00:43 -04:00
2012-07-18 16:40:05 -04:00
2012-03-28 18:30:03 +01:00
2012-07-11 16:04:57 -04:00
2012-04-02 11:57:37 -04:00
2013-03-04 11:19:09 -05:00
2010-06-04 17:11:18 -04:00
2010-06-04 17:11:18 -04:00
2012-07-18 16:40:17 -04:00
2012-11-28 15:29:00 +01:00
2010-06-04 17:11:18 -04:00
2011-03-10 13:30:14 -05:00
2012-12-18 15:05:30 -08:00
2012-07-18 16:40:05 -04:00
2010-06-04 17:11:18 -04:00
2012-05-25 12:48:23 -04:00
2010-06-04 17:11:18 -04:00
2012-10-09 09:47:47 +01:00
2012-03-20 21:48:30 +08:00
2012-07-18 16:40:05 -04:00
2013-04-29 15:54:33 -07:00
2010-06-04 17:11:18 -04:00
2010-06-04 17:11:18 -04:00
2010-06-04 17:11:18 -04:00
2013-02-08 13:20:40 -05:00
2012-04-02 12:00:16 -04:00
2013-04-09 10:08:14 -07:00
2012-11-13 15:48:27 -05:00
2012-05-25 12:48:25 -04:00
2012-07-24 15:27:32 +08:00
2010-06-04 17:11:18 -04:00
2012-05-25 12:48:24 -04:00
2012-05-25 12:48:24 -04:00
2011-06-27 14:13:09 -07:00
2012-05-25 12:48:24 -04:00
2012-07-18 16:40:05 -04:00
2013-01-03 15:57:13 -08:00
2013-10-13 16:08:34 -07:00
2012-05-25 12:48:24 -04:00
2012-05-25 12:48:24 -04:00
2012-05-25 12:48:24 -04:00
2012-05-25 12:48:27 -04:00
2012-11-28 21:53:36 -05:00
2013-03-21 15:39:34 -04:00
2010-07-06 13:41:51 -04:00
2012-10-09 09:47:47 +01:00
2010-06-04 17:11:18 -04:00
2012-10-09 09:47:47 +01:00
2012-03-28 17:14:35 -07:00
2012-03-28 18:30:03 +01:00
2012-04-02 12:13:49 -04:00
2010-06-04 17:11:18 -04:00
2010-06-04 17:11:18 -04:00
2012-04-02 12:12:45 -04:00
2010-06-04 17:11:18 -04:00
2012-10-20 13:13:29 -04:00
2013-03-21 15:39:35 -04:00
2013-03-21 15:39:35 -04:00
2013-05-01 10:48:34 -07:00
2011-11-03 16:58:54 -04:00
2011-11-03 16:58:54 -04:00
2011-11-03 16:58:54 -04:00
2012-03-28 18:30:03 +01:00
2010-06-04 17:11:18 -04:00
2012-05-25 12:48:27 -04:00
2012-08-15 13:22:55 +02:00
2012-04-02 12:12:48 -04:00
2013-04-30 17:04:09 -07:00
2012-03-28 18:30:03 +01:00
2013-02-14 09:21:15 -05:00
2010-06-04 17:11:18 -04:00
2011-05-04 14:40:54 -04:00