Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S945411AbcJSPq0 (ORCPT ); Wed, 19 Oct 2016 11:46:26 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:55597 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S945512AbcJSPpm (ORCPT ); Wed, 19 Oct 2016 11:45:42 -0400 From: Arnd Bergmann To: Ard Biesheuvel Cc: "linux-arm-kernel@lists.infradead.org" , Will Deacon , Peter Zijlstra , Stephen Boyd , "linux-kernel@vger.kernel.org" , james.greenhalgh@arm.com, Gregory CLEMENT , Linus Torvalds , Ingo Molnar Subject: Re: Build failure with v4.9-rc1 and GCC trunk -- compiler weirdness Date: Wed, 19 Oct 2016 17:44:36 +0200 Message-ID: <2995302.b19MFEzy6p@wuerfel> User-Agent: KMail/5.1.3 (Linux/4.4.0-34-generic; KDE/5.18.0; x86_64; ; ) In-Reply-To: References: <20161017183806.GG5601@arm.com> <4333753.kxspqi1Miz@wuerfel> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:FMWH4JHxqlYtQTS5F3+VcvOH4+wrmxir09QUgXUz8QVpg2QXjUI aYFQoz7a/mSkTMTbG49F7cj5uqVhWYhR03t1XMvb4bl0hIJrCUnatv3LQUWmChbUnawBVGj dEI/3p+qwrDCgAY4PxsYClps6q13uUsde0mu52No0f2SujV7UkmzVJPqTceN1B/uasuMur4 g8/z6DpaP8BD6vuX7cA/g== X-UI-Out-Filterresults: notjunk:1;V01:K0:kP70tDm0aQY=:xNjcHkGKWKbJsinFtCI8ZQ Wd/muTPYBWbHQzClURCyLAdHdAdCN2OMxvHJ+p9CMyZu8oudHlcXpSstlTd4WDiJvYLMBaBE1 99ejA6JtfCXlWXoHlmr9a6npnHlenxpFfx/dTYmoLgRIJyDqV59wObTXc6oaCZOTjTYaw8upk CyC1hJl2SMlGvjJHoNeVkv/SXIkgKtsN/Uzbs4XFB4Ik+oNm9gArutvq0xmZcHhoyBhxXGGRO Zon5YYQyu3h6IRwEYMI/qL/Gsjde9OmgIKqdfKFLYKC+2k8x0xvCbjuvVLz2wRhfE4bww5kby I1S6oOVq3PSsR3Jx/gJWZ4IFnodnFIhV9drLkNnv0qrd8mo6SJeP9nKMicREW/udTWSb8eJaP 88CvQAn3TFhD39Ii/lAL5Vbi91geHv8n1bqXNsmsMPpF9rkjbBm4R+xdbCubTAMTbZDxGCRdZ 13W44pYEUl7gKk2dmKMe9rRxM8XjOeQbQNlFA0uAlN9OOxQ0Ou1VYADk8tlZgtaVmjeOx0aJY DiwjzlZAnTWnITDLb6SrVmuxcDck/jmeGi4p5ETw5biAOSpd/YciOuhmAM0uXLdWcYa90EHBZ S1Q0VpkRtUj1H8SsR93TsjP970N2JqwVecwEIq3UNRXO8hGPAGX76REBZWYxP5o708b4Tm15r n0MUsJpYdvrWlowBdZeLPyAkyj8w9mlmumbo0UUFLR0husA8xBWc7GHzN/6z7zPckyv+/4YSM rzpkUpEQ+Pjqry9O Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1790 Lines: 41 On Wednesday, October 19, 2016 4:27:51 PM CEST Ard Biesheuvel wrote: > > > > Why not turn it into a runtime warning in this driver? > > > > diff --git a/drivers/clk/mvebu/armada-37xx-periph.c b/drivers/clk/mvebu/armada-37xx-periph.c > > index cecb0fdfaef6..711d1d9842cc 100644 > > --- a/drivers/clk/mvebu/armada-37xx-periph.c > > +++ b/drivers/clk/mvebu/armada-37xx-periph.c > > @@ -349,8 +349,10 @@ static int armada_3700_add_composite_clk(const struct clk_periph_data *data, > > rate->reg = reg + (u64)rate->reg; > > for (clkt = rate->table; clkt->div; clkt++) > > table_size++; > > - rate->width = order_base_2(table_size); > > - rate->lock = lock; > > + if (!WARN_ON(table_size == 0)) { > > + rate->width = order_base_2(table_size); > > + rate->lock = lock; > > + } > > } > > } > > > > I guess Will is not looking for a way to fix the driver, but for a way > to eliminate this issue entirely going forward. > > In general, I think the issue where constant folding results in > ilog2() or other similar functions being called with invalid build > time constant parameter values is simply something we have to deal > with. > > In this case, it is in fact order_base_2() that deviates from its > documented behavior (as Will points out), and fixing /that/ should > make this particular issue go away afaict. Ah, right. I also noticed that order_base_2() is defined as log2(1 << (log2(n-1)+1)), which seems a bit redundant. Maybe we can simplify it to something like #define order_base_2(n) ((n) <= 1) ? 0 : log2((n) - 1) + 1) Arnd