From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87385C001B0 for ; Mon, 24 Jul 2023 15:21:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E55F98E0001; Mon, 24 Jul 2023 11:21:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E062F6B0074; Mon, 24 Jul 2023 11:21:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CCDCA8E0001; Mon, 24 Jul 2023 11:21:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id BBC6C6B0071 for ; Mon, 24 Jul 2023 11:21:43 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 839021C99F9 for ; Mon, 24 Jul 2023 15:21:43 +0000 (UTC) X-FDA: 81046870086.24.4F06434 Received: from eu-smtp-delivery-151.mimecast.com (eu-smtp-delivery-151.mimecast.com [185.58.85.151]) by imf29.hostedemail.com (Postfix) with ESMTP id 11871120020 for ; Mon, 24 Jul 2023 15:21:40 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=aculab.com; spf=pass (imf29.hostedemail.com: domain of david.laight@aculab.com designates 185.58.85.151 as permitted sender) smtp.mailfrom=david.laight@aculab.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690212101; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=km8KAlNNV6dCaC+HXpn4oC4tWcgOhz0qP0zcg8dM1bQ=; b=i8R7VXhLCyOwI1HghjdoHSMA6dkZPkvIwPFAMqhqFCDTFyrhDJupgrkWxHWUMDRZFuJ+uy OwAfEsCdYumALCgy/u+ggsrU9w5RWNNa1+MCDHyUJC65KwPZdcnYK6OnGPEQmBn8xNslfS B/2DIhIe4eWiq8k6za2CE3H4bcQAmpg= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=aculab.com; spf=pass (imf29.hostedemail.com: domain of david.laight@aculab.com designates 185.58.85.151 as permitted sender) smtp.mailfrom=david.laight@aculab.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690212101; a=rsa-sha256; cv=none; b=F2QUuMVYaE9r4BRuldIGeSOQI9hsvWoLiR8/+Aux3zO0hm2mOgiou2G1M8NsOiOW1RKw+b Zlh9O/Qyqo+yIhsvPYvWxbb6FxGngGa32unY3lYO4qCxwHFFV3MaiWlg5KnejWGtMbYva0 IiVsbTlow+paqyLSMUO+DWqhktLnWOM= Received: from AcuMS.aculab.com (156.67.243.121 [156.67.243.121]) by relay.mimecast.com with ESMTP with both STARTTLS and AUTH (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id uk-mta-102-YddD4a0QMAeEa0RPH5axFw-1; Mon, 24 Jul 2023 16:21:35 +0100 X-MC-Unique: YddD4a0QMAeEa0RPH5axFw-1 Received: from AcuMS.Aculab.com (10.202.163.6) by AcuMS.aculab.com (10.202.163.6) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 24 Jul 2023 16:21:35 +0100 Received: from AcuMS.Aculab.com ([::1]) by AcuMS.aculab.com ([::1]) with mapi id 15.00.1497.048; Mon, 24 Jul 2023 16:21:35 +0100 From: David Laight To: 'Andrew Morton' , "Matthew Wilcox (Oracle)" CC: "linux-arch@vger.kernel.org" , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH v5 01/38] minmax: Add in_range() macro Thread-Topic: [PATCH v5 01/38] minmax: Add in_range() macro Thread-Index: AQHZs4Qv/1fQZPDRnUKleGkrGqhqrK/JG+mA Date: Mon, 24 Jul 2023 15:21:35 +0000 Message-ID: References: <20230710204339.3554919-1-willy@infradead.org> <20230710204339.3554919-2-willy@infradead.org> <20230710161341.c8d6a8b2cbf57013bf6e0140@linux-foundation.org> In-Reply-To: <20230710161341.c8d6a8b2cbf57013bf6e0140@linux-foundation.org> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.202.205.107] MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: aculab.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 11871120020 X-Stat-Signature: q3wfzp5difs8gzt7cpy4psujhrx36968 X-Rspam-User: X-HE-Tag: 1690212100-457125 X-HE-Meta: U2FsdGVkX1/24gYn5ASXmGz640TOVyntv5T4ozL+TinlRgf/5/ZGKmrKszOT4xO+aKLAahgERVpGn6TEhmlfjqzD7SYnRIdR2n2hC3uzCQrvmUf+RhvWfgSTUV1g1beCIqYiKOe+SNfygvSHdN7y8zdFWR2/ZectUnh4RzgK8uMAiBG0zbJWR1THPVv++kAJnRoTBEytnAqHp4XCcj3lWJtmC1mikBkTC6m0c+qwMKRjes/jQkknkcTVL+/P88GY83GP10Ew+kxlSsHrCi0J0bqxpZGIgkyL4Xsll/uhH0C76iXexKwpfK+oZODgk8BoKwUulcxO8w7h4hyp/5mdml7qCNO28EpGnY7Mgb5wITZ7p0uIyMycyVkhZVQq8wbvl6h3QC/hSzsxREC6PGobvdgBfdnJU8WULYChp467MZZc845rSCmzt2Otw1h85MVNF7V9Pkson5Idru7jzQgaI6Zu2QV059K41gxTsU14KLxsGfiaGMzNqVQ/LqM8rXLe4om4pbt/pCcr/5x2JL63CoXh0nldoex++wmwU/IEPtQE3zVC8z0uTThxQwSx+LMj1DIxzsWPIB2hjC/LRca3CliaG70EEb56K1JaoougVdnR2Lcrwg7FnuVRr6hF/KTMXfmAQDDk3eF/cnW14g4zGOF1Jud8r/XSpyxfaIixuNcBvo/gkBELFc1iBbclNJOsd3X2oIZBU6MIAZb2yml88Z4VB1djQCurzRZv9nANdIAvmfkB01bh+IZ+5mI43ck+QTprPtL8TH5+eDO2l/LXSubym7Hcbu3/DNviGaJCEffJxkwJ07v3wu+hr2O+92nbqJvKTjhEHOx5AbEXjMZwcsa1QtzdVyCS9dXkdhqywR0KxOEg74Wo3mwVlWDzaJiWxSbMBQuiCYvULBI5eLpJOymcelqswRMSvQtPO0sdb+joEHVejZLg7uIRBEL/mdqppEgGtiz3sSRVf21EsJX BREzChw7 ASb5b+XXjj0raB4JlpBYl4poCjtQtq5iVg39m9UZvgLhY0mgtReSuxiSQz3qa7Hp7OQl5RCk+kYbDouCEOercB4ZMPG5FSZmKKmW7xYNJCGiO5owuh5CUZErk9LJianSV1leqqdT8DaVXs72OW530NawriRD50+48fBgGquw3yiQCVXbdn3Waj/jbNbhm8VfV3YYzGo604fgauInp3ngCx/AqP2Odv/L8iYUkHYU9Ii1JLkXkJvjyxD3SfiZkFhJuGxaMGT9W+ZSAxB9EBlpj7P3XkeGugztmOdPqGdh91a+LjQZ5c8pGdsONJ1I/BT6xffpP+MEi9V0sYc/EajbJMrhyTj8l+LY1C9O5N2cVkXdTD7/6+acXkcZg+2pvyeGq0hPsl6GVV395JDWZ4+0tbX+AmxMUpj8RCJF/FjzhmjjEBbRpAKdWqpGvA55HdxMhMlr8PzuLNAJ/Nu8= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Andrew Morton > Sent: 11 July 2023 00:14 > To: Matthew Wilcox (Oracle) > Cc: linux-arch@vger.kernel.org; linux-mm@kvack.org; linux-kernel@vger.ker= nel.org > Subject: Re: [PATCH v5 01/38] minmax: Add in_range() macro >=20 > On Mon, 10 Jul 2023 21:43:02 +0100 "Matthew Wilcox (Oracle)" wrote: >=20 > > Determine if a value lies within a range more efficiently (subtraction = + > > comparison vs two comparisons and an AND). It also has useful (under > > some circumstances) behaviour if the range exceeds the maximum value of > > the type. > > > > Signed-off-by: Matthew Wilcox (Oracle) > > --- a/include/linux/minmax.h > > +++ b/include/linux/minmax.h > > @@ -158,6 +158,32 @@ > > */ > > #define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi) > > > > +static inline bool in_range64(u64 val, u64 start, u64 len) > > +{ > > +=09return (val - start) < len; > > +} > > + > > +static inline bool in_range32(u32 val, u32 start, u32 len) > > +{ > > +=09return (val - start) < len; > > +} > > + > > +/** > > + * in_range - Determine if a value lies within a range. > > + * @val: Value to test. > > + * @start: First value in range. > > + * @len: Number of values in range. > > + * > > + * This is more efficient than "if (start <=3D val && val < (start + l= en))". > > + * It also gives a different answer if @start + @len overflows the siz= e of > > + * the type by a sufficient amount to encompass @val. Decide for your= self > > + * which behaviour you want, or prove that start + len never overflow. > > + * Do not blindly replace one form with the other. > > + */ > > +#define in_range(val, start, len)=09=09=09=09=09\ > > +=09sizeof(start) <=3D sizeof(u32) ? in_range32(val, start, len) :=09\ > > +=09=09in_range64(val, start, len) >=20 > There's nothing here to prevent callers from passing a mixture of > 32-bit and 64-bit values, possibly resulting in truncation of `val' or > `len'. >=20 > Obviously caller is being dumb, but I think it's cost-free to check all > three of the arguments for 64-bitness? >=20 > Or do a min()/max()-style check for consistently typed arguments? Just use integer promotions to extend everything to 'unsigned long long'. #define in_range(val, start, len) ((val) + 0ull - (start)) < (len)) If all the values are unsigned 32bit the compiler will discard all the zero extensions. If values might be signed types (with non-negative values) you might want to do explicit ((xxx) + 0u + 0ul + 0ull) to avoid any potentially expensive sign extensions. =09David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1= PT, UK Registration No: 1397386 (Wales)