rcu: Change _wait_rcu_gp() to work around GCC bug 67055
authorOleg Nesterov <oleg@redhat.com>
Tue, 25 Aug 2015 18:45:18 +0000 (20:45 +0200)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Mon, 21 Sep 2015 03:50:06 +0000 (20:50 -0700)
commit66e8c57da6bf6b847a48a5a6fda59512f733ed78
tree42644ac73db43dfe197dad53763879ff4896cd0d
parent1f93e4a96c9109378204c147b3eec0d0e8100fde
rcu: Change _wait_rcu_gp() to work around GCC bug 67055

Code like this in inline functions confuses some recent versions of gcc:

const int n = const-expr;
whatever_t array[n];

For more details, see:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67055#c13

This compiler bug results in the following failure after 114b7fd4b (rcu:
Create rcu_sync infrastructure):

In file included from include/linux/rcupdate.h:429:0,
  from include/linux/rcu_sync.h:5,
  from kernel/rcu/sync.c:1:
include/linux/rcutiny.h: In function 'rcu_barrier_sched':
include/linux/rcutiny.h:55:20: internal compiler error: Segmentation fault
  static inline void rcu_barrier_sched(void)

This commit therefore eliminates the constant local variable in favor of
direct use of the expression.

Reported-and-tested-by: Mark Salter <msalter@redhat.com>
Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
include/linux/rcupdate.h