Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp4259397ybh; Tue, 6 Aug 2019 08:45:04 -0700 (PDT) X-Google-Smtp-Source: APXvYqxyMWUb4QiJVjG6Lr7OeYSCHGblMvCt1NwyHh4DA1yBbzC4wIXwp9snRLbxJjbCC+DuiyfV X-Received: by 2002:a17:90a:cb8e:: with SMTP id a14mr3829629pju.124.1565106304331; Tue, 06 Aug 2019 08:45:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565106304; cv=none; d=google.com; s=arc-20160816; b=gZQDqIAoZAJER7jorEIIgzgqO7OJJWmX9AbCOvIGPnaubOgvrNWNRojqTYtfDvhmJp 6dwe0q8LlKveWRYG7oxWFKMZWFT+EjE+5dVNYNZeZNT1q5HHKltZ4yR5axW4JyqOGYeP JvBK2W9LZqH3zpTjrVbyedrQOmoTy7+8dCTJ7s6Os8YUm2WhoEOsaFzO17ztEFRldp7Y 9fREYYd2wDInetIrevQA/lRpfhP71iNKkJbTXrYTizGsn7GV/9Q+CnaXWFNoKaGfRbPM q+xVdJNCUNfDQjDZ5/SQ3ZIMYJNm4uxrEQK7257AGfJ/3US/QJQN7hz1WaAoniIecLmR jWnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature:dkim-filter; bh=i+FEvR/efuw3Idz+I3UfAGgy5H3JLZbboBPNDDtTNz8=; b=ieu+0PQOxErSg0fPNXHv+vy1drez3J+GkLKydAB3UXCLlrH4c0vQyAbxig80QOTIpb LltQT1gujjgTTMSZXlp1SWTjJLOaUUKstXDzbWV41qAzNiOC0HOU2rzBbxk42Z4PbBU2 lv7laCmLOiTVRmG674h9HghYlCPZofD1uPYNxpwp3Kc+E3yPKJUaj+xe3FnyvQMZFdcV 9RTel+oMhAmIE6vUtvri2N/qVnBNysahV1/sFF7y+hiPdmo0YdiDVF9gdgG5ABhqcMGb Fvf6ZR1rztrzwy2Hy3SC8/mB3XxPVpT652/ftPJCdHamAwzNAagOw8FOwfCSCN4s8Oz4 iGhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=VmNYw1Ja; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t63si45651189pfb.5.2019.08.06.08.44.48; Tue, 06 Aug 2019 08:45:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=VmNYw1Ja; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733105AbfHFPUX (ORCPT + 99 others); Tue, 6 Aug 2019 11:20:23 -0400 Received: from conssluserg-03.nifty.com ([210.131.2.82]:57677 "EHLO conssluserg-03.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732024AbfHFPUX (ORCPT ); Tue, 6 Aug 2019 11:20:23 -0400 Received: from mail-vs1-f54.google.com (mail-vs1-f54.google.com [209.85.217.54]) (authenticated) by conssluserg-03.nifty.com with ESMTP id x76FKDh8015073 for ; Wed, 7 Aug 2019 00:20:13 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-03.nifty.com x76FKDh8015073 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1565104814; bh=i+FEvR/efuw3Idz+I3UfAGgy5H3JLZbboBPNDDtTNz8=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=VmNYw1JaZizdi0/b6wyZ7iD4a55YXg5c4iAN6s9qyizPMhYawqp136BXm5hrd9RyG VDOwwlT/SVXU+I4I/WaJo2bBi1EgLeB3ZJI7q3rjmI7v6ZUZ0b6V9lvXh9CoqgjjY2 kGvJlL16JuuXTvDzmb1B8xOG176561vcOSQjQHbfBdV0PhiiEWlUlBJk97V1nv0L55 3p+FpluqY/WvV5+rG8YqxHx/Jhh/LBvRAlKsFqXFMNWhAQAp8FnYSUJptwtWlHFxBI 1OFmbgQ9tCeh1asL5v+EAuDb2W8EzaY76wKp6OQIJlQZLdsdkLjQiKVkKofhMV9KQQ AiwhZnTZPiM/A== X-Nifty-SrcIP: [209.85.217.54] Received: by mail-vs1-f54.google.com with SMTP id 190so58542377vsf.9 for ; Tue, 06 Aug 2019 08:20:13 -0700 (PDT) X-Gm-Message-State: APjAAAXQhIaaMQ1yJIuUUWos+Bg2ybxRtXPkLply+UN/bMTCh+GwTwMe GNzoZ/SMletPGtdDzuq9qKblbJYXxfIMnz0XGzg= X-Received: by 2002:a67:f495:: with SMTP id o21mr2670793vsn.54.1565104812592; Tue, 06 Aug 2019 08:20:12 -0700 (PDT) MIME-Version: 1.0 References: <20190731190309.19909-1-rikard.falkeborn@gmail.com> <47d29791addc075431737aff4b64531a668d4c1b.camel@perches.com> <2b782cf609330f53b6ecc5b75a8a4b49898483eb.camel@perches.com> <20190802181853.GA809@rikard> <20190803183637.GA831@rikard> <20190805195526.GA869@rikard> In-Reply-To: <20190805195526.GA869@rikard> From: Masahiro Yamada Date: Wed, 7 Aug 2019 00:19:36 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] linux/bits.h: Add compile time sanity check of GENMASK inputs To: Rikard Falkeborn Cc: Joe Perches , Andrew Morton , Johannes Berg , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rikard, On Tue, Aug 6, 2019 at 4:55 AM Rikard Falkeborn wrote: > > On Sun, Aug 04, 2019 at 03:45:16PM +0900, Masahiro Yamada wrote: > > On Sun, Aug 4, 2019 at 3:36 AM Rikard Falkeborn > > wrote: > > > > > > On Sat, Aug 03, 2019 at 12:12:46PM +0900, Masahiro Yamada wrote: > > > > On Sat, Aug 3, 2019 at 12:03 PM Masahiro Yamada > > > > wrote: > > > > > > > > > > > > > > BTW, v2 is already inconsistent. > > > > > If you wanted GENMASK_INPUT_CHECK() to return 'unsigned long',, > > > > > you would have to cast (low) > (high) as well: > > > > > > > > > > (unsigned long)((low) > (high)), UL(0)))) > > > > > > > > > > This is totally redundant, and weird. > > > > > > > > I take back this comment. > > > > You added (unsigned long) to the beginning of this macro. > > > > So, the type is consistent, but I believe all casts should be removed. > > > > > > Maybe you're right. BUILD_BUG_ON_ZERO returns size_t regardless of > > > inputs. I was worried that on some platform, size_t would be larger than > > > unsigned long (as far as I could see, the standard does not give any > > > guarantees), and thus all of a sudden GENMASK would be 8 bytes instead > > > of 4, but perhaps that is not a problem? > > > > > > How about adding (int) cast to BUILD_BUG_ON_ZERO() ? > > I'll have a look. I found a more important problem in this patch. You used __is_constexpr(), which is defined in . This header does not include , so this header is not self-contained anymore. The following test code fails to build: #include unsigned long foo(unsigned long in_bits) { return in_bits & GENMASK(5, 3); } However, you cannot include from . See the log of 8bd9cb51daac89337295b6f037b0486911e1b408 This header was split out to not pull in Including pulls in again. In summary, please use __builtin_constant_p() instead of __is_constexpr(). You can shorten __builtin_constant_p(high) && __builtin_constant_p(low) into __builtin_constant_p((low) > (high)). How about this? #define GENMASK_INPUT_CHECK(high, low) \ BUILD_BUG_ON_ZERO(__builtin_choose_expr( \ __builtin_constant_p((low) > (high)), (low) > (high), 0)) -- Best Regards Masahiro Yamada