From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011004.outbound.protection.outlook.com [40.93.194.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28F8B3B5F5D for ; Tue, 12 May 2026 16:46:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.4 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778604407; cv=fail; b=qGQjl/chkd8ELRHiJ9X++X0tk/EMOBV+MbOkSr/m3s2ZBAUXrIAsqoJleXPX6khyDD4g9x9WgQabLATbviFz1sbHPCbRkFCINiT0UeXBVpM42lMwIPrxNsd0OhbGbbi4GmBczhpwHrOPFKx1DveYrCGJQ7pPkpVhvmsOgiOp69I= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778604407; c=relaxed/simple; bh=qWZ/OqG6Ert1vZ/MIL9OzPQA7NIu1PLLoU1mk5f7iwg=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=goIT7aCXvSgD7oZjAD7TzoHGLqvtxeN1sBmoTTQInoBrLmZ2iNIbDds5xRS8b/G3g4j2Q2xbvTr+IdmFziE7hrDGgvtPFjt6vHJSoHnBNQmAHSkyBNTfU7AhJgZT4zEK+MFgcNYsmDmxeEfrWEA/+gjmzBRB2ikuMoEXJBBDft8= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=fX7Xq8bn; arc=fail smtp.client-ip=40.93.194.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="fX7Xq8bn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S/zN6vkD5aFm4bUylBlQFNHklbEfP4pVzbpMR48SlEEn4P8hD43p9zM19E5K0YsUkbTRB6+1cBFfbk/qyR7tCDSPnYFcpgrs4fbiqFOZFwTdIPuyY/M3guMG7ZB5wHiZhl+jp75I9lh1RA4Uw5L84K6d+crBFaqJcRQjyGNbz7e63NGMiDGBtA+5pDK9nHUvTbFcBcJulPvfxWaqTP/nG1Cg591Jr3eYatyKahI1sIYXM8cQQCt0qlpY1s1Csyh4xM2xjXdtf4BkrStU84uu0rvN8fWP2ad0Z+owwIz1c2LJ8LProbPjAafNLeCvC/13hHDAGi3cux80p2/dH3N3/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8QoXC1LqLrMAuEBKWuG0O4a8dBIuK9FStWGS1biUBtI=; b=cVizGRinZ+V/u2EeMVuVaeOcoBxN49cL4wx8OZabzFbyfS4LnFQfawB+uRuXc0beMk2HmFOG4VHb2j1CgcnmA5778t1I9y5aS5zEVIYyL2RVvGdNbJunTopUqhcHbxOPBwL/nRVmU3VnmMzy8v/etBUPFFtl/FVbTgdVOckmR0B6suzkkRdQ+ntKUfvQK22fKkNqXcjMX1gDeL9caQteoXXWQA0js80hjghW5j9Q00O31xek51UzXGf2amXpwk5JutVVWqBI5XNHo/hnNgmmLO4HVVG5gOJzrfmu2Km4cS8tRq/hP5PoVdHLdpgc88v5oGFNV/x75Xvo+tCQDDKquA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8QoXC1LqLrMAuEBKWuG0O4a8dBIuK9FStWGS1biUBtI=; b=fX7Xq8bnihJMB3kIkYM5Peqy/OC1PhWD008LCRcO2xdvvwNS3DOGOi3bJtVOZUL286UeUXnds/Y822/hXMMnXJ7AzgNNd4YoskEGq3i+YCJ0skKJ+qBf+lY2SrUQexLxzH5aaLqe/5qhPnt6PsDjWJZ1536Jjp+fppGEzcv353U8iHPUxLIxMXFwIRGLOKAhxu0aKVND5gxdauhO46t+NXvFE3EF27h+Gc0SkXZRAcIhm8qCCenXr/sLGVFZmzMWOPrythyXJcPl5mBFKs4KO4RUtvzbR9jL3I7VfbgRkjwzi66o+yqH/c/f2O9EGMpu82KdEZ79Rk8+rsZGh+1HHg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CY8PR12MB8300.namprd12.prod.outlook.com (2603:10b6:930:7d::16) by BL1PR12MB5753.namprd12.prod.outlook.com (2603:10b6:208:390::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.23; Tue, 12 May 2026 16:46:29 +0000 Received: from CY8PR12MB8300.namprd12.prod.outlook.com ([fe80::ce75:8187:3ac3:c5de]) by CY8PR12MB8300.namprd12.prod.outlook.com ([fe80::ce75:8187:3ac3:c5de%3]) with mapi id 15.20.9913.009; Tue, 12 May 2026 16:46:28 +0000 Date: Tue, 12 May 2026 12:46:26 -0400 From: Yury Norov To: Yi Sun Cc: yury.norov@gmail.com, akpm@linux-foundation.org, mina86@mina86.com, akinobu.mita@gmail.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/2] lib: bitmap: add find_last_bit_range() and _find_last_bit_range() Message-ID: References: <20260512040659.2992142-1-yi.sun@unisoc.com> <20260512040659.2992142-2-yi.sun@unisoc.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260512040659.2992142-2-yi.sun@unisoc.com> X-ClientProxiedBy: BN9PR03CA0431.namprd03.prod.outlook.com (2603:10b6:408:113::16) To CY8PR12MB8300.namprd12.prod.outlook.com (2603:10b6:930:7d::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR12MB8300:EE_|BL1PR12MB5753:EE_ X-MS-Office365-Filtering-Correlation-Id: c30c34c9-e3d0-4d33-6cc3-08deb0460368 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|56012099003|18002099003|22082099003|11063799003; X-Microsoft-Antispam-Message-Info: 3bAFH+biqesg4kJt0djhRsqbHd2f17nMLkeZvkHAIKmjoFIBUD047gVE/Zs9hxzxiAfMHomSEDbR+sd7a5Bim4rt/AzMNDEgyavVvTt3MAp1f7Ywbi2y223npoRii5aPv5KXviGqBv1bCrbFQYkhcxhX2Hv+ZPaeaZygQ5ZtlXyMD80Q3zwVUCFpxpvA++BzpAOOE8XgngYKfNRHAGePb6SCz9fU4ew+Hi3i9tkAkatNBMioE224fPzbxVukgQv0XMjhLYiuCmYKEuIzDaqQRvalPL7LJaxsCDYqei06HlBasTR+mrbGqsdIhG7+OziZPJblbvFcOomTl/hCQ8nxHmkGUgovDzB9NrHRBkAGPe5yWHMise98zYei5vXXI26Q025vWYRGaSbF9UZRGuUgDw38X0CH5TA48z/Vt1klcClH2Y42+2vXpODr+teksXvo/M1rvj+lK83BP+Qp7ozivK3qXoUWk37MzU/VfJTB08YePGrAI2VYkIFk9dHOM8c/n3cV6Y9wa2UW3yoOC0UCVxBsnByJTnkCF6UhWpyYcHc5R+afjGr8vAxSfeynJpiaN2gUQ+TXXN0990lA9MZzn6rkXRtNolmik4qIToN4ywBKZJe94fSKq81VLR+Bk7JXsRTJVo3LnBnK/SyDmytcYyzwlXL/4lDc1opGCvwzg1J/BUCakVFqpg90fNBCIlSG X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY8PR12MB8300.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(10070799003)(376014)(56012099003)(18002099003)(22082099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TyyXiY3Za5nGVXRmKpz8jSMWHKYN2RNtsZuzzDdnLU5g1/+BCJQ4cBfO3+mV?= =?us-ascii?Q?0D6x/bvY4T1WXVmkQVJHiNBOkKXfrsuS6iHiCNx6LoH3D+n/ERg7CVZHC2Kx?= =?us-ascii?Q?6hZ9qCLyIPLo6LgpnXyj2P0g6dEnvEC086Fc51I/zfc0g+rV5XTsYlZfHU4e?= =?us-ascii?Q?sm5E7nJapBC45DC5DABnaP0dagkRYATNXFgIdE65/ssoQwbMpscEr9wJfQN5?= =?us-ascii?Q?lP62RlTDw04eH8JXaDIEcHntU6xWOkr1MNJvVnX4LzhISS0hwqUZ5nqhZ/ue?= =?us-ascii?Q?6OC7Yq8BMvTBLh0O5y7j0zAs6MyrCr4tH/Pmq+JTPRdATWjINGz3BdfllktN?= =?us-ascii?Q?Q+VqGhaRkGLNPD//rMTWKAwDgBUrftUx5llRliiU8gsVR/vctT8wE5Y1vUmF?= =?us-ascii?Q?q7XQnUnttVE6gxOz6yqEwup6hUAdaCy7I977Apn+BXjmcJEnO2VsM8lm68FL?= =?us-ascii?Q?eJG7kH16a2IF7shoV4C6fWtklNcoaDM2dbO6E6Pr0oZelGyJdvGb2u5mpp9t?= =?us-ascii?Q?OWCY77aRIWAAqsu+SjGDvS7hhGajMGBd/TzJ3qs6KUvRYlAHPsDISyJY7gkq?= =?us-ascii?Q?ZWgXkdx6vaMIcq7HaAyPU28PJRIUp45XBf6M9KRGBtsXQkgULs74GO28EzIJ?= =?us-ascii?Q?Vxo5al3wOQ7T2abW842Od1fMW3jgdfoWBT35lWsin7ND+BA3Z/TDbyWNPyK1?= =?us-ascii?Q?fz1TOourb3p5OISRZKeXAbi+vlDvn/wFm2eq8VSXxo5grZD330Fs9fzjBNkt?= =?us-ascii?Q?4EwgkSiHz55LxBY08yros6bO/e17qelfUYP/LZGpDx2hNEAPJtKzsfCendWf?= =?us-ascii?Q?vlxTwcNTeic6KH/tafRoWHwXFsgJxHXjIZx+ClYTilpaHC4sbVjcuc9Vuv7g?= =?us-ascii?Q?vlORLMNVxVuPSbq7fx0gm+8IxxL9j0LqXRp4IX0scrUCG91eQyCQ7gr1Jk8n?= =?us-ascii?Q?W2EZSleA5P/1AKW9H1gKnUbbxv8z+uNM4+FEKQC2vkyitSJ7aTqYzR+fFZ0Z?= =?us-ascii?Q?9pDi7rm6iCcC/unQr731VzsyDwjo7vusCOFofWkmjjB7+XWoH8ol2dT9JTXw?= =?us-ascii?Q?VTNpNbb39LKqku6AXLGrQDJoaiKRl+NdVuX3jwSOPd1vmqOYrjVx0tEywF0A?= =?us-ascii?Q?Dvagm8rquU59V8bHC6l/Hnaph/VaDddYoy/1BdzPztLj45poRsuWOwhv83Fy?= =?us-ascii?Q?P5hRhrLjwK+Y6JMZ9rkF6xNHTV2T+uQoPMlJZble2xNjpsVOOLE3Qa59rskM?= =?us-ascii?Q?UI/dFJUZYwdMZF3jl3tgBk24SbOKtKyvbtRMVRzZkwYeW3juSJkjlNIAnVEq?= =?us-ascii?Q?PsJgXVi0p9Tvpc7uxKK6cgFx56TtXojcMVBAdeVC7zf62iAryZb5BrlG7th5?= =?us-ascii?Q?I5Lsfi6NqhrdCWqJp+IkLxAvff8oNWrHw7uGQRN31KZhyI7mdVp38667yIyU?= =?us-ascii?Q?SkXCm3AtGT9wKdDy0BHAIGcmgmtLsyk3gW6thihVGrM+q4wap5H4vIcbzV1O?= =?us-ascii?Q?ijF8HafVUm/KPW5ETWZY8Qt21CliTW5PiOIcsB8hfMFy68IVcW2bqmCvKG40?= =?us-ascii?Q?ML9cy3YXjL+SxE7CMQKgUxomqJkBYwzFmiEGtusv7ZlVc/Otb+PXfMIjaYvG?= =?us-ascii?Q?ap3xBEj+SBZXnPcFgksW3I0u2pQLHABj8gJsOHMTosXl9+IZDZ4Oy/irU+9Y?= =?us-ascii?Q?8Tk4+6vWy63q+qfmjU3YtB1KIR567bxM8f/Uwsmusqcjer3+Qzd4TSWuZf7A?= =?us-ascii?Q?97BceK5F/CD2i5mqAxdbsVFfG04l1i7zo0pD/Mc3oktW6oii7OFS?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c30c34c9-e3d0-4d33-6cc3-08deb0460368 X-MS-Exchange-CrossTenant-AuthSource: CY8PR12MB8300.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2026 16:46:28.7152 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9odiSGBijoGZ0mFU59/EbbGXumsdmzsLJOhdr2hBnbv3hguZGzB5jAiIOz5G5YAgQLJ0boXaoXUFWZTIe5Y0VQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5753 On Tue, May 12, 2026 at 12:06:58PM +0800, Yi Sun wrote: > In some scenarios, it's not desirable to keep searching through the > beginning of the bitmap, but rather to search within a specific part. > The newly added function can accomplish this quickly. > > Signed-off-by: Yi Sun > --- > include/linux/find.h | 35 +++++++++++++++++++++++++++++++++++ > lib/find_bit.c | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 65 insertions(+) > > diff --git a/include/linux/find.h b/include/linux/find.h > index 6c2be8ca615d..7126b0fffe0f 100644 > --- a/include/linux/find.h > +++ b/include/linux/find.h > @@ -33,6 +33,8 @@ unsigned long _find_first_and_and_bit(const unsigned long *addr1, const unsigned > const unsigned long *addr3, unsigned long size); > extern unsigned long _find_first_zero_bit(const unsigned long *addr, unsigned long size); > extern unsigned long _find_last_bit(const unsigned long *addr, unsigned long size); > +extern unsigned long _find_last_bit_range(const unsigned long *addr, unsigned long size, > + unsigned long offset); > > #ifdef __BIG_ENDIAN > unsigned long _find_first_zero_bit_le(const unsigned long *addr, unsigned long size); > @@ -413,6 +415,39 @@ unsigned long find_last_bit(const unsigned long *addr, unsigned long size) > } > #endif > > +#ifndef find_last_bit_range Drop ifdefery. There's no arch implementation, so nothing to protect. > +/** > + * find_last_bit_range - find the last set bit in a memory region find_last_bit_from, please. This is how the existing API named. > + * @addr: The address to base the search on > + * @size: The bitmap size in bits > + * @offset: The bit number to start searching at > + * > + * Compared to the find_last_bit(), > + * find_last_bit_range() has an additional parameter @offset, > + * so it can search within a specific range of the bitmap, > + * just like the find_next_bit(). > + * > + * Returns the bit number of the last set bit, or size. > + */ > +static __always_inline > +unsigned long find_last_bit_range(const unsigned long *addr, unsigned long size, > + unsigned long offset) > +{ > + if (small_const_nbits(size)) { > + unsigned long val; > + > + if (unlikely(offset >= size)) > + return size; > + > + val = *addr & GENMASK(size - 1, offset); > + > + return val ? __fls(val) : size; > + } > + > + return _find_last_bit_range(addr, size, offset); > +} > +#endif > + > /** > * find_next_and_bit_wrap - find the next set bit in both memory regions > * @addr1: The first address to base the search on > diff --git a/lib/find_bit.c b/lib/find_bit.c > index 5ac52dfce730..bedc85053cea 100644 > --- a/lib/find_bit.c > +++ b/lib/find_bit.c > @@ -237,6 +237,36 @@ unsigned long _find_last_bit(const unsigned long *addr, unsigned long size) > EXPORT_SYMBOL(_find_last_bit); > #endif > > +#ifndef find_last_bit_range > +unsigned long _find_last_bit_range(const unsigned long *addr, unsigned long size, > + unsigned long offset) > +{ > + unsigned long val, idx, start_idx; > + > + if (unlikely(offset >= size)) > + return size; > + > + val = BITMAP_LAST_WORD_MASK(size); > + idx = (size - 1) / BITS_PER_LONG; > + start_idx = offset / BITS_PER_LONG; > + > + do { > + val &= addr[idx]; > + > + if (idx == start_idx) > + val &= BITMAP_FIRST_WORD_MASK(offset); > + > + if (val) > + return idx * BITS_PER_LONG + __fls(val); > + > + val = ~0UL; Can you consider handling the last bit out of the loop, so the loop will have less code? > + } while (idx-- > start_idx); > + > + return size; > +} > +EXPORT_SYMBOL(_find_last_bit_range); > +#endif > + > unsigned long find_next_clump8(unsigned long *clump, const unsigned long *addr, > unsigned long size, unsigned long offset) > { > -- > 2.34.1