Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp3522659pxb; Mon, 16 Nov 2020 17:43:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJwImT/6IXMRoj8iXche8Tv5A/NejtgLgEv/JcSKwEkP9Y3n3oRc14cLi2GHGjzwVWFd16r6 X-Received: by 2002:a17:906:f0d4:: with SMTP id dk20mr16734111ejb.180.1605577413102; Mon, 16 Nov 2020 17:43:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605577413; cv=none; d=google.com; s=arc-20160816; b=bguRIa5wdDFYJ+1XfIkhP/VLevg9Q+nHvpPJ3lrgljQFLrCpUfkyyvjjB4UbKgZ166 Hi8awO2yBZK3pH1TzzUA/HPFj0Bf42cU+EDH7tqI6BnTW6qz6EWvc1e9zTA2x1c5gPyx kunPwVhU27HKnMi0/ACPmM2WTpTQFERbTKJ6Tetf+mTTz7AMV9xfjHcupas5hPrfsbfR 4oGLnIyyXL4lTM9+KxrHfPSvg/VDCmNP2GLxIO47kgE0oAsteu/i+mu6gqRKGjaZIj7o tW4XS8us8/qRrVExz8hjDMTeajL0BuHdE1kOj4vulwjXbL24WhDbvoHqN1cgsmMLd3jT knbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=w90tsuYeH3WNkcWM5FGBW/FTHnoV3xscLmuP/EdxWZw=; b=PSb+XqK44G1MPgbJ+mpcnIF9evt8q1y5PM8KQ38lDABOR90TSZb/jFJS/bymZPumr3 lU0vXVfWb9NPbOiwWSBFo1ancWUKXwBdx+yi8nH3GLrGdHYzLFkJXP9v/8kamOyE0yo5 723dL27HGuZ38kkxMpud2YxWoOQOcI5kYwQ6F3+X5YpP3Uk+KA8q45S6c+72HQCgGbcY LhpG+YcKOQuDhYcEmbBEBDSL6ogk8N1R7aiE6T36U+Lhux4GyIHq1ftrIt0KiHRHX1Gy a8uwlSfXeJl/mYcGZ+i6h8hu5EAA95nnzjifjb00gsKHApY7WASHzdOue2d+LMmlFMvr VXZw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id di3si12289860edb.554.2020.11.16.17.43.10; Mon, 16 Nov 2020 17:43:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728405AbgKPJIP (ORCPT + 99 others); Mon, 16 Nov 2020 04:08:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728379AbgKPJIP (ORCPT ); Mon, 16 Nov 2020 04:08:15 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8A40C0613CF for ; Mon, 16 Nov 2020 01:08:14 -0800 (PST) Received: from pty.hi.pengutronix.de ([2001:67c:670:100:1d::c5]) by metis.ext.pengutronix.de with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1keaUc-0001lp-CB; Mon, 16 Nov 2020 10:08:10 +0100 Received: from ukl by pty.hi.pengutronix.de with local (Exim 4.89) (envelope-from ) id 1keaUZ-0001Ly-0z; Mon, 16 Nov 2020 10:08:07 +0100 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Vijayakannan Ayyathurai , Thierry Reding Cc: kbuild-all@lists.01.org, Linux Memory Management List , "Lai, Poey Seng" , "Vineetha G. Jaya Kumaran" , Andy Shevchenko , linux-kernel@vger.kernel.org, kernel@pengutronix.de, kernel test robot Subject: [PATCH RFC] pwm: keembay: Fix build failure with -Os Date: Mon, 16 Nov 2020 10:08:04 +0100 Message-Id: <20201116090804.206286-1-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <202011160303.qi5aRChY-lkp@intel.com> References: <202011160303.qi5aRChY-lkp@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c5 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The driver used this construct: #define KMB_PWM_LEADIN_MASK GENMASK(30, 0) static inline void keembay_pwm_update_bits(struct keembay_pwm *priv, u32 mask, u32 val, u32 offset) { u32 buff = readl(priv->base + offset); buff = u32_replace_bits(buff, val, mask); writel(buff, priv->base + offset); } ... keembay_pwm_update_bits(priv, KMB_PWM_LEADIN_MASK, 0, KMB_PWM_LEADIN_OFFSET(pwm->hwpwm)); With CONFIG_CC_OPTIMIZE_FOR_SIZE the compiler (here: gcc 10.2.0) this triggers: In file included from /home/uwe/gsrc/linux/drivers/pwm/pwm-keembay.c:16: In function ‘field_multiplier’, inlined from ‘keembay_pwm_update_bits’ at /home/uwe/gsrc/linux/include/linux/bitfield.h:124:17: /home/uwe/gsrc/linux/include/linux/bitfield.h:119:3: error: call to ‘__bad_mask’ declared with attribute error: bad bitfield mask 119 | __bad_mask(); | ^~~~~~~~~~~~ In function ‘field_multiplier’, inlined from ‘keembay_pwm_update_bits’ at /home/uwe/gsrc/linux/include/linux/bitfield.h:154:1: /home/uwe/gsrc/linux/include/linux/bitfield.h:119:3: error: call to ‘__bad_mask’ declared with attribute error: bad bitfield mask 119 | __bad_mask(); | ^~~~~~~~~~~~ The compiler doesn't seem to be able to notice that with field being 0x3ffffff the expression if ((field | (field - 1)) & ((field | (field - 1)) + 1)) __bad_mask(); can be optimized away. So use __always_inline and document the problem in a comment to fix this. Reported-by: kernel test robot Signed-off-by: Uwe Kleine-König --- Hello, I'm not sure this is the right fix. Maybe the bitfield stuff can be changed somehow to make this problem go away, too? Best regards Uwe drivers/pwm/pwm-keembay.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/pwm/pwm-keembay.c b/drivers/pwm/pwm-keembay.c index 2b6dd070daa4..cdfdef66ff8e 100644 --- a/drivers/pwm/pwm-keembay.c +++ b/drivers/pwm/pwm-keembay.c @@ -63,7 +63,12 @@ static int keembay_clk_enable(struct device *dev, struct clk *clk) return devm_add_action_or_reset(dev, keembay_clk_unprepare, clk); } -static inline void keembay_pwm_update_bits(struct keembay_pwm *priv, u32 mask, +/* + * With gcc 10, CONFIG_CC_OPTIMIZE_FOR_SIZE and only "inline" instead of + * "__always_inline" this fails to compile because the compiler doesn't notice + * for all valid masks (e.g. KMB_PWM_LEADIN_MASK) that they are ok. + */ +static __always_inline void keembay_pwm_update_bits(struct keembay_pwm *priv, u32 mask, u32 val, u32 offset) { u32 buff = readl(priv->base + offset); -- 2.28.0