Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4242280pxj; Wed, 12 May 2021 00:51:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzEogSG3on17ONuRsvbjHyzDn46I+40tpV56dHaIzzOy+9XaSOWrO4VcOnLMhDYImf7P0MQ X-Received: by 2002:a92:d903:: with SMTP id s3mr4226566iln.140.1620805904990; Wed, 12 May 2021 00:51:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620805904; cv=none; d=google.com; s=arc-20160816; b=xvJ3OXuko+G2QoGUe7gCZv9VLqvPoZtN0UUS0gNRqVUUNOsFGzHVgWr8soNNaOpadv mRf5ign9f1Z5A0TVRx7GF+1ryEsg6AsuMR3bPnINrW/TEm65wK6GV/wQZiBfHn8vGBIt VVtz5agHD6tTmbU6mRjRZKDgy2drv7i9u6Gt/k1j+PPTl3/4RoM7Z6fyMOrXSLIqo7C8 hfwFtcwrgRDhS2x7FkfzT3ODXoZSnl12Lm4slZbETfvoU1UbO33GFgaxv8KKFST34WEa PkX1gWoU26fWcT5Zck+WBeHUFvC9eK3Own1KMKpOG9M3elmX78jXRLpLwElxUNJNGYlZ AGNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version; bh=aAI5AvI2kiP6tAlYwctbHwPV1nedJ6F7CqI5zE6w8Js=; b=YiIgOmHu/NwsScab8Ffhit3Li0DnWC8u60Vkr2KR9PKj6cSVLji/lrkD65E1zvN7oQ ErCARDBvqeeqznT15EW/uqJGg2kElkB36tIDsaqGLPASwv5ifGbYG39zxJgkEkrZPqAb 3ueB/xUS5CNAzyW9j+GGTeywKF7/VbonI+qDp0UDgX/uAAAziOb/VSP3hICWSS1AV1dA bfY0zxZkyI2r+RAyOg4XtKHZuR8dH47Y6YD+Gph2oMpqSZMSv4hc5FrCDJTFmxi7uxQ+ uYO1XYwKBpIpHELiJdB9RjX+5l/PwFTuZPV8zo5LHfGgunFJO09B2+wgx+YTE/vFi5Xx ahag== 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 s201si5814423ios.76.2021.05.12.00.51.31; Wed, 12 May 2021 00:51:44 -0700 (PDT) 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 S230111AbhELHvF (ORCPT + 99 others); Wed, 12 May 2021 03:51:05 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:50065 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229994AbhELHvF (ORCPT ); Wed, 12 May 2021 03:51:05 -0400 Received: from mail-oi1-f178.google.com ([209.85.167.178]) by mrelayeu.kundenserver.de (mreue011 [213.165.67.97]) with ESMTPSA (Nemesis) id 1MFKX3-1lihhK34Pp-00Fnda; Wed, 12 May 2021 09:49:55 +0200 Received: by mail-oi1-f178.google.com with SMTP id x15so7731063oic.13; Wed, 12 May 2021 00:49:55 -0700 (PDT) X-Gm-Message-State: AOAM5332yO5fBiTf58nzSnzrGM13tnnVMVvXp+6Vm9GXPnge8Fqoosq0 bwic36wCqdqkwYZXa/BM5jt9yIG2rb9ootp5+kU= X-Received: by 2002:aca:f587:: with SMTP id t129mr25234423oih.84.1620805794260; Wed, 12 May 2021 00:49:54 -0700 (PDT) MIME-Version: 1.0 References: <20210401003153.97325-1-yury.norov@gmail.com> <20210401003153.97325-12-yury.norov@gmail.com> <1ac7bbc2-45d9-26ed-0b33-bf382b8d858b@I-love.SAKURA.ne.jp> <151de51e-9302-1f59-407a-e0d68bbaf11c@i-love.sakura.ne.jp> In-Reply-To: From: Arnd Bergmann Date: Wed, 12 May 2021 09:48:57 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 11/12] tools: sync lib/find_bit implementation To: Rikard Falkeborn Cc: Tetsuo Handa , Andy Shevchenko , Yury Norov , Linux Kernel Mailing List , Andrew Morton , Rasmus Villemoes , linux-m68k , Linux-Arch , Linux-SH , Alexey Klimov , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Content-Type: text/plain; charset="UTF-8" X-Provags-ID: V03:K1:fhzWoOc1Vad7Gk0f0i3YZQTK7+oA8uzLV3sSW2zE6I47Ody7IvG S0rZhdcOmArhLGlKkN1ijeiTQrZ8WMMZFefLsOAMnFJrJeQPFlDraXdgRyMU3S/pxOXZe0g BsfNnWJgJOSMWKh2ZovFD7lypwLsYydBp2uw2L+vSc66ZfZckw/BZ8xsWEtKjxfaPba8u3J l08CRvBFmJL2LQvms5Cwg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:KK/dcYhHyco=:CAyYNaS8gDrjoZWnGW4SWq E8AaGhybFNBdvJxiR+GRumjv3VKz0jhJNfW4HndiWyssPH49ibo1CZcxYtq/anY0PEZeaO/Jp g9My9IpOds7tbz9kPb47eWFiXdgLHh89RUzMUECtIZXLiGNnsa52/LlKDnt3sOcjq9prq6KUL Iw2khn48hpKRmKf54LMEUa3+AQDBiF8L+nWjneAH3TM2CBFnQaJSDLIzmgYAHhanqpSdFXoa7 IqhLX1qpkIScny65UVA05L3HmHmY3t3bxoFFCJWYCX4gOU+10pGWjU0wj5EkSLqd3oi3cpJPw JkR6bF2FPHWBMkjgU55RExNZHI8RvwW/1hjOMOtYUFjKqz5LkjxdCEnQZxXftg0aUUGdKascV sj/twLz9OZtizPljvAz0YiP6DqWDlqZWQGLC51/kFpE7dSYbyEpNXpVUt9jncgxvWURNFFYf9 6ES0kgyxQtuon2CtZQKkA9demAPU7ac1cuCt51tw5JQEEvARHI8/k5F0UP3jcsqsH2HPJmYvk ke5jjaQ5xzWPNZqleeBgGM= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 11, 2021 at 10:39 PM Rikard Falkeborn wrote: > On Tue, May 11, 2021 at 08:53:53PM +0900, Tetsuo Handa wrote: > > #define GENMASK_INPUT_CHECK(h, l) \ > > (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \ > > __builtin_constant_p((l) > (h)), (l) > (h), 0))) > > > > __GENMASK() does not need "h" and "l" being a constant. > > > > Yes, small_const_nbits(size) in find_next_bit() can guarantee that "size" is a > > constant and hence "h" argument in GENMASK_INPUT_CHECK() call is also a constant. > > But nothing can guarantee that "offset" is a constant, and hence nothing can > > guarantee that "l" argument in GENMASK_INPUT_CHECK() call is also a constant. > > > > Then, how can (l) > (h) in __builtin_constant_p((l) > (h)) be evaluated at build time > > if either l or h (i.e. "offset" and "size - 1" in find_next_bit()) lacks a guarantee of > > being a constant? > > > > So the idea is that if (l > h) is constant, __builtin_constant_p should > evaluate that, and if it is not it should use zero instead as input to > __builtin_chose_expr(). This works with non-const inputs in many other > places in the kernel, but apparently in this case with a certain > compiler, it doesn't so I guess we need to work around it. I have a vague memory that __builtin_constant_p() inside of __builtin_choose_expr() always evaluates to false because of the order in which the compiler processes those: If constant-folding only happens after __builtin_choose_expr(), then __builtin_constant_p() has to be false. Arnd