Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp4483701ybh; Tue, 6 Aug 2019 12:29:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqzBvx3rAXWXvw5TqzMksWT4AQwymNPTkfg2Z1rNtrEq8hQwBPfJzUYMVHn3BJaYFtFGJr2+ X-Received: by 2002:a17:90a:17c4:: with SMTP id q62mr4816403pja.104.1565119746954; Tue, 06 Aug 2019 12:29:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565119746; cv=none; d=google.com; s=arc-20160816; b=mxkrQ9Ux+MEKRRSt94A2+tFg205IuLNmTtL1GF+egyzV1X810MsUDEXM9cT+zdYZqQ 2jG51p+sLJQYS4a8bs0YR4wV4tHqnCZN7ljTfL41fkZQiPLlzrrm41JU9SnL7crsEp5J 1Fluhz/CEObubsl2NM2GwILJPQ8LSPfk7CTYMfYXDJfV35Po6gKrils2CpeQEWEpsULQ GAoJsL8SL4a1JRN3/L3AptKRHbjVf/6Mcg+wvRh+EBaB/Av3bt58QRiSgH21ZbjB4kia WDe8LkpsD+eAXdIdOgY6+4t3b3wU6CMfvCYKKUCa8fZrKH0rvIi3U5hODFXfdDP9+C5L cZhg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:date:from:dkim-signature; bh=sqMafdo+3bOjriH2YuFYZmHmRAJQkH4tV/Jdjit5DNQ=; b=c4ZcA8ktAJiFJYNUUap3GJYyLm4gCLfi8Bk6nI6vUFTZKmow7Sz490r2xf/iWHM9Q2 NsMbu1zXKcJM4BoiFlMTPU6bWUVSw2fnzFSX8sdBXYysVdguPZfxCBiMg4qpBvq8RtRA I6aUsjHKpg5Vkk4lAAyIJJFBUFcCauu3hQU9A71AdgyB28EQwf9yGsNzNdR+SnXrZfZY IvrLZkyMsJmuSyRT22CLLR6GAck/9BdSnjqkzYAA9gDVd11NNXBG9TAN2g61Ni4YKPef ZJOWDu2kBgiYy44WqE0+KTfUo1TnXE7mywEhAE8L4sbPaIJEcaHypP0RnOak5v5L4D/2 FYNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=eEamrBsM; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a2si15637980pjs.16.2019.08.06.12.28.51; Tue, 06 Aug 2019 12:29:06 -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=@gmail.com header.s=20161025 header.b=eEamrBsM; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726626AbfHFT1f (ORCPT + 99 others); Tue, 6 Aug 2019 15:27:35 -0400 Received: from mail-lf1-f65.google.com ([209.85.167.65]:42424 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726246AbfHFT1f (ORCPT ); Tue, 6 Aug 2019 15:27:35 -0400 Received: by mail-lf1-f65.google.com with SMTP id s19so62117802lfb.9 for ; Tue, 06 Aug 2019 12:27:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:date:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=sqMafdo+3bOjriH2YuFYZmHmRAJQkH4tV/Jdjit5DNQ=; b=eEamrBsMaUWqafAsSWR1kwJZCoeQVphOKIeYxbCPTy1TKLn4TZQUoYI0vKoPyfrQNb QQEHzY96XAGa7Cw6v8ihKTkXRaNE9xP+1DTfxtjGhy35S3a3s4CGAz0BaSZmEx5Un3Ft MOgUdaeoEBmHEO+jbiMPvb/YHXkqwCe94iAeIeXF2qE0L/pWXKtm2DRRRyDwTG68xV9A 8s6PltWbWqVpHPmhOYLpXGu21x1dqcxHFhkFjOJ09fzZ25iHrWt7Rgu5AFiQh7sSmOJ0 9I94XG1DVCmRyMg18GsrMde7ucpbMcMFecR+RcFtiKVUJTfkXT1tY0OBC/ypTc9ripGZ u3Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:date:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=sqMafdo+3bOjriH2YuFYZmHmRAJQkH4tV/Jdjit5DNQ=; b=UX56pCLuq6h71fghJ2pDTT1La3wANmiq/jcHUp5uGUnvepgOHOq0BJmOvJ2b8ZAkZu b7S6QyR9yfjGbcGOBPDsCz7JiZs+1zgZCL1U7XD6qUB9WUY8OUK9L5NQMGfKzqXBorTY s7ORrmyclxsJaS5tgiXCV7af6AsjWyFi0Ask5atDa0g8FdHAsLQGy7BVjwMV5SeJe7D+ kIer5qCrupraSY4u46Lgeli/uOgpZoEGlYQWeZSPFEmR2+5hHqxLXxrfYFJ7w8UL2zka 8T2wiADkPfEdGYaF7EGXhHOe/JV49nD304/y7WPPe+0ZSSkoKx577hHJKczAo5ZC3BTY Qbpg== X-Gm-Message-State: APjAAAWGBxz4DorLMi0qhP+JoP4u1NSmqUcipdQY/XPQWKdNZok+3bYp fjvZ/uee9PxFt0DHbrspcFY= X-Received: by 2002:ac2:418f:: with SMTP id z15mr3420801lfh.177.1565119652846; Tue, 06 Aug 2019 12:27:32 -0700 (PDT) Received: from rikard (h-158-174-186-115.NA.cust.bahnhof.se. [158.174.186.115]) by smtp.gmail.com with ESMTPSA id h4sm18166627ljj.31.2019.08.06.12.27.31 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 06 Aug 2019 12:27:31 -0700 (PDT) From: Rikard Falkeborn X-Google-Original-From: Rikard Falkeborn Date: Tue, 6 Aug 2019 21:27:27 +0200 To: Masahiro Yamada Cc: Rikard Falkeborn , Joe Perches , Andrew Morton , Johannes Berg , Linux Kernel Mailing List Subject: Re: [PATCH] linux/bits.h: Add compile time sanity check of GENMASK inputs Message-ID: <20190806192727.GA11773@rikard> References: <2b782cf609330f53b6ecc5b75a8a4b49898483eb.camel@perches.com> <20190802181853.GA809@rikard> <20190803183637.GA831@rikard> <20190805195526.GA869@rikard> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.12.1 (2019-06-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Masahiro, On Wed, Aug 07, 2019 at 12:19:36AM +0900, Masahiro Yamada wrote: > 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 Thanks for the feedback, your version looks much cleaner than mine. I *think* I had a reason for using __is_constexpr() instead of __builtin_constant_p but I'll try a full rebuild to see if something comes up. Best Regards, Rikard Falkeborn