From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755810AbbHYTAy (ORCPT ); Tue, 25 Aug 2015 15:00:54 -0400 Received: from e38.co.us.ibm.com ([32.97.110.159]:41880 "EHLO e38.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751631AbbHYTAx (ORCPT ); Tue, 25 Aug 2015 15:00:53 -0400 X-Helo: d03dlp02.boulder.ibm.com X-MailFrom: paulmck@linux.vnet.ibm.com X-RcptTo: linux-kernel@vger.kernel.org Date: Tue, 25 Aug 2015 12:00:27 -0700 From: "Paul E. McKenney" To: Oleg Nesterov Cc: Mark Salter , Yoshinori Sato , uclinux-h8-devel@lists.sourceforge.jp, "linux-kernel@vger.kernel.org" , "Peter Zijlstra (Intel)" , Josh Triplett , Guenter Roeck Subject: Re: [PATCH] rcu: change _wait_rcu_gp() to work around gcc 67055 bug Message-ID: <20150825190027.GI11078@linux.vnet.ibm.com> Reply-To: paulmck@linux.vnet.ibm.com References: <55DB63AC.7070305@roeck-us.net> <8737z7nc7b.wl-ysato@users.sourceforge.jp> <1440512875.5882.16.camel@redhat.com> <55DC83C7.1060809@roeck-us.net> <20150825184518.GA15234@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150825184518.GA15234@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15082519-0029-0000-0000-00000C2D4CD9 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 25, 2015 at 08:45:18PM +0200, Oleg Nesterov wrote: > The code like > > const int n = const-expr; > whatever_t array[n]; > > in inline function can confuse gcc, see > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67055#c13 > > This leads to > > In file included from include/linux/rcupdate.h:429:0, > from include/linux/rcusync.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) > > build failure after ec90a194a "rcu: Create a synchronize_rcu_mult()" > and 114b7fd4b "rcu: Create rcu_sync infrastructure" meet each other. > > Reported-and-tested-by: Mark Salter > Reported-by: Guenter Roeck > Signed-off-by: Oleg Nesterov Ouch!!! Queued for testing, in the absence of problems, will push into the upcoming merge window. Thank you all for the testing and the fix! Thanx, Paul > --- > include/linux/rcupdate.h | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h > index ff47651..c353c2b 100644 > --- a/include/linux/rcupdate.h > +++ b/include/linux/rcupdate.h > @@ -230,12 +230,11 @@ void __wait_rcu_gp(bool checktiny, int n, call_rcu_func_t *crcu_array, > struct rcu_synchronize *rs_array); > > #define _wait_rcu_gp(checktiny, ...) \ > -do { \ > - call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \ > - const int __n = ARRAY_SIZE(__crcu_array); \ > - struct rcu_synchronize __rs_array[__n]; \ > - \ > - __wait_rcu_gp(checktiny, __n, __crcu_array, __rs_array); \ > +do { \ > + call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \ > + struct rcu_synchronize __rs_array[ARRAY_SIZE(__crcu_array)]; \ > + __wait_rcu_gp(checktiny, ARRAY_SIZE(__crcu_array), \ > + __crcu_array, __rs_array); \ > } while (0) > > #define wait_rcu_gp(...) _wait_rcu_gp(false, __VA_ARGS__) > -- > 2.4.3 > >