From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 715DCC5AD4C for ; Sat, 18 Nov 2023 15:51:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229881AbjKRPvU (ORCPT ); Sat, 18 Nov 2023 10:51:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230056AbjKRPvQ (ORCPT ); Sat, 18 Nov 2023 10:51:16 -0500 Received: from mail-yw1-x1135.google.com (mail-yw1-x1135.google.com [IPv6:2607:f8b0:4864:20::1135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B479D5D; Sat, 18 Nov 2023 07:51:11 -0800 (PST) Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-5a7b3d33663so33593727b3.3; Sat, 18 Nov 2023 07:51:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322670; x=1700927470; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FtFgcsJzlik9FHkciB+wVhA9q1gRoy67qNZRN3dQ8lw=; b=UZjC7tBNqvQ3LIO2JEbZpu4Q0crbsl24RDzQZGegNn0OPUZtZkCs/29OiPNhN9M6hV LGQfkl6+A4mr1ghE7QlKE5WVMvjzh97Noc6mKXMXAtrCrDeH6mN8x1jMHu+o2H8nuIOU fP7UySeohS+rHUNG1bsyWAblwvz4bsNDaC1OXXy9FuUbcxUUA6Ux7wJZWe9MAV4/jedp xZCqNXd1CqM3KVqezWw7KzonotD6xlPCv49WV9PmhnPNew3jHAaJxyGyXSjqFMUF2Ens /EwmD11tsZ4einav7TJeHBAfpDkqAct0wMmE2O8TT/eSczS7RddMqXulsP/Y25Bxw7/N MgAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322670; x=1700927470; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FtFgcsJzlik9FHkciB+wVhA9q1gRoy67qNZRN3dQ8lw=; b=AYNyWKbpsOhVqyVRgfSGLZYBkgi4+qonyBdzpiqA6V+xDCQAAcpuvE4idFytExulVA dAcFCkKwu1k+3ekNbdAMhfjq/3PVJj8XXOLc11wHTLH4iRJFv4I+WzHGgWo4m9nZ3cah pHM3Q5mh59Mt2ttza1dyvw4V/eNzXs8h/MsIVbsvRrad0aUg71vehFBWgzmDzF7rKbc+ uqBr6f02n0jKguWhofpONka0WbDNJ22aPceP8LK9hkfkx3QIO77Xk78fGjKj39SqOjyY vRMUQhWQUXG7aUZrTbmuoX/nypF0QGVf9UYj/LFirtMTIPhaBNQh6QCxylFlcYvJ/a6J CReQ== X-Gm-Message-State: AOJu0Yysly0aPPgP+HrBgWiIDtZ6UuxLtRUlY5It1T8pzJQGL/yWfVFo XsgfyxzHEA3WHK9NIwZhDeZi63ihhZcdE+4D X-Google-Smtp-Source: AGHT+IHUmWgte7gPRldUGsddVvZ0jBBaJ21NuiOWnYAoUu1ELu9emBQdDvxqbio5n2yoz/YHpW+BMw== X-Received: by 2002:a0d:cbd7:0:b0:5a7:ba17:15ac with SMTP id n206-20020a0dcbd7000000b005a7ba1715acmr3133986ywd.41.1700322669620; Sat, 18 Nov 2023 07:51:09 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id p127-20020a0dcd85000000b005a7bbd713ddsm1151825ywd.108.2023.11.18.07.51.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:08 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, "David S. Miller" , "H. Peter Anvin" , "James E.J. Bottomley" , "K. Y. Srinivasan" , "Md. Haris Iqbal" , Akinobu Mita , Andrew Morton , Bjorn Andersson , Borislav Petkov , Chaitanya Kulkarni , Christian Brauner , Damien Le Moal , Dave Hansen , David Disseldorp , Edward Cree , Eric Dumazet , Fenghua Yu , Geert Uytterhoeven , Greg Kroah-Hartman , Gregory Greenman , Hans Verkuil , Hans de Goede , Hugh Dickins , Ingo Molnar , Jakub Kicinski , Jaroslav Kysela , Jason Gunthorpe , Jens Axboe , Jiri Pirko , Jiri Slaby , Kalle Valo , Karsten Graul , Karsten Keil , Kees Cook , Leon Romanovsky , Mark Rutland , Martin Habets , Mauro Carvalho Chehab , Michael Ellerman , Michal Simek , Nicholas Piggin , Oliver Neukum , Paolo Abeni , Paolo Bonzini , Peter Zijlstra , Ping-Ke Shih , Rich Felker , Rob Herring , Robin Murphy , Sathya Prakash Veerichetty , Sean Christopherson , Shuai Xue , Stanislaw Gruszka , Steven Rostedt , Thomas Bogendoerfer , Thomas Gleixner , Valentin Schneider , Vitaly Kuznetsov , Wenjia Zhang , Will Deacon , Yoshinori Sato , GR-QLogic-Storage-Upstream@marvell.com, alsa-devel@alsa-project.org, ath10k@lists.infradead.org, dmaengine@vger.kernel.org, iommu@lists.linux.dev, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-block@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-media@vger.kernel.org, linux-mips@vger.kernel.org, linux-net-drivers@amd.com, linux-pci@vger.kernel.org, linux-rdma@vger.kernel.org, linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org, linux-serial@vger.kernel.org, linux-sh@vger.kernel.org, linux-sound@vger.kernel.org, linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, mpi3mr-linuxdrv.pdl@broadcom.com, netdev@vger.kernel.org, sparclinux@vger.kernel.org, x86@kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 01/34] lib/find: add atomic find_bit() primitives Date: Sat, 18 Nov 2023 07:50:32 -0800 Message-Id: <20231118155105.25678-2-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add helpers around test_and_{set,clear}_bit() that allow to search for clear or set bits and flip them atomically. The target patterns may look like this: for (idx =3D 0; idx < nbits; idx++) if (test_and_clear_bit(idx, bitmap)) do_something(idx); Or like this: do { bit =3D find_first_bit(bitmap, nbits); if (bit >=3D nbits) return nbits; } while (!test_and_clear_bit(bit, bitmap)); return bit; In both cases, the opencoded loop may be converted to a single function or iterator call. Correspondingly: for_each_test_and_clear_bit(idx, bitmap, nbits) do_something(idx); Or: return find_and_clear_bit(bitmap, nbits); Obviously, the less routine code people have write themself, the less probability to make a mistake. Those are not only handy helpers but also resolve a non-trivial issue of using non-atomic find_bit() together with atomic test_and_{set,clear)_bit(). The trick is that find_bit() implies that the bitmap is a regular non-volatile piece of memory, and compiler is allowed to use such optimization techniques like re-fetching memory instead of caching it. For example, find_first_bit() is implemented like this: for (idx =3D 0; idx * BITS_PER_LONG < sz; idx++) { val =3D addr[idx]; if (val) { sz =3D min(idx * BITS_PER_LONG + __ffs(val), sz); break; } } On register-memory architectures, like x86, compiler may decide to access memory twice - first time to compare against 0, and second time to fetch its value to pass it to __ffs(). When running find_first_bit() on volatile memory, the memory may get changed in-between, and for instance, it may lead to passing 0 to __ffs(), which is undefined. This is a potentially dangerous call. find_and_clear_bit() as a wrapper around test_and_clear_bit() naturally treats underlying bitmap as a volatile memory and prevents compiler from such optimizations. Now that KCSAN is catching exactly this type of situations and warns on undercover memory modifications. We can use it to reveal improper usage of find_bit(), and convert it to atomic find_and_*_bit() as appropriate. The 1st patch of the series adds the following atomic primitives: find_and_set_bit(addr, nbits); find_and_set_next_bit(addr, nbits, start); ... Here find_and_{set,clear} part refers to the corresponding test_and_{set,clear}_bit function, and suffixes like _wrap or _lock derive semantics from corresponding find() or test() functions. For brevity, the naming omits the fact that we search for zero bit in find_and_set, and correspondingly, search for set bit in find_and_clear functions. The patch also adds iterators with atomic semantics, like for_each_test_and_set_bit(). Here, the naming rule is to simply prefix corresponding atomic operation with 'for_each'. All users of find_bit() API, where heavy concurrency is expected, are encouraged to switch to atomic find_and_bit() as appropriate. Signed-off-by: Yury Norov --- include/linux/find.h | 289 +++++++++++++++++++++++++++++++++++++++++++ lib/find_bit.c | 85 +++++++++++++ 2 files changed, 374 insertions(+) diff --git a/include/linux/find.h b/include/linux/find.h index 5e4f39ef2e72..e8567f336f42 100644 --- a/include/linux/find.h +++ b/include/linux/find.h @@ -32,6 +32,16 @@ extern unsigned long _find_first_and_bit(const unsigned = long *addr1, extern unsigned long _find_first_zero_bit(const unsigned long *addr, unsig= ned long size); extern unsigned long _find_last_bit(const unsigned long *addr, unsigned lo= ng size); =20 +unsigned long _find_and_set_bit(volatile unsigned long *addr, unsigned lon= g nbits); +unsigned long _find_and_set_next_bit(volatile unsigned long *addr, unsigne= d long nbits, + unsigned long start); +unsigned long _find_and_set_bit_lock(volatile unsigned long *addr, unsigne= d long nbits); +unsigned long _find_and_set_next_bit_lock(volatile unsigned long *addr, un= signed long nbits, + unsigned long start); +unsigned long _find_and_clear_bit(volatile unsigned long *addr, unsigned l= ong nbits); +unsigned long _find_and_clear_next_bit(volatile unsigned long *addr, unsig= ned long nbits, + unsigned long start); + #ifdef __BIG_ENDIAN unsigned long _find_first_zero_bit_le(const unsigned long *addr, unsigned = long size); unsigned long _find_next_zero_bit_le(const unsigned long *addr, unsigned @@ -460,6 +470,267 @@ unsigned long __for_each_wrap(const unsigned long *bi= tmap, unsigned long size, return bit < start ? bit : size; } =20 +/** + * find_and_set_bit - Find a zero bit and set it atomically + * @addr: The address to base the search on + * @nbits: The bitmap size in bits + * + * This function is designed to operate in concurrent access environment. + * + * Because of concurrency and volatile nature of underlying bitmap, it's n= ot + * guaranteed that the bit found is the 1st bit in the bitmap. It's also n= ot + * guaranteed that if @nbits is returned, the bitmap is empty. + * + * The function does guarantee that if returned value is in range [0 .. @n= bits), + * the acquired bit belongs to the caller exclusively. + * + * Returns: found and set bit, or @nbits if no bits found + */ +static inline +unsigned long find_and_set_bit(volatile unsigned long *addr, unsigned long= nbits) +{ + if (small_const_nbits(nbits)) { + unsigned long val, ret; + + do { + val =3D *addr | ~GENMASK(nbits - 1, 0); + if (val =3D=3D ~0UL) + return nbits; + ret =3D ffz(val); + } while (test_and_set_bit(ret, addr)); + + return ret; + } + + return _find_and_set_bit(addr, nbits); +} + + +/** + * find_and_set_next_bit - Find a zero bit and set it, starting from @offs= et + * @addr: The address to base the search on + * @nbits: The bitmap nbits in bits + * @offset: The bitnumber to start searching at + * + * This function is designed to operate in concurrent access environment. + * + * Because of concurrency and volatile nature of underlying bitmap, it's n= ot + * guaranteed that the bit found is the 1st bit in the bitmap, starting fr= om @offset. + * It's also not guaranteed that if @nbits is returned, the bitmap is empt= y. + * + * The function does guarantee that if returned value is in range [@offset= .. @nbits), + * the acquired bit belongs to the caller exclusively. + * + * Returns: found and set bit, or @nbits if no bits found + */ +static inline +unsigned long find_and_set_next_bit(volatile unsigned long *addr, + unsigned long nbits, unsigned long offset) +{ + if (small_const_nbits(nbits)) { + unsigned long val, ret; + + do { + val =3D *addr | ~GENMASK(nbits - 1, offset); + if (val =3D=3D ~0UL) + return nbits; + ret =3D ffz(val); + } while (test_and_set_bit(ret, addr)); + + return ret; + } + + return _find_and_set_next_bit(addr, nbits, offset); +} + +/** + * find_and_set_bit_wrap - find and set bit starting at @offset, wrapping = around zero + * @addr: The first address to base the search on + * @nbits: The bitmap size in bits + * @offset: The bitnumber to start searching at + * + * Returns: the bit number for the next clear bit, or first clear bit up t= o @offset, + * while atomically setting it. If no bits are found, returns @nbits. + */ +static inline +unsigned long find_and_set_bit_wrap(volatile unsigned long *addr, + unsigned long nbits, unsigned long offset) +{ + unsigned long bit =3D find_and_set_next_bit(addr, nbits, offset); + + if (bit < nbits || offset =3D=3D 0) + return bit; + + bit =3D find_and_set_bit(addr, offset); + return bit < offset ? bit : nbits; +} + +/** + * find_and_set_bit_lock - find a zero bit, then set it atomically with lo= ck + * @addr: The address to base the search on + * @nbits: The bitmap nbits in bits + * + * This function is designed to operate in concurrent access environment. + * + * Because of concurrency and volatile nature of underlying bitmap, it's n= ot + * guaranteed that the bit found is the 1st bit in the bitmap. It's also n= ot + * guaranteed that if @nbits is returned, the bitmap is empty. + * + * The function does guarantee that if returned value is in range [0 .. @n= bits), + * the acquired bit belongs to the caller exclusively. + * + * Returns: found and set bit, or @nbits if no bits found + */ +static inline +unsigned long find_and_set_bit_lock(volatile unsigned long *addr, unsigned= long nbits) +{ + if (small_const_nbits(nbits)) { + unsigned long val, ret; + + do { + val =3D *addr | ~GENMASK(nbits - 1, 0); + if (val =3D=3D ~0UL) + return nbits; + ret =3D ffz(val); + } while (test_and_set_bit_lock(ret, addr)); + + return ret; + } + + return _find_and_set_bit_lock(addr, nbits); +} + +/** + * find_and_set_next_bit_lock - find a zero bit and set it atomically with= lock + * @addr: The address to base the search on + * @nbits: The bitmap size in bits + * @offset: The bitnumber to start searching at + * + * This function is designed to operate in concurrent access environment. + * + * Because of concurrency and volatile nature of underlying bitmap, it's n= ot + * guaranteed that the bit found is the 1st bit in the range. It's also not + * guaranteed that if @nbits is returned, the bitmap is empty. + * + * The function does guarantee that if returned value is in range [@offset= .. @nbits), + * the acquired bit belongs to the caller exclusively. + * + * Returns: found and set bit, or @nbits if no bits found + */ +static inline +unsigned long find_and_set_next_bit_lock(volatile unsigned long *addr, + unsigned long nbits, unsigned long offset) +{ + if (small_const_nbits(nbits)) { + unsigned long val, ret; + + do { + val =3D *addr | ~GENMASK(nbits - 1, offset); + if (val =3D=3D ~0UL) + return nbits; + ret =3D ffz(val); + } while (test_and_set_bit_lock(ret, addr)); + + return ret; + } + + return _find_and_set_next_bit_lock(addr, nbits, offset); +} + +/** + * find_and_set_bit_wrap_lock - find zero bit starting at @ofset and set it + * with lock, and wrap around zero if nothing found + * @addr: The first address to base the search on + * @nbits: The bitmap size in bits + * @offset: The bitnumber to start searching at + * + * Returns: the bit number for the next set bit, or first set bit up to @o= ffset + * If no bits are set, returns @nbits. + */ +static inline +unsigned long find_and_set_bit_wrap_lock(volatile unsigned long *addr, + unsigned long nbits, unsigned long offset) +{ + unsigned long bit =3D find_and_set_next_bit_lock(addr, nbits, offset); + + if (bit < nbits || offset =3D=3D 0) + return bit; + + bit =3D find_and_set_bit_lock(addr, offset); + return bit < offset ? bit : nbits; +} + +/** + * find_and_clear_bit - Find a set bit and clear it atomically + * @addr: The address to base the search on + * @nbits: The bitmap nbits in bits + * + * This function is designed to operate in concurrent access environment. + * + * Because of concurrency and volatile nature of underlying bitmap, it's n= ot + * guaranteed that the found bit is the 1st bit in the bitmap. It's also n= ot + * guaranteed that if @nbits is returned, the bitmap is empty. + * + * The function does guarantee that if returned value is in range [0 .. @n= bits), + * the acquired bit belongs to the caller exclusively. + * + * Returns: found and cleared bit, or @nbits if no bits found + */ +static inline unsigned long find_and_clear_bit(volatile unsigned long *add= r, unsigned long nbits) +{ + if (small_const_nbits(nbits)) { + unsigned long val, ret; + + do { + val =3D *addr & GENMASK(nbits - 1, 0); + if (val =3D=3D 0) + return nbits; + ret =3D __ffs(val); + } while (!test_and_clear_bit(ret, addr)); + + return ret; + } + + return _find_and_clear_bit(addr, nbits); +} + +/** + * find_and_clear_next_bit - Find a set bit next after @offset, and clear = it atomically + * @addr: The address to base the search on + * @nbits: The bitmap nbits in bits + * @offset: bit offset at which to start searching + * + * This function is designed to operate in concurrent access environment. + * + * Because of concurrency and volatile nature of underlying bitmap, it's n= ot + * guaranteed that the bit found is the 1st bit in the range It's also not + * guaranteed that if @nbits is returned, there's no set bits after @offse= t. + * + * The function does guarantee that if returned value is in range [@offset= .. @nbits), + * the acquired bit belongs to the caller exclusively. + * + * Returns: found and cleared bit, or @nbits if no bits found + */ +static inline +unsigned long find_and_clear_next_bit(volatile unsigned long *addr, + unsigned long nbits, unsigned long offset) +{ + if (small_const_nbits(nbits)) { + unsigned long val, ret; + + do { + val =3D *addr & GENMASK(nbits - 1, offset); + if (val =3D=3D 0) + return nbits; + ret =3D __ffs(val); + } while (!test_and_clear_bit(ret, addr)); + + return ret; + } + + return _find_and_clear_next_bit(addr, nbits, offset); +} + /** * find_next_clump8 - find next 8-bit clump with set bits in a memory regi= on * @clump: location to store copy of found clump @@ -577,6 +848,24 @@ unsigned long find_next_bit_le(const void *addr, unsig= ned #define for_each_set_bit_from(bit, addr, size) \ for (; (bit) =3D find_next_bit((addr), (size), (bit)), (bit) < (size); (b= it)++) =20 +/* same as for_each_set_bit() but atomically clears each found bit */ +#define for_each_test_and_clear_bit(bit, addr, size) \ + for ((bit) =3D 0; \ + (bit) =3D find_and_clear_next_bit((addr), (size), (bit)), (bit) < (s= ize); \ + (bit)++) + +/* same as for_each_clear_bit() but atomically sets each found bit */ +#define for_each_test_and_set_bit(bit, addr, size) \ + for ((bit) =3D 0; \ + (bit) =3D find_and_clear_next_bit((addr), (size), (bit)), (bit) < (s= ize); \ + (bit)++) + +/* same as for_each_clear_bit_from() but atomically clears each found bit = */ +#define for_each_test_and_set_bit_from(bit, addr, size) \ + for (; \ + (bit) =3D find_and_set_next_bit((addr), (size), (bit)), (bit) < (siz= e); \ + (bit)++) + #define for_each_clear_bit(bit, addr, size) \ for ((bit) =3D 0; \ (bit) =3D find_next_zero_bit((addr), (size), (bit)), (bit) < (size);= \ diff --git a/lib/find_bit.c b/lib/find_bit.c index 32f99e9a670e..c9b6b9f96610 100644 --- a/lib/find_bit.c +++ b/lib/find_bit.c @@ -116,6 +116,91 @@ unsigned long _find_first_and_bit(const unsigned long = *addr1, EXPORT_SYMBOL(_find_first_and_bit); #endif =20 +unsigned long _find_and_set_bit(volatile unsigned long *addr, unsigned lon= g nbits) +{ + unsigned long bit; + + do { + bit =3D FIND_FIRST_BIT(~addr[idx], /* nop */, nbits); + if (bit >=3D nbits) + return nbits; + } while (test_and_set_bit(bit, addr)); + + return bit; +} +EXPORT_SYMBOL(_find_and_set_bit); + +unsigned long _find_and_set_next_bit(volatile unsigned long *addr, + unsigned long nbits, unsigned long start) +{ + unsigned long bit; + + do { + bit =3D FIND_NEXT_BIT(~addr[idx], /* nop */, nbits, start); + if (bit >=3D nbits) + return nbits; + } while (test_and_set_bit(bit, addr)); + + return bit; +} +EXPORT_SYMBOL(_find_and_set_next_bit); + +unsigned long _find_and_set_bit_lock(volatile unsigned long *addr, unsigne= d long nbits) +{ + unsigned long bit; + + do { + bit =3D FIND_FIRST_BIT(~addr[idx], /* nop */, nbits); + if (bit >=3D nbits) + return nbits; + } while (test_and_set_bit_lock(bit, addr)); + + return bit; +} +EXPORT_SYMBOL(_find_and_set_bit_lock); + +unsigned long _find_and_set_next_bit_lock(volatile unsigned long *addr, + unsigned long nbits, unsigned long start) +{ + unsigned long bit; + + do { + bit =3D FIND_NEXT_BIT(~addr[idx], /* nop */, nbits, start); + if (bit >=3D nbits) + return nbits; + } while (test_and_set_bit_lock(bit, addr)); + + return bit; +} +EXPORT_SYMBOL(_find_and_set_next_bit_lock); + +unsigned long _find_and_clear_bit(volatile unsigned long *addr, unsigned l= ong nbits) +{ + unsigned long bit; + + do { + bit =3D FIND_FIRST_BIT(addr[idx], /* nop */, nbits); + if (bit >=3D nbits) + return nbits; + } while (!test_and_clear_bit(bit, addr)); + + return bit; +} +EXPORT_SYMBOL(_find_and_clear_bit); + +unsigned long _find_and_clear_next_bit(volatile unsigned long *addr, + unsigned long nbits, unsigned long start) +{ + do { + start =3D FIND_NEXT_BIT(addr[idx], /* nop */, nbits, start); + if (start >=3D nbits) + return nbits; + } while (!test_and_clear_bit(start, addr)); + + return start; +} +EXPORT_SYMBOL(_find_and_clear_next_bit); + #ifndef find_first_zero_bit /* * Find the first cleared bit in a memory region. --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44ADEC61D93 for ; Sat, 18 Nov 2023 15:51:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230212AbjKRPvX (ORCPT ); Sat, 18 Nov 2023 10:51:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37212 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230092AbjKRPvR (ORCPT ); Sat, 18 Nov 2023 10:51:17 -0500 Received: from mail-yw1-x1136.google.com (mail-yw1-x1136.google.com [IPv6:2607:f8b0:4864:20::1136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15B5C1A1; Sat, 18 Nov 2023 07:51:14 -0800 (PST) Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-5c99226c1e6so1048087b3.1; Sat, 18 Nov 2023 07:51:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322672; x=1700927472; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wja3OVPJTOloxhD0fIIOnOKhGR1o2s7RteZ+eX82u+o=; b=LezXZ6w9oRAfsFpEnEKgrHaoIbxiWXXQoO30aBaUNEVY0CLBzI+FewEhmYuXPZgFKO Jlbvc5gUCIIwxhD9C0Bxp70TB5JCyXzNNQCD/G0DpriBVPAjnGN0KHTnVGH0iQun5keL jyuXirnQpGF06pyHvQQLpuvEX+IvtzLyWur7RQ4ym3KhFoLs6n0B/liW7BzI1uCAIQbT Kd9BuNbqP972eUXr4T39BiQssIVmO6b50pP2kH9YNiLulUmAydIfSGoPl+NXoVX7b801 5aPMBuiMvu1zn17OSGlXCEsrbk0gw/lrzL9XTa4UnyrK7dy2+3SEOhtcYRyZrZCbU3Ar TiMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322672; x=1700927472; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wja3OVPJTOloxhD0fIIOnOKhGR1o2s7RteZ+eX82u+o=; b=fPg9Wk8B7a9XsZV2klt/QL9asY6omZUYzjsXUcoHmLgRPPOtBv0W+d5zj18BdlvGiw 8qbU9JiywXNbxyr0izJ9gdoIBFYqEJvDQJcVUMvtuvHQ/EnTa4VOzWh3/C/Qo/K3D6Ka R3ulKPKJ74X2LSWaDfCsNOzqJU3Jturs0oea+1kSbUM8+UChXGyhwltJrf7/s77E1hZF of9hymMHOK8094oHdnWUaLwo/k8nUeePiWL1ACTMIe8BdTfcGJ+njCyPcoadVdkpf63r lq/B6D5OzEKV1l0z+3S/S0dT7BoJHrEkoshoPkd7Uzm0UD1T7e5ie4sUVSHz9k6D8wjL XF8Q== X-Gm-Message-State: AOJu0YyXNKgAz1Fmg6sH1SglDhhnOHZ61P8qy8Zm6BuFu1RCZVkU9zMK +us+yntGlycaWft6zUeswbeHVhS+wQgazg3e X-Google-Smtp-Source: AGHT+IEFudjl0N99Cl4PwLQEleOne3mxPbcgnDGVV5racEbAxc64DY18CSZOjNB06KLe6F00y6ofIA== X-Received: by 2002:a81:528d:0:b0:5b0:36f5:81d2 with SMTP id g135-20020a81528d000000b005b036f581d2mr1329059ywb.26.1700322671999; Sat, 18 Nov 2023 07:51:11 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id s189-20020a0de9c6000000b005c5c3bae1dfsm1178248ywe.54.2023.11.18.07.51.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:10 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Jens Axboe , linux-block@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 02/34] lib/sbitmap; make __sbitmap_get_word() using find_and_set_bit() Date: Sat, 18 Nov 2023 07:50:33 -0800 Message-Id: <20231118155105.25678-3-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" __sbitmap_get_word() opencodes either find_and_set_bit_wrap(), or find_and_set_next_bit() depending on hint and wrap parameters. Switch it to use the atomic find_bit() API. While here, simplify sbitmap_find_bit_in_word(), which calls it. Signed-off-by: Yury Norov --- lib/sbitmap.c | 46 ++++++++-------------------------------------- 1 file changed, 8 insertions(+), 38 deletions(-) diff --git a/lib/sbitmap.c b/lib/sbitmap.c index d0a5081dfd12..b21aebd07fd6 100644 --- a/lib/sbitmap.c +++ b/lib/sbitmap.c @@ -133,38 +133,11 @@ void sbitmap_resize(struct sbitmap *sb, unsigned int = depth) } EXPORT_SYMBOL_GPL(sbitmap_resize); =20 -static int __sbitmap_get_word(unsigned long *word, unsigned long depth, +static inline int __sbitmap_get_word(unsigned long *word, unsigned long de= pth, unsigned int hint, bool wrap) { - int nr; - - /* don't wrap if starting from 0 */ - wrap =3D wrap && hint; - - while (1) { - nr =3D find_next_zero_bit(word, depth, hint); - if (unlikely(nr >=3D depth)) { - /* - * We started with an offset, and we didn't reset the - * offset to 0 in a failure case, so start from 0 to - * exhaust the map. - */ - if (hint && wrap) { - hint =3D 0; - continue; - } - return -1; - } - - if (!test_and_set_bit_lock(nr, word)) - break; - - hint =3D nr + 1; - if (hint >=3D depth - 1) - hint =3D 0; - } - - return nr; + return wrap ? find_and_set_bit_wrap_lock(word, depth, hint) : + find_and_set_next_bit_lock(word, depth, hint); } =20 static int sbitmap_find_bit_in_word(struct sbitmap_word *map, @@ -175,15 +148,12 @@ static int sbitmap_find_bit_in_word(struct sbitmap_wo= rd *map, int nr; =20 do { - nr =3D __sbitmap_get_word(&map->word, depth, - alloc_hint, wrap); - if (nr !=3D -1) - break; - if (!sbitmap_deferred_clear(map)) - break; - } while (1); + nr =3D __sbitmap_get_word(&map->word, depth, alloc_hint, wrap); + if (nr < depth) + return nr; + } while (sbitmap_deferred_clear(map)); =20 - return nr; + return -1; } =20 static int sbitmap_find_bit(struct sbitmap *sb, --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8EFBC2BB3F for ; Sat, 18 Nov 2023 15:51:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230237AbjKRPv2 (ORCPT ); Sat, 18 Nov 2023 10:51:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230163AbjKRPvT (ORCPT ); Sat, 18 Nov 2023 10:51:19 -0500 Received: from mail-yw1-x1136.google.com (mail-yw1-x1136.google.com [IPv6:2607:f8b0:4864:20::1136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8125BD4F for ; Sat, 18 Nov 2023 07:51:15 -0800 (PST) Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-5b499b18b28so32746667b3.0 for ; Sat, 18 Nov 2023 07:51:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322674; x=1700927474; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HtNrEcrTZb5UAh7OysIMcPcS6uJH+lnrl/PJXmZoqog=; b=B9B1gHATqxOBJm5GMiuRjNdbleYah1hTnn3RXmaUPbClGNSYiFYnqMDnKqX2SEUnGM fG/ex97/I4glD9U/I4HpSEskzafoxp1I/mtxPyi6ZDc/k6Bx8pUnGOJ1u4ZiqwF4tpHZ FQJ/wRZ9/0M6MQGff3O5PwctwvohIpT5Erf6A2Sfvp9pgrYjeR1effvHGzpMjU23bdt2 JRDKOVhm9wdR754GLNGleg64faL0lJn1klKh4x+AeLGu5yD5K3LDHQDr88Hehv6b53lW FTjWgXwbfXOHB+ero3KhS7aDJaQhj8DcAcS36y4LYVAEvrZORdHfpmhBh9FuvSETdRdP dTPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322674; x=1700927474; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HtNrEcrTZb5UAh7OysIMcPcS6uJH+lnrl/PJXmZoqog=; b=mEAhLhD5KKGBZkCECj0W15wGu5DkF5GOyCFcpMhfSv7ck7r+/tvdA+ct/VPdls5BIc Vt6jx1bkEmL/qGB4Oj1Fk7Eoy6eMk4+bMysMwkM78tpRyFyvi5iA4zKeQANW+RE8U1Vp Zhn7sMgG38sluPRvw33X1bDSr3Ha+w6b2d2Vge/fS+NgTRgqtooHR2lzNIMSY6g+l9Zp qeEKz8WcEU0/EGJAmdSLd/fVmv/N3m7OUQmc5CtRLUQuxet5CaH64Te3aZsobBommLCk GLo5jKDZQMhBlwi1XDHtIeZbrrRUpP/CDkXAMCC/92wRO7jblPbjm4C1zWKE/AVrMBpp Nc4w== X-Gm-Message-State: AOJu0YxBLuVGq3+0BUG+WesuY7ssS95G3WpVDC3//ODM5x/J4XDhZpxN t0wsLiCx8rpR7HqCBMh00QQ8a+23FyR5zyL0 X-Google-Smtp-Source: AGHT+IGHmtShLawg4b6FAef5MPRhw9Ntmlqy+tZf2/vVvKTJQT2ZBfSV6qgfvbZAC4YpRmYfk4CQbw== X-Received: by 2002:a81:470a:0:b0:5a8:e6f4:4b6c with SMTP id u10-20020a81470a000000b005a8e6f44b6cmr2719557ywa.25.1700322673713; Sat, 18 Nov 2023 07:51:13 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id q126-20020a815c84000000b005a7c829dda2sm1170194ywb.84.2023.11.18.07.51.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:12 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Christian Brauner , David Howells , Siddh Raman Pant , Yury Norov , Dave Airlie , David Disseldorp , Philipp Stanner , Nick Alcock Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 03/34] watch_queue: use atomic find_bit() in post_one_notification() Date: Sat, 18 Nov 2023 07:50:34 -0800 Message-Id: <20231118155105.25678-4-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" post_one_notification() searches for a set bit in wqueue->notes_bitmap, and after some housekeeping work clears it, firing a BUG() if someone else cleared the bit in-between. We can allocate a bit atomically with the atomic find_and_clear_bit(), and remove the BUG() possibility entirely. Signed-off-by: Yury Norov --- kernel/watch_queue.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c index 778b4056700f..07edd4a2b463 100644 --- a/kernel/watch_queue.c +++ b/kernel/watch_queue.c @@ -112,7 +112,7 @@ static bool post_one_notification(struct watch_queue *w= queue, if (pipe_full(head, tail, pipe->ring_size)) goto lost; =20 - note =3D find_first_bit(wqueue->notes_bitmap, wqueue->nr_notes); + note =3D find_and_clear_bit(wqueue->notes_bitmap, wqueue->nr_notes); if (note >=3D wqueue->nr_notes) goto lost; =20 @@ -133,10 +133,6 @@ static bool post_one_notification(struct watch_queue *= wqueue, buf->flags =3D PIPE_BUF_FLAG_WHOLE; smp_store_release(&pipe->head, head + 1); /* vs pipe_read() */ =20 - if (!test_and_clear_bit(note, wqueue->notes_bitmap)) { - spin_unlock_irq(&pipe->rd_wait.lock); - BUG(); - } wake_up_interruptible_sync_poll_locked(&pipe->rd_wait, EPOLLIN | EPOLLRDN= ORM); done =3D true; =20 --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5C427C5ACB3 for ; Sat, 18 Nov 2023 15:52:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230288AbjKRPwO (ORCPT ); Sat, 18 Nov 2023 10:52:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229662AbjKRPv2 (ORCPT ); Sat, 18 Nov 2023 10:51:28 -0500 Received: from mail-yw1-x1134.google.com (mail-yw1-x1134.google.com [IPv6:2607:f8b0:4864:20::1134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E01BD5C for ; Sat, 18 Nov 2023 07:51:17 -0800 (PST) Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-5a87ac9d245so33492817b3.3 for ; Sat, 18 Nov 2023 07:51:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322675; x=1700927475; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9WwK51pC/Flt9q/I+kAw/5yF9gjhLf/hhE3qbzZj538=; b=P5YBDmuk3cEzULVFK5ObOumk7DoixChS5whcVIIVaZsTZzQ3E4EkzC6aSus8c3n3iW u3M+lr1RiR8YxaIlhF+pdjp6kEjqzfwTLj7lCk1iCCJlZFUEOkls+01wzsGF53Ynr0Fr KfMkEbnUWLv+HKS8A/3+dMaWJNNONMb62c/wMq1l7aaQ9HeKc2Joc1pInvQfRwnY8g7M xAMfC8BO+2HLwNZe5OXx/RFn3S1qZp2VkmSAqSk/YZ/1kRn3nPplYsC1ppf4VS8Iji01 L3rBCl5KCh3n9v9WW2uLvpFGjcW9Ymy13ES5tshCsb7jgoGUy3VDx+1tnq8vfnroFXWC ftHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322675; x=1700927475; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9WwK51pC/Flt9q/I+kAw/5yF9gjhLf/hhE3qbzZj538=; b=U3GynlV4UiSK6JIBHCnMwX4lbGgB7JuryjUSdbXykE+RjOH8QihYd2ONB2BMwSFC+K b2SZj/JDu4KF/xee/+BS/94h59k+pGuonI8/t9sQLxOIqy2Hje6WPuuTl0pOGMWxXE8c sIgEmYGPnTFkqA5tj36yB7ba3Sgh99gMMJ6iUsnpAfxkxaWnzqFPL59abjeYTxpwg9DT pV83uN+k9JrsnEG1t465O9XCVGyqMjhNmorhpP+pWgtsru0oSw+M5DnDUK+l1swdod49 gOtg3DQjno1tPTD+uJDUAvDX3LZVsjNuLIfJnIYL09McXgIvRJtU6IWi7ZAc4Jkn3M4B SgpQ== X-Gm-Message-State: AOJu0Yy+rd0/yCexXKsvAKMB1G3T+SGxcpnZB+F/diANtUfgk4ycXMci S3PEC9Perq/youdP6i8EnAO9kfiTkjWlhY+6 X-Google-Smtp-Source: AGHT+IHxSEbmknZ0a9HqoeCrPFoIoq/km5XQScyDT5hk8k8EGtLA6Ci9jOkyaNoThiclVwVEbJvlWw== X-Received: by 2002:a0d:d556:0:b0:59b:c0a8:2882 with SMTP id x83-20020a0dd556000000b0059bc0a82882mr2805662ywd.46.1700322675422; Sat, 18 Nov 2023 07:51:15 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id w8-20020a816208000000b00597e912e67esm1183639ywb.131.2023.11.18.07.51.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:14 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Yury Norov , Andy Shevchenko , Rasmus Villemoes , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , Valentin Schneider Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 04/34] sched: add cpumask_find_and_set() and use it in __mm_cid_get() Date: Sat, 18 Nov 2023 07:50:35 -0800 Message-Id: <20231118155105.25678-5-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" __mm_cid_get() uses a __mm_cid_try_get() helper to atomically acquire a bit in mm cid mask. Now that we have atomic find_and_set_bit(), we can easily extend it to cpumasks and use in the scheduler code. __mm_cid_try_get() has an infinite loop, which may delay forward progress of __mm_cid_get() when the mask is dense. The cpumask_find_and_set() doesn't poll the mask infinitely, and returns as soon as nothing has found after the first iteration, allowing to acquire the lock, and set use_cid_lock faster, if needed. cpumask_find_and_set() considers cid mask as a volatile region of memory, as it actually is in this case. So, if it's changed while search is in progress, KCSAN wouldn't fire warning on it. Signed-off-by: Yury Norov --- include/linux/cpumask.h | 12 ++++++++++ kernel/sched/sched.h | 52 ++++++++++++----------------------------- 2 files changed, 27 insertions(+), 37 deletions(-) diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index cfb545841a2c..c2acced8be4e 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h @@ -271,6 +271,18 @@ unsigned int cpumask_next_and(int n, const struct cpum= ask *src1p, small_cpumask_bits, n + 1); } =20 +/** + * cpumask_find_and_set - find the first unset cpu in a cpumask and + * set it atomically + * @srcp: the cpumask pointer + * + * Return: >=3D nr_cpu_ids if nothing is found. + */ +static inline unsigned int cpumask_find_and_set(volatile struct cpumask *s= rcp) +{ + return find_and_set_bit(cpumask_bits(srcp), small_cpumask_bits); +} + /** * for_each_cpu - iterate over every cpu in a mask * @cpu: the (optionally unsigned) integer iterator diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 2e5a95486a42..b2f095a9fc40 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -3345,28 +3345,6 @@ static inline void mm_cid_put(struct mm_struct *mm) __mm_cid_put(mm, mm_cid_clear_lazy_put(cid)); } =20 -static inline int __mm_cid_try_get(struct mm_struct *mm) -{ - struct cpumask *cpumask; - int cid; - - cpumask =3D mm_cidmask(mm); - /* - * Retry finding first zero bit if the mask is temporarily - * filled. This only happens during concurrent remote-clear - * which owns a cid without holding a rq lock. - */ - for (;;) { - cid =3D cpumask_first_zero(cpumask); - if (cid < nr_cpu_ids) - break; - cpu_relax(); - } - if (cpumask_test_and_set_cpu(cid, cpumask)) - return -1; - return cid; -} - /* * Save a snapshot of the current runqueue time of this cpu * with the per-cpu cid value, allowing to estimate how recently it was us= ed. @@ -3381,25 +3359,25 @@ static inline void mm_cid_snapshot_time(struct rq *= rq, struct mm_struct *mm) =20 static inline int __mm_cid_get(struct rq *rq, struct mm_struct *mm) { + struct cpumask *cpumask =3D mm_cidmask(mm); int cid; =20 - /* - * All allocations (even those using the cid_lock) are lock-free. If - * use_cid_lock is set, hold the cid_lock to perform cid allocation to - * guarantee forward progress. - */ + /* All allocations (even those using the cid_lock) are lock-free. */ if (!READ_ONCE(use_cid_lock)) { - cid =3D __mm_cid_try_get(mm); - if (cid >=3D 0) + cid =3D cpumask_find_and_set(cpumask); + if (cid < nr_cpu_ids) goto end; - raw_spin_lock(&cid_lock); - } else { - raw_spin_lock(&cid_lock); - cid =3D __mm_cid_try_get(mm); - if (cid >=3D 0) - goto unlock; } =20 + /* + * If use_cid_lock is set, hold the cid_lock to perform cid + * allocation to guarantee forward progress. + */ + raw_spin_lock(&cid_lock); + cid =3D cpumask_find_and_set(cpumask); + if (cid < nr_cpu_ids) + goto unlock; + /* * cid concurrently allocated. Retry while forcing following * allocations to use the cid_lock to ensure forward progress. @@ -3415,9 +3393,9 @@ static inline int __mm_cid_get(struct rq *rq, struct = mm_struct *mm) * all newcoming allocations observe the use_cid_lock flag set. */ do { - cid =3D __mm_cid_try_get(mm); + cid =3D cpumask_find_and_set(cpumask); cpu_relax(); - } while (cid < 0); + } while (cid >=3D nr_cpu_ids); /* * Allocate before clearing use_cid_lock. Only care about * program order because this is for forward progress. --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FC0EC2BB3F for ; Sat, 18 Nov 2023 15:52:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230263AbjKRPwS (ORCPT ); Sat, 18 Nov 2023 10:52:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230265AbjKRPv3 (ORCPT ); Sat, 18 Nov 2023 10:51:29 -0500 Received: from mail-yw1-x112c.google.com (mail-yw1-x112c.google.com [IPv6:2607:f8b0:4864:20::112c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F89AD5D; Sat, 18 Nov 2023 07:51:18 -0800 (PST) Received: by mail-yw1-x112c.google.com with SMTP id 00721157ae682-5afa5dbc378so29842967b3.0; Sat, 18 Nov 2023 07:51:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322677; x=1700927477; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VvI9Us0OJutYR180bTDT/eNujgeRZcibPGsiE0LS1nQ=; b=LwtggBdJKHWA0eKvQx/VVJwcqd6OcSZTW7/0ktKKrLTEOM8k8fJHzYDM+0nNiWwzzJ 1gAW3B25oENQteAaOBgDxTMWe2L7Cr21Boc8+PC3//OvpTXTySZn6tj0vMvdreb8ow1K 2GiMK4zWNp7E+bbL1XJ6OdtcSWr6Vjb+79sEpOscywb3mohFuEhnDk70qlhPgtVJqPky EflHGGYAY1Yv06dEIMizyUNKolcsgDFYW7pxb/Zklmq04pYeU3x6sN2R5dxDXma0DJYx E6LroP97qdCV1CG+hyo+Nv0lVfM4CLKklSrEbqyQCs//nyQcZWsDOa3h+PtbgVOrg2b7 VR7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322677; x=1700927477; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VvI9Us0OJutYR180bTDT/eNujgeRZcibPGsiE0LS1nQ=; b=m23iT6uu+HE783nV8u4uxISNULCDGnlZs6nGvjJDOdp2CdiCPPXk3nAVInO07LZVZ1 lixVtdkQJFLP4U1wsy2lncP16uQ686GR0sBcfgdK8VggBYlbiqpDN5HioyAvt4tLOG6p KUDfW1hEYUuihIBYsQckFaZMy1hECr6Ub7Uy44xr4Qi8vBERrd09r9pNkIQNfzQCUFZk 2u849YdzB+YD4C8bbtE7BmA/eMwJgeafZjaYvwM+WUDsTy2NzxU37FrSUwIOCKmNZhxm sftaYbLZyD/Wz8qMImbhr6K2heJJmRkEF3h73/cX2lnR7y8l/C3VnqLdG0fA+po9hMaZ 0Wew== X-Gm-Message-State: AOJu0YyWJs/z5AGn+OepsJZlSGmxvlx561XmbxobMmIzVV8WBXYXUdD4 ntShjWSyoEcU/NQmpYhm9Ln0kbQ3uDMPltUd X-Google-Smtp-Source: AGHT+IGErYx+U9qT7xYRu38M30NlhtAoSrrxl00OOPkiFJvYClCq7ENc2oGaGh6tEIdQb9Ng9H3IPw== X-Received: by 2002:a25:1346:0:b0:d9a:5220:d6b3 with SMTP id 67-20020a251346000000b00d9a5220d6b3mr1526816ybt.56.1700322677059; Sat, 18 Nov 2023 07:51:17 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id x16-20020a25ce10000000b00da034601e2esm1006873ybe.52.2023.11.18.07.51.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:16 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Thomas Bogendoerfer , Yury Norov , linux-mips@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 05/34] mips: sgi-ip30: rework heart_alloc_int() Date: Sat, 18 Nov 2023 07:50:36 -0800 Message-Id: <20231118155105.25678-6-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" heart_alloc_int() opencodes find_and_set_bit(). Switch it to using the dedicated function, and make an nice one-liner. Signed-off-by: Yury Norov --- arch/mips/sgi-ip30/ip30-irq.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/arch/mips/sgi-ip30/ip30-irq.c b/arch/mips/sgi-ip30/ip30-irq.c index 423c32cb66ed..3c4d4e947817 100644 --- a/arch/mips/sgi-ip30/ip30-irq.c +++ b/arch/mips/sgi-ip30/ip30-irq.c @@ -28,17 +28,9 @@ static DEFINE_PER_CPU(unsigned long, irq_enable_mask); =20 static inline int heart_alloc_int(void) { - int bit; + int bit =3D find_and_set_bit(heart_irq_map, HEART_NUM_IRQS); =20 -again: - bit =3D find_first_zero_bit(heart_irq_map, HEART_NUM_IRQS); - if (bit >=3D HEART_NUM_IRQS) - return -ENOSPC; - - if (test_and_set_bit(bit, heart_irq_map)) - goto again; - - return bit; + return bit < HEART_NUM_IRQS ? bit : -ENOSPC; } =20 static void ip30_error_irq(struct irq_desc *desc) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 47719C5ACB3 for ; Sat, 18 Nov 2023 15:52:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230309AbjKRPwV (ORCPT ); Sat, 18 Nov 2023 10:52:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230219AbjKRPwL (ORCPT ); Sat, 18 Nov 2023 10:52:11 -0500 Received: from mail-yw1-x1130.google.com (mail-yw1-x1130.google.com [IPv6:2607:f8b0:4864:20::1130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7626BD71; Sat, 18 Nov 2023 07:51:20 -0800 (PST) Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-5c8bc1ea998so8916957b3.0; Sat, 18 Nov 2023 07:51:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322678; x=1700927478; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UQERxgfSt89Kdhgk7cTMKz26OCMV2gzbBEX6BC+o/Hk=; b=YUwjoHQ5DP+OyTDVhE+0ai4t07Rh6sz1nx/RGU2cioED3f31OpbpPBwTPXNtQq3Nr5 fOWht3OTsYOA0xs0/1LdlwGyCdbVOWp/lwda84iwF6Ly5qjB3XWU8bc5Cwdteq49byLi sct6wV78F/DqLxVxSzLQZdgvQSm9KgmtRTpqKmrH2LJ7/EDRMt4/f/l/QCpMDnusidnF uomKLDcRQMWx6lG5kpWQv4iDOqnns1govW+N4F3TOCaNidRczrYDsSFOuMlXaS4+5mih WrcLnluP+Gog8zCec9UqY7muw2Ih5vqE3/aic0PJ+muLmK9Yc5jNGHx8FSTvoHwpDCBv DjcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322678; x=1700927478; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UQERxgfSt89Kdhgk7cTMKz26OCMV2gzbBEX6BC+o/Hk=; b=RtXQGtRFDejaZwVDWMaOUQf4XRbp9d3M8SdIE7t8lK+NhR1s4axR0UfW+tLfztH/0k 4UPUlC2SodDnKTHLakfdHaHZBs/rOc3GlEhXkByfhQbx0bs7wdry08sccJXaeePyQDln MzDqjzthYW2T4c7iPqpYBFS7KJDDq+rcRwAFzwf48XKmpfpjnV2sD3+rRJJxr5ketYEo c0XFFFeMDeMDG+5iO39YpDYHZY8nd9jKzfqQqXWeHcnZbS/q0UjVtv7JBDSlvfo/B4G4 AH0xfnVLnCmqIWq+dlY8UvVxhvs/uWkToFm/X3gszQ6Xpt9IJd23O65htrV/4fRGZCwq 7csw== X-Gm-Message-State: AOJu0YyJgNThU54dj8hNR357cS7gbfscu9e4jnLuwLt0SObrkFcaBBBO YbMmHUtuGiycOL69cPjqid0qSWm0GrWdAMf4 X-Google-Smtp-Source: AGHT+IH7rmTBSRsPV0fOGx1t31H5ZAiIc/BxfQWuRrGTYf06psszklrLQZsiS+6t49QhgKineu2Y7A== X-Received: by 2002:a0d:eb51:0:b0:5a8:250f:687c with SMTP id u78-20020a0deb51000000b005a8250f687cmr1514575ywe.15.1700322678534; Sat, 18 Nov 2023 07:51:18 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id o81-20020a817354000000b005869cf151ebsm1159023ywc.144.2023.11.18.07.51.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:18 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, "David S. Miller" , Rob Herring , Sam Ravnborg , Yury Norov , sparclinux@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 06/34] sparc: fix opencoded find_and_set_bit() in alloc_msi() Date: Sat, 18 Nov 2023 07:50:37 -0800 Message-Id: <20231118155105.25678-7-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" alloc_msi() opencodes find_and_clear_bit(). Switch it to using the dedicated function, and make an nice one-liner. Signed-off-by: Yury Norov --- arch/sparc/kernel/pci_msi.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/arch/sparc/kernel/pci_msi.c b/arch/sparc/kernel/pci_msi.c index fc7402948b7b..91105c788d1d 100644 --- a/arch/sparc/kernel/pci_msi.c +++ b/arch/sparc/kernel/pci_msi.c @@ -96,14 +96,9 @@ static u32 pick_msiq(struct pci_pbm_info *pbm) =20 static int alloc_msi(struct pci_pbm_info *pbm) { - int i; - - for (i =3D 0; i < pbm->msi_num; i++) { - if (!test_and_set_bit(i, pbm->msi_bitmap)) - return i + pbm->msi_first; - } + int i =3D find_and_set_bit(pbm->msi_bitmap, pbm->msi_num); =20 - return -ENOENT; + return i < pbm->msi_num ? i + pbm->msi_first : -ENOENT; } =20 static void free_msi(struct pci_pbm_info *pbm, int msi_num) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0D5DC5ACB3 for ; Sat, 18 Nov 2023 15:52:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231166AbjKRPwa (ORCPT ); Sat, 18 Nov 2023 10:52:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230373AbjKRPwQ (ORCPT ); Sat, 18 Nov 2023 10:52:16 -0500 Received: from mail-yb1-xb35.google.com (mail-yb1-xb35.google.com [IPv6:2607:f8b0:4864:20::b35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 609A310D2 for ; Sat, 18 Nov 2023 07:51:22 -0800 (PST) Received: by mail-yb1-xb35.google.com with SMTP id 3f1490d57ef6-db35caa1749so1089841276.2 for ; Sat, 18 Nov 2023 07:51:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322680; x=1700927480; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gyoEyO/BvLzExTTgi8khHbjKTjqWvT4r1T0zFU2+3B4=; b=eAYDhoo5LWl01TZzKDQXAmWOeLYBLa9ZfNNJzDryiiiKwgUj3vr9CiGvbrY52X16Av dj8pzPLEJkly88f2AFSiwtyDHLrXAwvFx31AtIoq5z5MMLih/iSgVURt0Xxq502emeKo gQc3vABv8BLyuSyPGa5OzloOSa9dVKMpXn6UFx36MkYrKBQ1Cel/rI08NTYNLgP7DkH3 Rm1Hcmj19H60/2+r3AbHCcBUxCeV9YUXZNWPL2Aqokjx56A0j8351VYK7Dh6RqI+ikbL 6ECJWdJ0/v9b0kLWNz0ltGrc4Hd4LJbz5g+XZKUZFInfhKKa+C8lGRayWOAk3WIPY9iB h0uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322680; x=1700927480; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gyoEyO/BvLzExTTgi8khHbjKTjqWvT4r1T0zFU2+3B4=; b=m2NYVouJlQ3nztd4ThDpV9tFA6WKt9N+1txXYqQjI/tIRw3yvISK4GHwEYxnMY+ftV 60R7BitGLxitdDWvm6Xf5xGUm8cPVIP5ze0zQz6YaQ0P8+fepffJ4eOYrct229ba1Psn pbRfvE1PfWFoQfPd9H+1sO5X/UzIo9Sj1UOVS5WmgOuYLY7B+P5MXGeMF7+VYfEx7LbV nRbZVYyjo0OP+e8inNvq276koqUo5PjocWWtjxpwG/Wo8Lceew1C7PqDGj4DJLacZ8Dt aBMJP1CslGURRXgjA7R9IkxmJ1astmNGBKbVetexEzJax+LrMziBpin3Mw2EFoZm/VDu 8FHA== X-Gm-Message-State: AOJu0Yy8ciWodJy13aZrAlVptmfSGhDYO+hZGr+SlpF5/4r7WvfrxWoM Zz+4noxOb0JojUbleUQU4igdxfpk6PVIYLWw X-Google-Smtp-Source: AGHT+IHj+eYHr1ru2W9s2X50eY6fyN3D8n3j9pP2d8TuQd1yVcJckTMxAXGClEhkj7DzHhTwgJSZvQ== X-Received: by 2002:a25:bb92:0:b0:daf:be86:a2ea with SMTP id y18-20020a25bb92000000b00dafbe86a2eamr2470792ybg.38.1700322680273; Sat, 18 Nov 2023 07:51:20 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id d2-20020a25cd02000000b00d8679407796sm999292ybf.48.2023.11.18.07.51.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:19 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Will Deacon , Mark Rutland , linux-arm-kernel@lists.infradead.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 07/34] perf/arm: optimize opencoded atomic find_bit() API Date: Sat, 18 Nov 2023 07:50:38 -0800 Message-Id: <20231118155105.25678-8-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Switch subsystem to use atomic find_bit() or atomic iterators as appropriate. Signed-off-by: Yury Norov --- drivers/perf/arm-cci.c | 23 +++++------------------ drivers/perf/arm-ccn.c | 10 ++-------- drivers/perf/arm_dmc620_pmu.c | 9 ++------- drivers/perf/arm_pmuv3.c | 8 ++------ 4 files changed, 11 insertions(+), 39 deletions(-) diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c index 61de861eaf91..70fbf9d09d37 100644 --- a/drivers/perf/arm-cci.c +++ b/drivers/perf/arm-cci.c @@ -320,12 +320,8 @@ static int cci400_get_event_idx(struct cci_pmu *cci_pm= u, return CCI400_PMU_CYCLE_CNTR_IDX; } =20 - for (idx =3D CCI400_PMU_CNTR0_IDX; idx <=3D CCI_PMU_CNTR_LAST(cci_pmu); += +idx) - if (!test_and_set_bit(idx, hw->used_mask)) - return idx; - - /* No counters available */ - return -EAGAIN; + idx =3D find_and_set_bit(hw->used_mask, CCI_PMU_CNTR_LAST(cci_pmu) + 1); + return idx < CCI_PMU_CNTR_LAST(cci_pmu) + 1 ? idx : -EAGAIN; } =20 static int cci400_validate_hw_event(struct cci_pmu *cci_pmu, unsigned long= hw_event) @@ -802,13 +798,8 @@ static int pmu_get_event_idx(struct cci_pmu_hw_events = *hw, struct perf_event *ev if (cci_pmu->model->get_event_idx) return cci_pmu->model->get_event_idx(cci_pmu, hw, cci_event); =20 - /* Generic code to find an unused idx from the mask */ - for (idx =3D 0; idx <=3D CCI_PMU_CNTR_LAST(cci_pmu); idx++) - if (!test_and_set_bit(idx, hw->used_mask)) - return idx; - - /* No counters available */ - return -EAGAIN; + idx =3D find_and_set_bit(hw->used_mask, CCI_PMU_CNTR_LAST(cci_pmu) + 1); + return idx < CCI_PMU_CNTR_LAST(cci_pmu) + 1 ? idx : -EAGAIN; } =20 static int pmu_map_event(struct perf_event *event) @@ -861,12 +852,8 @@ static void pmu_free_irq(struct cci_pmu *cci_pmu) { int i; =20 - for (i =3D 0; i < cci_pmu->nr_irqs; i++) { - if (!test_and_clear_bit(i, &cci_pmu->active_irqs)) - continue; - + for_each_test_and_clear_bit(i, &cci_pmu->active_irqs, cci_pmu->nr_irqs) free_irq(cci_pmu->irqs[i], cci_pmu); - } } =20 static u32 pmu_read_counter(struct perf_event *event) diff --git a/drivers/perf/arm-ccn.c b/drivers/perf/arm-ccn.c index 728d13d8e98a..d657701b1f23 100644 --- a/drivers/perf/arm-ccn.c +++ b/drivers/perf/arm-ccn.c @@ -589,15 +589,9 @@ static const struct attribute_group *arm_ccn_pmu_attr_= groups[] =3D { =20 static int arm_ccn_pmu_alloc_bit(unsigned long *bitmap, unsigned long size) { - int bit; - - do { - bit =3D find_first_zero_bit(bitmap, size); - if (bit >=3D size) - return -EAGAIN; - } while (test_and_set_bit(bit, bitmap)); + int bit =3D find_and_set_bit(bitmap, size); =20 - return bit; + return bit < size ? bit : -EAGAIN; } =20 /* All RN-I and RN-D nodes have identical PMUs */ diff --git a/drivers/perf/arm_dmc620_pmu.c b/drivers/perf/arm_dmc620_pmu.c index 30cea6859574..e41c84dabc3e 100644 --- a/drivers/perf/arm_dmc620_pmu.c +++ b/drivers/perf/arm_dmc620_pmu.c @@ -303,13 +303,8 @@ static int dmc620_get_event_idx(struct perf_event *eve= nt) end_idx =3D DMC620_PMU_MAX_COUNTERS; } =20 - for (idx =3D start_idx; idx < end_idx; ++idx) { - if (!test_and_set_bit(idx, dmc620_pmu->used_mask)) - return idx; - } - - /* The counters are all in use. */ - return -EAGAIN; + idx =3D find_and_set_next_bit(dmc620_pmu->used_mask, end_idx, start_idx); + return idx < end_idx ? idx : -EAGAIN; } =20 static inline diff --git a/drivers/perf/arm_pmuv3.c b/drivers/perf/arm_pmuv3.c index 18b91b56af1d..784b0383e9f8 100644 --- a/drivers/perf/arm_pmuv3.c +++ b/drivers/perf/arm_pmuv3.c @@ -825,13 +825,9 @@ static irqreturn_t armv8pmu_handle_irq(struct arm_pmu = *cpu_pmu) static int armv8pmu_get_single_idx(struct pmu_hw_events *cpuc, struct arm_pmu *cpu_pmu) { - int idx; + int idx =3D find_and_set_next_bit(cpuc->used_mask, cpu_pmu->num_events, A= RMV8_IDX_COUNTER0); =20 - for (idx =3D ARMV8_IDX_COUNTER0; idx < cpu_pmu->num_events; idx++) { - if (!test_and_set_bit(idx, cpuc->used_mask)) - return idx; - } - return -EAGAIN; + return idx < cpu_pmu->num_events ? idx : -EAGAIN; } =20 static int armv8pmu_get_chain_idx(struct pmu_hw_events *cpuc, --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E8AC7C2BB3F for ; Sat, 18 Nov 2023 15:52:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231207AbjKRPwc (ORCPT ); Sat, 18 Nov 2023 10:52:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230241AbjKRPwR (ORCPT ); Sat, 18 Nov 2023 10:52:17 -0500 Received: from mail-yw1-x112f.google.com (mail-yw1-x112f.google.com [IPv6:2607:f8b0:4864:20::112f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F07410EC for ; Sat, 18 Nov 2023 07:51:24 -0800 (PST) Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-5bf58914bacso32809437b3.3 for ; Sat, 18 Nov 2023 07:51:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322682; x=1700927482; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9UsBR6w3W758FRiCdHZSwpEWSnagR0QzKE5nlW0aMIc=; b=nQs2UW3wVet4kSsKbSzaXKJxEP2BuksvcT/EJAsDwDfEp6x0P9IKYl818BEEF4AWP5 HGtA5IY818T7+BWc3POZXJRStncOM+cEpVsgppyURmDZPKkHamsdXZTwgwWI4kLk+au4 epfgzV4FElITDS9w4wHt4jRqEuiufR4mHUAgAx95EYNuBk8qBK/ozLdmZEIPThfhhSi2 nfRFUF/4bRkUEYrp1Qx9A9GAVRaAZb7JK0tdeX1K5a63pfMrnpWUmd6q1kdL/wBa+LGE 0IsXZQl4aE+RMaJOPZ1DRx6w0VbY4c2db9ZAB3Q2TTwTvx9iJ9nE93Bf0z1YbB4K8Op6 JJOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322682; x=1700927482; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9UsBR6w3W758FRiCdHZSwpEWSnagR0QzKE5nlW0aMIc=; b=ghirHcFsp0Z5YM/lQMSVuwGaysjCiq3GZC0nFrWUKgyCjdDJ9h7+H4GNRVt+QQS+DB r7caDzVSwXRCbSgITNvvqhDKS0T18RI6ciunWBUe1gGPc1q4GY8pS3Dtqmo++gLlZchu 1/DoIxHumrmChxJK7WkD0qDnLPE+PK8Wu2Up94aGpGa9mLBWzOtjVEpA+QQ882BjKd/o qE7P6yq3wirdlsB929LsVpXpovpIrQj2k/qP6r3Tyffi/21dYpE8brSrKbqgcpLaEocg tlVUcX3QzJEbZVX0y55OQEeIEyILd3i68jGzrVjIDVzgzRyQ+6tVmrDEoNAMnn/ypG4m dCIQ== X-Gm-Message-State: AOJu0YwD2iYuveaU0a+UiAU13EZWIVfbcOfWx4tLejy63EiPQzSRZTzR fQjL5n114NS7OI3jMZvgHUC+lNZk0diFg21W X-Google-Smtp-Source: AGHT+IFMi3zL8WSF03nEf+gU11A9ztIok6tcrLg24vsR46a+e0EFl+1hnebBli0fdxvl68Hs4Jerug== X-Received: by 2002:a0d:dc43:0:b0:59b:ec85:54ee with SMTP id f64-20020a0ddc43000000b0059bec8554eemr3160808ywe.39.1700322682161; Sat, 18 Nov 2023 07:51:22 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id d19-20020a814f13000000b0058ddb62f99bsm1187785ywb.38.2023.11.18.07.51.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:21 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Shuai Xue , Will Deacon , Mark Rutland , linux-arm-kernel@lists.infradead.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 08/34] drivers/perf: optimize ali_drw_get_counter_idx() by using find_bit() Date: Sat, 18 Nov 2023 07:50:39 -0800 Message-Id: <20231118155105.25678-9-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The function searches used_mask for a set bit in a for-loop bit by bit. We can do it faster by using atomic find_and_set_bit(). Signed-off-by: Yury Norov Acked-by: Will Deacon --- drivers/perf/alibaba_uncore_drw_pmu.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/perf/alibaba_uncore_drw_pmu.c b/drivers/perf/alibaba_u= ncore_drw_pmu.c index 19d459a36be5..2a3b7701d568 100644 --- a/drivers/perf/alibaba_uncore_drw_pmu.c +++ b/drivers/perf/alibaba_uncore_drw_pmu.c @@ -274,15 +274,9 @@ static const struct attribute_group *ali_drw_pmu_attr_= groups[] =3D { static int ali_drw_get_counter_idx(struct perf_event *event) { struct ali_drw_pmu *drw_pmu =3D to_ali_drw_pmu(event->pmu); - int idx; + int idx =3D find_and_set_bit(drw_pmu->used_mask, ALI_DRW_PMU_COMMON_MAX_C= OUNTERS); =20 - for (idx =3D 0; idx < ALI_DRW_PMU_COMMON_MAX_COUNTERS; ++idx) { - if (!test_and_set_bit(idx, drw_pmu->used_mask)) - return idx; - } - - /* The counters are all in use. */ - return -EBUSY; + return idx < ALI_DRW_PMU_COMMON_MAX_COUNTERS ? idx : -EBUSY; } =20 static u64 ali_drw_pmu_read_counter(struct perf_event *event) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D36C1C5AE5B for ; Sat, 18 Nov 2023 15:52:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231222AbjKRPwe (ORCPT ); Sat, 18 Nov 2023 10:52:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230409AbjKRPwR (ORCPT ); Sat, 18 Nov 2023 10:52:17 -0500 Received: from mail-yw1-x1131.google.com (mail-yw1-x1131.google.com [IPv6:2607:f8b0:4864:20::1131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3CEA610F5; Sat, 18 Nov 2023 07:51:25 -0800 (PST) Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-5c6705515d8so20371277b3.2; Sat, 18 Nov 2023 07:51:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322684; x=1700927484; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1vgDBzQP5sgQpLZgXf8Y/I5f9ETKynbv5QtuyG4UrSA=; b=NLM9Ml01qJ4IkgQbv+Ri2+76QFWWzLh3mkWpi2OMleBF9fCxNnKV5WDc06aryh1ZCn vgOHDqjT7TWl8ljXxWzhEk3nj/Rd37oKoCseY8zyOTDceyspJJZJLUMxHczflHr6WWiw Deqd55futvd833FMrWwCkW7ijwTE1YzqyTTnYiqV7sUY2VObBW7IK/Yb/L3r+4qtbuSD lGs/RspReC5DpMizaE+J0JUaIJ99LGvfX/+urpzt4h3ltI6Sop1MaPpEmGu+q/dLMQGh ig5sveUuNKNUpxCnyXMTgAGx32LMQxZLI/Rsz88fRT36Sfd/3YlkIzw6AX/ru5Vxgku/ SJag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322684; x=1700927484; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1vgDBzQP5sgQpLZgXf8Y/I5f9ETKynbv5QtuyG4UrSA=; b=oMZ2QVn4WxpBJ5vMypY2awJI3IUtglNe8gR6mNOxIkxy263dtx1wKXYhE5j5/VhuP8 7A6Gz7dHzS6QZbbrYzvJfwgdoLSXBIfrUwcbx9O7QWSuA8Y/nA0veHz/CLXpx2D39ipW 81j1mXz/B1WVkhHlTeHIet3MHRENMF3hFJQg+EiHNYVQcj6VtnHTuHZQfGWYz4lOKLhB Dxw1eg1ZT5t9LT0zt/XODIYHvdUv1ZonCVmx1lDXywfTIvZso7SNIk6Myr3XvhJOUqcF nv/UqMRagQVx2CqWcbqlV3PVSApHF/OPVxThZfQvcYnzkAzfGhYJ41X1dbn8FFfVqHxP mdcA== X-Gm-Message-State: AOJu0YzCOvVbW5kpSYk52bruo/clHnp9aJNaVqjyXPUBPzocVqsNUJ5A UnJmYkW4h01GOgI2UHB8hsXumyjjWavZEoWM X-Google-Smtp-Source: AGHT+IGKUabWy1RoWpF0AivPJpAkOwQIu7XshCT/EYgQUvHZZdNmVZ1HNLqdDOrbGznPbsb+d6S/4A== X-Received: by 2002:a0d:ccd4:0:b0:5a8:7cb2:15d0 with SMTP id o203-20020a0dccd4000000b005a87cb215d0mr2911801ywd.11.1700322683795; Sat, 18 Nov 2023 07:51:23 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id j63-20020a0dc742000000b005a7d9fca87dsm1157680ywd.107.2023.11.18.07.51.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:22 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Fenghua Yu , Dave Jiang , Vinod Koul , dmaengine@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 09/34] dmaengine: idxd: optimize perfmon_assign_event() Date: Sat, 18 Nov 2023 07:50:40 -0800 Message-Id: <20231118155105.25678-10-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The function searches used_mask for a set bit in a for-loop bit by bit. We can do it faster by using atomic find_and_set_bit(). Signed-off-by: Yury Norov Acked-by: Vinod Koul Reviewed-by: Dave Jiang --- drivers/dma/idxd/perfmon.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/dma/idxd/perfmon.c b/drivers/dma/idxd/perfmon.c index fdda6d604262..4dd9c0d979c3 100644 --- a/drivers/dma/idxd/perfmon.c +++ b/drivers/dma/idxd/perfmon.c @@ -134,13 +134,9 @@ static void perfmon_assign_hw_event(struct idxd_pmu *i= dxd_pmu, static int perfmon_assign_event(struct idxd_pmu *idxd_pmu, struct perf_event *event) { - int i; - - for (i =3D 0; i < IDXD_PMU_EVENT_MAX; i++) - if (!test_and_set_bit(i, idxd_pmu->used_mask)) - return i; + int i =3D find_and_set_bit(idxd_pmu->used_mask, IDXD_PMU_EVENT_MAX); =20 - return -EINVAL; + return i < IDXD_PMU_EVENT_MAX ? i : -EINVAL; } =20 /* --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68695C5ACB3 for ; Sat, 18 Nov 2023 15:52:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230507AbjKRPwn (ORCPT ); Sat, 18 Nov 2023 10:52:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40688 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230477AbjKRPw0 (ORCPT ); Sat, 18 Nov 2023 10:52:26 -0500 Received: from mail-yb1-xb35.google.com (mail-yb1-xb35.google.com [IPv6:2607:f8b0:4864:20::b35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 113DC1705; Sat, 18 Nov 2023 07:51:27 -0800 (PST) Received: by mail-yb1-xb35.google.com with SMTP id 3f1490d57ef6-d9a6399cf78so2391158276.0; Sat, 18 Nov 2023 07:51:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322685; x=1700927485; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SrDABjtie/YsTla3oR4TwoLfOAKA91LiKhvoQvuKuZ0=; b=kjjbNi9ampdDnKd3zsNfGlvyotuVRpTMFasdFcBZSuASyM7r0SZeuKIg9iXIWqr8FF kjOdeEnby6zw0bWAlnZeK+skpxFk85DrayPy1N70H/xesbLTMqO/cn0HhhSTtDimrejm H/JeiPxktiKXqn6UlFFbLVSHdaHRR6dXUihHu4dxoBs4R9vmxmuGsttGGeK1+C7cSA22 pRsbuKiu/ODwIABAgL8cdZ3lG6FNG/xGU2YkhYSzPWMuEMEtGj+sifZQLuxtu7ZoGfqa B2HBINkWNoP0tPrucZmrIqDwEy8VVsCYaSc2RxtZHecJ89/q0L+b1jqP9CNsURLKrleq aDMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322685; x=1700927485; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SrDABjtie/YsTla3oR4TwoLfOAKA91LiKhvoQvuKuZ0=; b=M/9I8S0aHZDkNfUL/rmE3xhIxYSoDkIjbp3AX4ebud0xx2rYzDPD2E4QRcoCa6uR48 v7xzuS0yrngL5b/U1vDgtnaV4Avz/xXB8C/8VvTjzhhluiLrpeHIyh8NgD7pP2o4hzIR plVkIeSlyhiGL2b0VGO+UVrjjjp59oW4c4MVP9V6VWaJrAgJY0s3XK7xrB37PsCkeEun X5nUtLYbARaDVb1DNKalCZj2Pw9RxoMQpEdJW9fopEAWB7pjII78830l6QXK/aNe7M1z jaodA1eHQDOwSpbUpSRe4hDy0HLdT6SgpprQCH7omBhBWW7EGxY5pi8/q49AhTgmubwp k7/A== X-Gm-Message-State: AOJu0Yzu6LjgcBVP+RUuzpN6J3C1+4CQcrSwvI2bmfUl0r3mtDpjXP42 5blB62JtLVKnJpTf+1RpGAUM6FgobsTPdmMR X-Google-Smtp-Source: AGHT+IFTfzteXdMOCngH4g6ThBL8jMLQtAxdwFQMPhz1ymRIf3wQ4UJX7I6T1IJmIedN4upY2EbAuQ== X-Received: by 2002:a25:ad4f:0:b0:daf:7702:fd60 with SMTP id l15-20020a25ad4f000000b00daf7702fd60mr1666269ybe.1.1700322684938; Sat, 18 Nov 2023 07:51:24 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id e14-20020a25d30e000000b00d9cd730e4d0sm1000457ybf.26.2023.11.18.07.51.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:24 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Kalle Valo , Jeff Johnson , ath10k@lists.infradead.org, linux-wireless@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 10/34] ath10k: optimize ath10k_snoc_napi_poll() by using find_bit() Date: Sat, 18 Nov 2023 07:50:41 -0800 Message-Id: <20231118155105.25678-11-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ath10k_snoc_napi_poll() traverses pending_ce_irqs bitmap bit by bit. We can do it faster by using for_each_test_and_clear_bit() iterator. Signed-off-by: Yury Norov --- drivers/net/wireless/ath/ath10k/snoc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/snoc.c b/drivers/net/wireless/= ath/ath10k/snoc.c index 2c39bad7ebfb..a1db5a973780 100644 --- a/drivers/net/wireless/ath/ath10k/snoc.c +++ b/drivers/net/wireless/ath/ath10k/snoc.c @@ -1237,11 +1237,10 @@ static int ath10k_snoc_napi_poll(struct napi_struct= *ctx, int budget) return done; } =20 - for (ce_id =3D 0; ce_id < CE_COUNT; ce_id++) - if (test_and_clear_bit(ce_id, ar_snoc->pending_ce_irqs)) { - ath10k_ce_per_engine_service(ar, ce_id); - ath10k_ce_enable_interrupt(ar, ce_id); - } + for_each_test_and_clear_bit(ce_id, ar_snoc->pending_ce_irqs, CE_COUNT) { + ath10k_ce_per_engine_service(ar, ce_id); + ath10k_ce_enable_interrupt(ar, ce_id); + } =20 done =3D ath10k_htt_txrx_compl_task(ar, budget); =20 --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7EBDBC5AD4C for ; Sat, 18 Nov 2023 15:52:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230294AbjKRPwr (ORCPT ); Sat, 18 Nov 2023 10:52:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40730 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230518AbjKRPw1 (ORCPT ); Sat, 18 Nov 2023 10:52:27 -0500 Received: from mail-yb1-xb30.google.com (mail-yb1-xb30.google.com [IPv6:2607:f8b0:4864:20::b30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C3E751717; Sat, 18 Nov 2023 07:51:28 -0800 (PST) Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-daf7ed42ea6so2930520276.0; Sat, 18 Nov 2023 07:51:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322686; x=1700927486; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9aggm3BNjkpQF7Koo2HqoELFr7cmqY1seHu1T/WMe7U=; b=YSZU3unXxunBjc0Nwg3LGWUwuVEUIjnWBFaxcuQ9q+Z7ObgNYQN7NrfhdPSPxzbxhk 04W07mpNFFNRxri1fG5gJ4sn697UaQVCebHYqn09C4vzO4FDtuZHBqMfM67miN4aHZkQ SopWczZEwqmnakeZUnlT81J9LVUL2nb1Ry718lGzB0ORy7xQtpwHkCea3USCkItcsEBx IwC+QXKKHqu5UWSiSW13C/IeFtrvu5i54A1D9sw2brWvw6ardCzvhP40s4XUjSpJhODB L05cydNJKVLuvG8L6mgODO7HJnCugy9faB2ZCVS8Baf45q+yIYYR4rAFJOaYYp3n6ilW pn0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322686; x=1700927486; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9aggm3BNjkpQF7Koo2HqoELFr7cmqY1seHu1T/WMe7U=; b=Fvgf4DImL67n1JSfpUjw7oDFeopsi1R4kTRqpID8Rkw8ukteAo6NAFsQojoFsvAE2h YhLranh7PaT0tmQWOVXhPvYEt0Ng+p5E7Miha+TqJUoT8HcOhe6z544DQ9OuyNbFLEuc e2EJJQ6KRbH528fSyMjt1zND1E2XTV3bkHNXFt54zezKMcLDXHo0jmsG8lnaX+lyf95x LMjp+yeeIttagJCjYUUOeL9ehwhSW7KC8vZnWW/YrwTPa/pmYRCdirjnNdvdVdFpoQJI BZLIouQq+3C5PcfSSLhRfCb5+JyttbfdU28DXcrBZ/9Ueq4FDM4Y6+2ab0LuTWK5WdfS /QBA== X-Gm-Message-State: AOJu0YxoxW9nVCmObO/zyylhyj3qjvM7e9MS4+B2oBa/Zdk/WerOd+9x 1CMHNloY7Q3i2yj0RV8msqx9GyvoT57NN8I+ X-Google-Smtp-Source: AGHT+IEl/Ly5SGFxHhjFErkw0m69iAcv/uiGWWg8tpAKjYHYXPFvZ4wbYsrNE640IyvZon4rsbzP6w== X-Received: by 2002:a25:2bc8:0:b0:d9a:5630:5281 with SMTP id r191-20020a252bc8000000b00d9a56305281mr2127641ybr.62.1700322686501; Sat, 18 Nov 2023 07:51:26 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id w16-20020a05690202d000b00d9abce6acf2sm964670ybh.59.2023.11.18.07.51.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:25 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Ping-Ke Shih , Kalle Valo , linux-wireless@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 11/34] wifi: rtw88: optimize rtw_pci_tx_kick_off() by using find_bit() Date: Sat, 18 Nov 2023 07:50:42 -0800 Message-Id: <20231118155105.25678-12-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" rtw_pci_tx_kick_off() traverses tx_queued bitmap bit by bit. We can do it faster by using atomic for_each_test_and_clear_bit() iterator. Signed-off-by: Yury Norov --- drivers/net/wireless/realtek/rtw88/pci.c | 5 ++--- drivers/net/wireless/realtek/rtw89/pci.c | 5 +---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireles= s/realtek/rtw88/pci.c index 2bfc0e822b8d..a0d69c75a381 100644 --- a/drivers/net/wireless/realtek/rtw88/pci.c +++ b/drivers/net/wireless/realtek/rtw88/pci.c @@ -789,9 +789,8 @@ static void rtw_pci_tx_kick_off(struct rtw_dev *rtwdev) struct rtw_pci *rtwpci =3D (struct rtw_pci *)rtwdev->priv; enum rtw_tx_queue_type queue; =20 - for (queue =3D 0; queue < RTK_MAX_TX_QUEUE_NUM; queue++) - if (test_and_clear_bit(queue, rtwpci->tx_queued)) - rtw_pci_tx_kick_off_queue(rtwdev, queue); + for_each_test_and_clear_bit(queue, rtwpci->tx_queued, RTK_MAX_TX_QUEUE_NU= M) + rtw_pci_tx_kick_off_queue(rtwdev, queue); } =20 static int rtw_pci_tx_write_data(struct rtw_dev *rtwdev, diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireles= s/realtek/rtw89/pci.c index 14ddb0d39e63..184d41b774d7 100644 --- a/drivers/net/wireless/realtek/rtw89/pci.c +++ b/drivers/net/wireless/realtek/rtw89/pci.c @@ -1077,10 +1077,7 @@ static void rtw89_pci_tx_kick_off_pending(struct rtw= 89_dev *rtwdev) struct rtw89_pci_tx_ring *tx_ring; int txch; =20 - for (txch =3D 0; txch < RTW89_TXCH_NUM; txch++) { - if (!test_and_clear_bit(txch, rtwpci->kick_map)) - continue; - + for_each_test_and_clear_bit(txch, rtwpci->kick_map, RTW89_TXCH_NUM) { tx_ring =3D &rtwpci->tx_rings[txch]; __rtw89_pci_tx_kick_off(rtwdev, tx_ring); } --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71637C2BB3F for ; Sat, 18 Nov 2023 15:52:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231151AbjKRPwx (ORCPT ); Sat, 18 Nov 2023 10:52:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231134AbjKRPw2 (ORCPT ); Sat, 18 Nov 2023 10:52:28 -0500 Received: from mail-yb1-xb2a.google.com (mail-yb1-xb2a.google.com [IPv6:2607:f8b0:4864:20::b2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D5381728; Sat, 18 Nov 2023 07:51:29 -0800 (PST) Received: by mail-yb1-xb2a.google.com with SMTP id 3f1490d57ef6-da0359751dbso2372606276.1; Sat, 18 Nov 2023 07:51:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322688; x=1700927488; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/7UbIoFa3HLA+YNouSNyxHd1ANvqTMMe1TaZ6Yb0imk=; b=KAi1o1Lp2NXwdu7Wp2qrYSU1kAU39h4nCxehYxl8oMXiayPkh0Q3w/J9ydhyMErtxH 4qcESin55kISPjFb4nD6h7tm8Drs9yk9ITYtfYpqhRTc1ZLLV3Hxy3EzxlpoTAVcnFIF HrF+Cks34FmnTYFTG1GezpcK3MxWcW5vRrrZEiuLZo45H4OImCbrOS4s1vGq81zYoFFA MzPsW+2v3WUuNPg17AqgaNfFqIdsA7bK0GOIRKUkDzRwvtu63GfYqRvQ3XlsnBbMGOCA kuUhkDvJj/MXlAOEHpBRWsCGlE/nhsoGr5rfga4yWUDCOzXSywEmuG3FC2KCoaonDgIJ atxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322688; x=1700927488; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/7UbIoFa3HLA+YNouSNyxHd1ANvqTMMe1TaZ6Yb0imk=; b=tByGhZ5Qiz9yPFEuwaCgeDROxQEZA1QwOkU7blb+kM6cfMvG+M7LHn7V9RKwm+lZE9 xKONKvwhXDiHhDAs75OwCbhabqiFqykPFvOiIwh/6ZwVg1IFRmPwkC9ceKGrbWGn5xnn lp03mxOPC1d47QbflBbrJeRfDwrB76dw6LDuYWSsM2Mapy8XZ3rjqTe1dqyadqKQto0o nW9GjbJrGkk4Lp85GypdWldfZg2mb5+2IABjwp1rc1RFwLChF4o6rKCU2fFimeTb4hAK CcYtJqwtuuQDVcSpJ1YQZroYSGkkGdr2saseBF6P8wI5f2GEzKOdtX48ZjBkLAyujQV4 tKBg== X-Gm-Message-State: AOJu0YzYzv4yYTGCKXFCN/v11vwMFj/gIIbxgs96Sz2acUt45KbXES62 8bsaVeiCKoKsFuGrhC3mypDrVjfXGtsZXaVp X-Google-Smtp-Source: AGHT+IG2fdzu87N53rGqJR9N9gQqCXQKJNf4sG4KZv9s0gbPje53w6L12nPkNTqg8pVr1QpQJBOnQg== X-Received: by 2002:a25:ad4f:0:b0:daf:7702:fd60 with SMTP id l15-20020a25ad4f000000b00daf7702fd60mr1666371ybe.1.1700322688428; Sat, 18 Nov 2023 07:51:28 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id w4-20020a254904000000b00da3b52e3cf5sm1010714yba.10.2023.11.18.07.51.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:27 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Stanislaw Gruszka , Kalle Valo , Gregory Greenman , Hans de Goede , Johannes Berg , Kees Cook , Yury Norov , Miri Korenblit , linux-wireless@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 12/34] wifi: intel: use atomic find_bit() API where appropriate Date: Sat, 18 Nov 2023 07:50:43 -0800 Message-Id: <20231118155105.25678-13-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" iwlegacy and iwlwifi code opencodes atomic bit allocation/traversing by using loops. Switch it to use dedicated functions. Signed-off-by: Yury Norov --- .../net/wireless/intel/iwlegacy/4965-mac.c | 7 ++----- drivers/net/wireless/intel/iwlegacy/common.c | 8 ++------ drivers/net/wireless/intel/iwlwifi/dvm/sta.c | 8 ++------ drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 19 ++++++++----------- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/w= ireless/intel/iwlegacy/4965-mac.c index 69276266ce6f..8fb738c95cb4 100644 --- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c @@ -2089,12 +2089,9 @@ il4965_txq_ctx_stop(struct il_priv *il) static int il4965_txq_ctx_activate_free(struct il_priv *il) { - int txq_id; + int txq_id =3D find_and_set_bit(&il->txq_ctx_active_msk, il->hw_params.ma= x_txq_num); =20 - for (txq_id =3D 0; txq_id < il->hw_params.max_txq_num; txq_id++) - if (!test_and_set_bit(txq_id, &il->txq_ctx_active_msk)) - return txq_id; - return -1; + return txq_id < il->hw_params.max_txq_num ? txq_id : -1; } =20 /* diff --git a/drivers/net/wireless/intel/iwlegacy/common.c b/drivers/net/wir= eless/intel/iwlegacy/common.c index 054fef680aba..c6353e17be50 100644 --- a/drivers/net/wireless/intel/iwlegacy/common.c +++ b/drivers/net/wireless/intel/iwlegacy/common.c @@ -2303,13 +2303,9 @@ EXPORT_SYMBOL(il_restore_stations); int il_get_free_ucode_key_idx(struct il_priv *il) { - int i; - - for (i =3D 0; i < il->sta_key_max_num; i++) - if (!test_and_set_bit(i, &il->ucode_key_table)) - return i; + int i =3D find_and_set_bit(&il->ucode_key_table, il->sta_key_max_num); =20 - return WEP_INVALID_OFFSET; + return i < il->sta_key_max_num ? i : WEP_INVALID_OFFSET; } EXPORT_SYMBOL(il_get_free_ucode_key_idx); =20 diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c b/drivers/net/wir= eless/intel/iwlwifi/dvm/sta.c index 8b01ab986cb1..21e663d2bc44 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c @@ -719,13 +719,9 @@ void iwl_restore_stations(struct iwl_priv *priv, struc= t iwl_rxon_context *ctx) =20 int iwl_get_free_ucode_key_offset(struct iwl_priv *priv) { - int i; - - for (i =3D 0; i < priv->sta_key_max_num; i++) - if (!test_and_set_bit(i, &priv->ucode_key_table)) - return i; + int i =3D find_and_set_bit(&priv->ucode_key_table, priv->sta_key_max_num); =20 - return WEP_INVALID_OFFSET; + return i < priv->sta_key_max_num ? i : WEP_INVALID_OFFSET; } =20 void iwl_dealloc_bcast_stations(struct iwl_priv *priv) diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c b/drivers/net/wire= less/intel/iwlwifi/dvm/tx.c index 111ed1873006..1b3dc99b968c 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/tx.c @@ -460,17 +460,14 @@ int iwlagn_tx_skb(struct iwl_priv *priv, =20 static int iwlagn_alloc_agg_txq(struct iwl_priv *priv, int mq) { - int q; - - for (q =3D IWLAGN_FIRST_AMPDU_QUEUE; - q < priv->trans->trans_cfg->base_params->num_of_queues; q++) { - if (!test_and_set_bit(q, priv->agg_q_alloc)) { - priv->queue_to_mac80211[q] =3D mq; - return q; - } - } - - return -ENOSPC; + int q =3D find_and_set_next_bit(priv->agg_q_alloc, + priv->trans->trans_cfg->base_params->num_of_queues, + IWLAGN_FIRST_AMPDU_QUEUE); + if (q >=3D priv->trans->trans_cfg->base_params->num_of_queues) + return -ENOSPC; + + priv->queue_to_mac80211[q] =3D mq; + return q; } =20 static void iwlagn_dealloc_agg_txq(struct iwl_priv *priv, int q) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94A6BC5ACB3 for ; Sat, 18 Nov 2023 15:53:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231408AbjKRPxC (ORCPT ); Sat, 18 Nov 2023 10:53:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40800 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230216AbjKRPw3 (ORCPT ); Sat, 18 Nov 2023 10:52:29 -0500 Received: from mail-yw1-x112f.google.com (mail-yw1-x112f.google.com [IPv6:2607:f8b0:4864:20::112f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DECA11985; Sat, 18 Nov 2023 07:51:31 -0800 (PST) Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-5a7fb84f6ceso29711467b3.1; Sat, 18 Nov 2023 07:51:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322689; x=1700927489; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FWIlOk1FsRTd5Pg1eEMJS0d0MbiyZx68JIVX7B57ps0=; b=mXAB05eHIJUK3SjzKjiL/jMGPGujkItEHsnP4JJFtHV57ZvtkIiEdaTnoDuv1Hs+PV q+RK/R0TZffv6D/9MK8vRCS/tu/WtD0ZU4maYuIQPvmu03BJRHoNnjg5bVNFBtyBBh+F pTjRxP8YTIsxyUnwv8dltoKsA6Hd6DzZbvkrNop+hsS9NicxayHvVTc5wU4w3ZY5oPvb R5Q2Ipe3rm4pvAwQolwXK2TFIKUpkc2zbbaxrRlHFo2m7rPa9Gj9HrS5Cq3/B61TBpMD Du9r4Obt9Cnfgv9N2PfJHRg8uxbiycN2uAbLYN0/uMVaT9EDs1RGmOPO6W79HNKEodfB 8Y4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322689; x=1700927489; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FWIlOk1FsRTd5Pg1eEMJS0d0MbiyZx68JIVX7B57ps0=; b=tr5nUVMepAS5806kNAfiJvw17Ug5+cV96trbomLUI6k/U/4tGwSlVYsIRRsgn+Xitt MnCq8qNrMnnavztvIBGQwvwVyD6Wt4XXDnS4WB7KFhPuGAhLEKz3pQzKt855Mc0B4Kdt /CkxHQA7+a/dKliqecawq974HYnGhdYTiuLvE7X08MmoXL//GI7cv/qwhv4s1/O/uPWm vIVwrc9/1ZPu/lgWBO7yWo4BYgNg7oRC+ORkAuLfBc7dqhvKCh8btFn+BykAjY/q3FyR gCGTMb0NYUeNgHGsv5i0e+aLxrcsjUXLlz5c7D5iDjcetI8eWMInfKyS4G543oY0D6EM IRvQ== X-Gm-Message-State: AOJu0YyRJRAOANLV/nOITrWhUmxTZRto3nmONas9CLQ74T1GXCB/1jz+ oNNTxrPgSKS1Y2jFW9osoLvNrdxtjgRcCiNI X-Google-Smtp-Source: AGHT+IGM85S4GNCgRoD8WoDgmR9Ki8qfWYn/7CM5VU5/glkxSq8H/jTUlGTWdHNMh5JLlxbaM2B3cg== X-Received: by 2002:a0d:d54e:0:b0:5a7:ba53:be73 with SMTP id x75-20020a0dd54e000000b005a7ba53be73mr2010066ywd.15.1700322689525; Sat, 18 Nov 2023 07:51:29 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id k186-20020a0dfac3000000b00559f1cb8444sm1186208ywf.70.2023.11.18.07.51.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:29 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Vitaly Kuznetsov , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , kvm@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 13/34] KVM: x86: hyper-v: optimize and cleanup kvm_hv_process_stimers() Date: Sat, 18 Nov 2023 07:50:44 -0800 Message-Id: <20231118155105.25678-14-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The function traverses stimer_pending_bitmap n a for-loop bit by bit. We can do it faster by using atomic find_and_set_bit(). While here, refactor the logic by decreasing indentation level and dropping 2nd check for stimer->config.enable. Signed-off-by: Yury Norov --- arch/x86/kvm/hyperv.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c index 238afd7335e4..460e300b558b 100644 --- a/arch/x86/kvm/hyperv.c +++ b/arch/x86/kvm/hyperv.c @@ -870,27 +870,26 @@ void kvm_hv_process_stimers(struct kvm_vcpu *vcpu) if (!hv_vcpu) return; =20 - for (i =3D 0; i < ARRAY_SIZE(hv_vcpu->stimer); i++) - if (test_and_clear_bit(i, hv_vcpu->stimer_pending_bitmap)) { - stimer =3D &hv_vcpu->stimer[i]; - if (stimer->config.enable) { - exp_time =3D stimer->exp_time; - - if (exp_time) { - time_now =3D - get_time_ref_counter(vcpu->kvm); - if (time_now >=3D exp_time) - stimer_expiration(stimer); - } - - if ((stimer->config.enable) && - stimer->count) { - if (!stimer->msg_pending) - stimer_start(stimer); - } else - stimer_cleanup(stimer); - } + for_each_test_and_clear_bit(i, hv_vcpu->stimer_pending_bitmap, + ARRAY_SIZE(hv_vcpu->stimer)) { + stimer =3D &hv_vcpu->stimer[i]; + if (!stimer->config.enable) + continue; + + exp_time =3D stimer->exp_time; + + if (exp_time) { + time_now =3D get_time_ref_counter(vcpu->kvm); + if (time_now >=3D exp_time) + stimer_expiration(stimer); } + + if (stimer->count) { + if (!stimer->msg_pending) + stimer_start(stimer); + } else + stimer_cleanup(stimer); + } } =20 void kvm_hv_vcpu_uninit(struct kvm_vcpu *vcpu) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1DDF9C5ACB3 for ; Sat, 18 Nov 2023 15:53:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231255AbjKRPxI (ORCPT ); Sat, 18 Nov 2023 10:53:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231197AbjKRPwb (ORCPT ); Sat, 18 Nov 2023 10:52:31 -0500 Received: from mail-yw1-x1134.google.com (mail-yw1-x1134.google.com [IPv6:2607:f8b0:4864:20::1134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69E641992; Sat, 18 Nov 2023 07:51:32 -0800 (PST) Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-5a877e0f0d8so32646977b3.1; Sat, 18 Nov 2023 07:51:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322691; x=1700927491; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=an+B6x9GS644FA4Rk778Y0CGpfaOfqQCwN2Xt25DKlo=; b=Rcd/ITOD2m9aVQEloHhk6b5W/g9VVxTP+FPhjUibMHhWW+UyofAYE6E6XaVsJkelaa 1FurLJpmQTQYUnOTAh0zWbO9krO0XDjwL4EVEAn3GtQ7yUqdGDDpLETHf8RYSUFv1rKF gqviN3RgiEj1Qp+Uuxmo+9oIPJbBOvRvzGeQQOV9tISy1tjFL0dHiQN0rlpUsDQddOGX EaA6OHurJPnWpPYHuibF2zCJsnHLurNrqzCmIQUEEXlo24TWwJPPFPXCMG9DXzU14Hgt Bullw6uV/qUGM4ONhmO4sCeLyyzIzzpvyQsGMrmObCPErIcy1/uidjFId4F+tlqAZqa5 mP9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322691; x=1700927491; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=an+B6x9GS644FA4Rk778Y0CGpfaOfqQCwN2Xt25DKlo=; b=VfOJabkPz1FtLH/mZcmCRAioTgckNPotClE7g9dlseGJI+TNgxph7rhwpZEDxWmvP6 T+BIGKJqBk2ZdJboGgB3tyHsGMHo4OlD20JU9IK7aDRDmC1dtgBHS2gShAOUbBXl+EVG xl+DVtkryBh4dmpAITxCB29iwidOeQ5YPkZLKR3K9b7pNf7zR71ybI6S5inGwMmiOe3o H3EiSk4ssZ2sle8a+tWbOhzB6fK+I8A/AVeSMwkLQq8Sog7mi03aayGmhqQDgTjkpkny AHeqVDj9WxvPifSCcW530EBRZSEshi3n32RAmzvG7bZAP60h8wMZvjSJ1qQiE4km1fDV 9V0Q== X-Gm-Message-State: AOJu0YzKs71rDIY0H7+VRnRtu01Yfu5301Eke8Ely9Q6lukNR2F/rqpa Y1/C1875PwYFhZWsH3d7I7OktnglCF/BvlW5 X-Google-Smtp-Source: AGHT+IHbvXN7lio1g9e2seZANV3yFJAOfMLAbKKE1aiTJhcFrm7juiKH6C+xV9/Loyma/Ox9uC7NIg== X-Received: by 2002:a0d:cb45:0:b0:5c9:3442:9c8c with SMTP id n66-20020a0dcb45000000b005c934429c8cmr941390ywd.21.1700322691140; Sat, 18 Nov 2023 07:51:31 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id i78-20020a819151000000b005a7bf9749c8sm1173851ywg.4.2023.11.18.07.51.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:30 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , linux-hyperv@vger.kernel.org, linux-pci@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 14/34] PCI: hv: switch hv_get_dom_num() to use atomic find_bit() Date: Sat, 18 Nov 2023 07:50:45 -0800 Message-Id: <20231118155105.25678-15-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The function traverses bitmap with for_each_clear_bit() just to allocate a bit atomically. We can do it better with a dedicated find_and_set_bit(). Signed-off-by: Yury Norov Reviewed-by: Michael Kelley --- drivers/pci/controller/pci-hyperv.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/p= ci-hyperv.c index 30c7dfeccb16..033b1fb7f4eb 100644 --- a/drivers/pci/controller/pci-hyperv.c +++ b/drivers/pci/controller/pci-hyperv.c @@ -3605,12 +3605,9 @@ static u16 hv_get_dom_num(u16 dom) if (test_and_set_bit(dom, hvpci_dom_map) =3D=3D 0) return dom; =20 - for_each_clear_bit(i, hvpci_dom_map, HVPCI_DOM_MAP_SIZE) { - if (test_and_set_bit(i, hvpci_dom_map) =3D=3D 0) - return i; - } + i =3D find_and_set_bit(hvpci_dom_map, HVPCI_DOM_MAP_SIZE); =20 - return HVPCI_DOM_INVALID; + return i < HVPCI_DOM_MAP_SIZE ? i : HVPCI_DOM_INVALID; } =20 /** --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3BA89C5ACB3 for ; Sat, 18 Nov 2023 15:53:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231494AbjKRPxN (ORCPT ); Sat, 18 Nov 2023 10:53:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49896 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231232AbjKRPwj (ORCPT ); Sat, 18 Nov 2023 10:52:39 -0500 Received: from mail-yw1-x112b.google.com (mail-yw1-x112b.google.com [IPv6:2607:f8b0:4864:20::112b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFA5819A8; Sat, 18 Nov 2023 07:51:34 -0800 (PST) Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-5a87ac9d245so33494857b3.3; Sat, 18 Nov 2023 07:51:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322692; x=1700927492; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JOfyysznONox9DaU39l3AImWR8KMLBN7ng9G0tjKefQ=; b=nSDKSRA5Nur2rNbS9UT+M3DyFOxmz1yxHC/uujqsK+JEEQO6nCgLIS/DkxQ7RMZ+en GmG/bsf5W0rcQrHLcawcv3wDa4Cq6rAcx0EBXARYqxfP/8RN2vm7Vylr1WMDUYzXdRWO cc9pijrEBkuVK86d8TVo4pKVFkKiVzl4HRjF572qbIGyBJDb6LqDAtQKx1ts2r5LuKiq QTSt4ESFs5M8V5UFWixhZq3/DEsQoOQUwFqaXiBsLGhYzvHuy680AEjYuec/Dpwl4Cgy NemOO+7rWdsDeAKBqIQuNJZe1Hc0IIXB7YOHgOeYRFIXrlJ48Fk/igBkerDajrCtuwC+ H0pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322692; x=1700927492; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JOfyysznONox9DaU39l3AImWR8KMLBN7ng9G0tjKefQ=; b=P+D8cf4pgVfNYcYom3qvU61hBuZsTBjehYXRSKr9RO3AfiYcVKULZhfHtCtlGMwNRy J5DYzLg+d6133ZSv+nvOc7TOsRf3b5miqHfg0LuF/4PEHu442rtMfabsR9rVySZNeYo/ zcjb5hLdsiEDvA8UBR7yJ8gGxMgXNpv2rI3JftZNB74U3/81HLbTRS1h6nGGi2HLeUYk iJKTOcnH1BKiiQZAPHKH7iVZCOJL2nLpVBYxYQiG2mVMBbkgSFfGtBJy0izuFlwi/gYA iTRx8V1VbIGAWVTIgCTRRzZNfC73B08zmsO3d7rCjDhxRFBfIRsPZJfE29X34XP4eqMu JpYw== X-Gm-Message-State: AOJu0Yw+8A9bV6lhNzHW7/hlokXO71YbmrcNAqBBC/UWmHlSU/QfnSX+ uZR5xmMSsHxkhISHL0ywAf4xQwbdgWooF6VD X-Google-Smtp-Source: AGHT+IHEZyk9JqihgHS2B3mP9PJ9Q3eYMYqRBgiVhBMf8vRNsVbFtkBfv2fF4WcVswXfbkRy7k1mFg== X-Received: by 2002:a05:6902:12:b0:dae:4dfd:f6f5 with SMTP id l18-20020a056902001200b00dae4dfdf6f5mr2240825ybh.27.1700322692315; Sat, 18 Nov 2023 07:51:32 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id d2-20020a25cd02000000b00d8679407796sm999387ybf.48.2023.11.18.07.51.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:31 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Sathya Prakash Veerichetty , Kashyap Desai , Sumit Saxena , Sreekanth Reddy , "James E.J. Bottomley" , "Martin K. Petersen" , Nilesh Javali , Manish Rangankar , GR-QLogic-Storage-Upstream@marvell.com, mpi3mr-linuxdrv.pdl@broadcom.com, linux-scsi@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 15/34] scsi: use atomic find_bit() API where appropriate Date: Sat, 18 Nov 2023 07:50:46 -0800 Message-Id: <20231118155105.25678-16-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" SCSI code opencodes atomic bit allocation/traversing generic routines. Switch it to use dedicated functions. Signed-off-by: Yury Norov --- drivers/scsi/mpi3mr/mpi3mr_os.c | 21 ++++++--------------- drivers/scsi/qedi/qedi_main.c | 9 +-------- drivers/scsi/scsi_lib.c | 5 ++--- 3 files changed, 9 insertions(+), 26 deletions(-) diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_o= s.c index 040031eb0c12..11139a2008fd 100644 --- a/drivers/scsi/mpi3mr/mpi3mr_os.c +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c @@ -2276,13 +2276,9 @@ static void mpi3mr_dev_rmhs_send_tm(struct mpi3mr_io= c *mrioc, u16 handle, if (drv_cmd) goto issue_cmd; do { - cmd_idx =3D find_first_zero_bit(mrioc->devrem_bitmap, - MPI3MR_NUM_DEVRMCMD); - if (cmd_idx < MPI3MR_NUM_DEVRMCMD) { - if (!test_and_set_bit(cmd_idx, mrioc->devrem_bitmap)) - break; - cmd_idx =3D MPI3MR_NUM_DEVRMCMD; - } + cmd_idx =3D find_and_set_bit(mrioc->devrem_bitmap, MPI3MR_NUM_DEVRMCMD); + if (cmd_idx < MPI3MR_NUM_DEVRMCMD) + break; } while (retrycount--); =20 if (cmd_idx >=3D MPI3MR_NUM_DEVRMCMD) { @@ -2417,14 +2413,9 @@ static void mpi3mr_send_event_ack(struct mpi3mr_ioc = *mrioc, u8 event, "sending event ack in the top half for event(0x%02x), event_ctx(0x%08= x)\n", event, event_ctx); do { - cmd_idx =3D find_first_zero_bit(mrioc->evtack_cmds_bitmap, - MPI3MR_NUM_EVTACKCMD); - if (cmd_idx < MPI3MR_NUM_EVTACKCMD) { - if (!test_and_set_bit(cmd_idx, - mrioc->evtack_cmds_bitmap)) - break; - cmd_idx =3D MPI3MR_NUM_EVTACKCMD; - } + cmd_idx =3D find_and_set_bit(mrioc->evtack_cmds_bitmap, MPI3MR_NUM_EVTAC= KCMD); + if (cmd_idx < MPI3MR_NUM_EVTACKCMD) + break; } while (retrycount--); =20 if (cmd_idx >=3D MPI3MR_NUM_EVTACKCMD) { diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c index cd0180b1f5b9..2f940c6898ef 100644 --- a/drivers/scsi/qedi/qedi_main.c +++ b/drivers/scsi/qedi/qedi_main.c @@ -1824,20 +1824,13 @@ int qedi_get_task_idx(struct qedi_ctx *qedi) { s16 tmp_idx; =20 -again: - tmp_idx =3D find_first_zero_bit(qedi->task_idx_map, - MAX_ISCSI_TASK_ENTRIES); + tmp_idx =3D find_and_set_bit(qedi->task_idx_map, MAX_ISCSI_TASK_ENTRIES); =20 if (tmp_idx >=3D MAX_ISCSI_TASK_ENTRIES) { QEDI_ERR(&qedi->dbg_ctx, "FW task context pool is full.\n"); tmp_idx =3D -1; - goto err_idx; } =20 - if (test_and_set_bit(tmp_idx, qedi->task_idx_map)) - goto again; - -err_idx: return tmp_idx; } =20 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index cf3864f72093..4460a37f4864 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -2499,9 +2499,8 @@ void scsi_evt_thread(struct work_struct *work) =20 sdev =3D container_of(work, struct scsi_device, event_work); =20 - for (evt_type =3D SDEV_EVT_FIRST; evt_type <=3D SDEV_EVT_LAST; evt_type++) - if (test_and_clear_bit(evt_type, sdev->pending_events)) - sdev_evt_send_simple(sdev, evt_type, GFP_KERNEL); + for_each_test_and_clear_bit(evt_type, sdev->pending_events, SDEV_EVT_LAST) + sdev_evt_send_simple(sdev, evt_type, GFP_KERNEL); =20 while (1) { struct scsi_event *evt; --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D9241C5ACB3 for ; Sat, 18 Nov 2023 15:53:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230077AbjKRPxQ (ORCPT ); Sat, 18 Nov 2023 10:53:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230358AbjKRPwk (ORCPT ); Sat, 18 Nov 2023 10:52:40 -0500 Received: from mail-yb1-xb31.google.com (mail-yb1-xb31.google.com [IPv6:2607:f8b0:4864:20::b31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8269119B4 for ; Sat, 18 Nov 2023 07:51:35 -0800 (PST) Received: by mail-yb1-xb31.google.com with SMTP id 3f1490d57ef6-dafe04717baso2735378276.1 for ; Sat, 18 Nov 2023 07:51:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322694; x=1700927494; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2sgPttQUTNTuJ1Gv7B+hCylz5123eQWSPdiwCHEz6H8=; b=PoNIotFYnRO1vakd/M6VycSkD3A4sX/1tLnMXtRJOaid3l8nMRfWklAhxIiJcPKWWR +/VSe19s7rJwBZ7K8p04nY28F1C3gs2X6WtZxvKnFg5+eBNFe9oB/9L2ramKlhqDK9JS Caxb/ExO62CG+9lULE455pTIgthCmBJ8Pa/BzsVG3p2Y7irAjFjTO379nGv+zARdCM2q AtsvsaP7b/FbxTOfE3slsJ3yH11bI0qKWOreP8NP/RmgNCXUROVZLMbhrE889LLqmMJf LeAijksAPm6a5qJ3UT87Hzyi6xIlEez5TuMBG+wJMevNlpWHyHjRxS3xW1l10kNzKPyy kc6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322694; x=1700927494; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2sgPttQUTNTuJ1Gv7B+hCylz5123eQWSPdiwCHEz6H8=; b=eJxp+j/f2xSes4ranWypt0XOVJam0eYhTiHDUQIPNXLzva7/3XtqPbSakKpxQvFINg jpuzlMvmC3yP7A+uMNqlAoZfhBP5PiwamYM35Nl4yeJ1JrnDe64KdCoMVrEjaFp3CJN8 hCh+acpINwVxy9e/ASVanpdacvNYqhjzLa3Tla0KFYSHL7sjwpSY5ix5vVH7+9xon1h5 PIEPj5cWWV9fM5rnPqBSXtXWPMJLPC2vW4LuKQD3xzHHrDfv1Gmo05/NE73xS9Z0ZpJI 0f1acIkLK57qEDMMI4yA9d508EQWEcAO79VMrdd4K8oZZ33BYotuygsYp/IodBTBTc/T SCtQ== X-Gm-Message-State: AOJu0Ywv3KI2X5X/k2yYtd1RqZ6mSStc7n4pRYCFC/NBKGx43jdXDitY Q4STSBT77ONNjw05xFVZ9y+Y3B7BcKxLjH3A X-Google-Smtp-Source: AGHT+IH3c8eQ4c+uzbxwI+kH3hUCZgJt3MgED5/a9/Dtof5xSXMrcPkxFIL9d3IXLZ+C5ahKbRF/xw== X-Received: by 2002:a25:6d44:0:b0:da0:9735:b012 with SMTP id i65-20020a256d44000000b00da09735b012mr2056422ybc.11.1700322693911; Sat, 18 Nov 2023 07:51:33 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id u14-20020a05690201ce00b00d7b8a1074d4sm967654ybh.57.2023.11.18.07.51.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:33 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Michael Ellerman , Nicholas Piggin , Christophe Leroy , Yury Norov , Colin Ian King , linuxppc-dev@lists.ozlabs.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 16/34] powerpc: use atomic find_bit() API where appropriate Date: Sat, 18 Nov 2023 07:50:47 -0800 Message-Id: <20231118155105.25678-17-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Fix opencoded find_and_{set,clear}_bit() by using dedicated functions. Signed-off-by: Yury Norov --- arch/powerpc/mm/book3s32/mmu_context.c | 10 ++--- arch/powerpc/platforms/pasemi/dma_lib.c | 45 +++++----------------- arch/powerpc/platforms/powernv/pci-sriov.c | 12 ++---- 3 files changed, 17 insertions(+), 50 deletions(-) diff --git a/arch/powerpc/mm/book3s32/mmu_context.c b/arch/powerpc/mm/book3= s32/mmu_context.c index 1922f9a6b058..7db19f173c2e 100644 --- a/arch/powerpc/mm/book3s32/mmu_context.c +++ b/arch/powerpc/mm/book3s32/mmu_context.c @@ -50,13 +50,11 @@ static unsigned long context_map[LAST_CONTEXT / BITS_PE= R_LONG + 1]; =20 unsigned long __init_new_context(void) { - unsigned long ctx =3D next_mmu_context; + unsigned long ctx; =20 - while (test_and_set_bit(ctx, context_map)) { - ctx =3D find_next_zero_bit(context_map, LAST_CONTEXT+1, ctx); - if (ctx > LAST_CONTEXT) - ctx =3D 0; - } + ctx =3D find_and_set_next_bit(context_map, LAST_CONTEXT + 1, next_mmu_con= text); + if (ctx > LAST_CONTEXT) + ctx =3D 0; next_mmu_context =3D (ctx + 1) & LAST_CONTEXT; =20 return ctx; diff --git a/arch/powerpc/platforms/pasemi/dma_lib.c b/arch/powerpc/platfor= ms/pasemi/dma_lib.c index 1be1f18f6f09..906dabee0132 100644 --- a/arch/powerpc/platforms/pasemi/dma_lib.c +++ b/arch/powerpc/platforms/pasemi/dma_lib.c @@ -118,14 +118,9 @@ static int pasemi_alloc_tx_chan(enum pasemi_dmachan_ty= pe type) limit =3D MAX_TXCH; break; } -retry: - bit =3D find_next_bit(txch_free, MAX_TXCH, start); - if (bit >=3D limit) - return -ENOSPC; - if (!test_and_clear_bit(bit, txch_free)) - goto retry; - - return bit; + + bit =3D find_and_clear_next_bit(txch_free, MAX_TXCH, start); + return bit < limit ? bit : -ENOSPC; } =20 static void pasemi_free_tx_chan(int chan) @@ -136,15 +131,9 @@ static void pasemi_free_tx_chan(int chan) =20 static int pasemi_alloc_rx_chan(void) { - int bit; -retry: - bit =3D find_first_bit(rxch_free, MAX_RXCH); - if (bit >=3D MAX_TXCH) - return -ENOSPC; - if (!test_and_clear_bit(bit, rxch_free)) - goto retry; - - return bit; + int bit =3D find_and_clear_bit(rxch_free, MAX_RXCH); + + return bit < MAX_TXCH ? bit : -ENOSPC; } =20 static void pasemi_free_rx_chan(int chan) @@ -374,16 +363,9 @@ EXPORT_SYMBOL(pasemi_dma_free_buf); */ int pasemi_dma_alloc_flag(void) { - int bit; + int bit =3D find_and_clear_bit(flags_free, MAX_FLAGS); =20 -retry: - bit =3D find_first_bit(flags_free, MAX_FLAGS); - if (bit >=3D MAX_FLAGS) - return -ENOSPC; - if (!test_and_clear_bit(bit, flags_free)) - goto retry; - - return bit; + return bit < MAX_FLAGS ? bit : -ENOSPC; } EXPORT_SYMBOL(pasemi_dma_alloc_flag); =20 @@ -439,16 +421,9 @@ EXPORT_SYMBOL(pasemi_dma_clear_flag); */ int pasemi_dma_alloc_fun(void) { - int bit; - -retry: - bit =3D find_first_bit(fun_free, MAX_FLAGS); - if (bit >=3D MAX_FLAGS) - return -ENOSPC; - if (!test_and_clear_bit(bit, fun_free)) - goto retry; + int bit =3D find_and_clear_bit(fun_free, MAX_FLAGS); =20 - return bit; + return bit < MAX_FLAGS ? bit : -ENOSPC; } EXPORT_SYMBOL(pasemi_dma_alloc_fun); =20 diff --git a/arch/powerpc/platforms/powernv/pci-sriov.c b/arch/powerpc/plat= forms/powernv/pci-sriov.c index 59882da3e742..640e387e6d83 100644 --- a/arch/powerpc/platforms/powernv/pci-sriov.c +++ b/arch/powerpc/platforms/powernv/pci-sriov.c @@ -397,18 +397,12 @@ static int64_t pnv_ioda_map_m64_single(struct pnv_phb= *phb, =20 static int pnv_pci_alloc_m64_bar(struct pnv_phb *phb, struct pnv_iov_data = *iov) { - int win; + int win =3D find_and_set_bit(&phb->ioda.m64_bar_alloc, phb->ioda.m64_bar_= idx + 1); =20 - do { - win =3D find_next_zero_bit(&phb->ioda.m64_bar_alloc, - phb->ioda.m64_bar_idx + 1, 0); - - if (win >=3D phb->ioda.m64_bar_idx + 1) - return -1; - } while (test_and_set_bit(win, &phb->ioda.m64_bar_alloc)); + if (win >=3D phb->ioda.m64_bar_idx + 1) + return -1; =20 set_bit(win, iov->used_m64_bar_mask); - return win; } =20 --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BB6C8C5ACB3 for ; Sat, 18 Nov 2023 15:53:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231622AbjKRPxV (ORCPT ); Sat, 18 Nov 2023 10:53:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49986 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231288AbjKRPwk (ORCPT ); Sat, 18 Nov 2023 10:52:40 -0500 Received: from mail-yw1-x112c.google.com (mail-yw1-x112c.google.com [IPv6:2607:f8b0:4864:20::112c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 754D719BD; Sat, 18 Nov 2023 07:51:36 -0800 (PST) Received: by mail-yw1-x112c.google.com with SMTP id 00721157ae682-5a7c011e113so33664547b3.1; Sat, 18 Nov 2023 07:51:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322695; x=1700927495; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=V1XoIiNxFuF4VYuiH6Quz1F4aXv1fFJNE5bF8jDHsU4=; b=hlKddV1ZThbFGBIC3Mt4kcl4GyJ6WPC/E2l6MGw6iT0VsfvIkpHSIuiOarggBOOO0y Am+PaVm4CA4E5s/3Eb28ojrSfeCLeg3exTbaFqIcS3wE3TWSvztmHCy1FwSF/uyc9Ikm COrJMc9H+GWinvC8IFslYeXIr14KBnQcHzNgqwXx18LIupRp41+SG7x39nj74EyCM0Py 4BhDe96uNH5lpWVXXArerd5A07PHBsiPoHf6eoUj23jqrHNdZIvauee3J41KhQKInOOW vI1QmI+H4ZPK6S660VXQDodbS9IF6yzvX2Oxp8v5nP90Hr+A8C5wt57TjtDtQAlTeguC 2mKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322695; x=1700927495; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=V1XoIiNxFuF4VYuiH6Quz1F4aXv1fFJNE5bF8jDHsU4=; b=eptNtO0BX6DJEuznzkoLGDykQeLE0tKOWtvJQDMGdPYefPYCIinjiBXQLf3i7s6H1f Gvln745/1tQZZ35MXbTW6Z0g6is2ekdvVEAvcZzDu8sYOP5PyJdkt1WgebhmBAMkMwwy AI6G7W24FuXTRySY0yNadt8Uk2hCkDki5mzlNKhjlj25qiC3k3SgoI8zngUWmeUo4rH/ /hmNAwUySOKv0w735WXCJ+8zmmYjPpUYtXTBfILzQCDiUBFs7l8ZbhfvaDOgCsKO466u ASY339EhNmZ0wWDje725zYc53OZTx/wWzNdBYRLuH8UMFD2bpnxuJoRTii2k/AUgsSFI /n9A== X-Gm-Message-State: AOJu0YxiA1/BXZyKiyQp5RhGISo5lhGwUcDLryN9K0onFfBmXZRrLuC+ 9L9AcrxuZ5zGmEopMP++FqtcCV8LLYGrgdvJ X-Google-Smtp-Source: AGHT+IEY1WAEs4kNKd75UVdANlei8VDfd1gVdWYThj+rx1F0zxh+1GBN8rubfJYMqdp79r+pN+9YDQ== X-Received: by 2002:a81:8447:0:b0:5a7:a81d:e410 with SMTP id u68-20020a818447000000b005a7a81de410mr3105570ywf.18.1700322695050; Sat, 18 Nov 2023 07:51:35 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id h12-20020a816c0c000000b005c5a3f80239sm1158114ywc.88.2023.11.18.07.51.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:34 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Will Deacon , Robin Murphy , Joerg Roedel , Andy Gross , Bjorn Andersson , Konrad Dybcio , Yury Norov , linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-arm-msm@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 17/34] iommu: use atomic find_bit() API where appropriate Date: Sat, 18 Nov 2023 07:50:48 -0800 Message-Id: <20231118155105.25678-18-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Fix opencoded find_and_set_next_bit() in __arm_smmu_alloc_bitmap() and msm_iommu_alloc_ctx(), and make them nice one-liner wrappers. While here, refactor msm_iommu_attach_dev() and msm_iommu_alloc_ctx() so that error codes don't mismatch. Signed-off-by: Yury Norov --- drivers/iommu/arm/arm-smmu/arm-smmu.h | 10 ++-------- drivers/iommu/msm_iommu.c | 18 ++++-------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.h b/drivers/iommu/arm/arm-= smmu/arm-smmu.h index 703fd5817ec1..004a4704ebf1 100644 --- a/drivers/iommu/arm/arm-smmu/arm-smmu.h +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.h @@ -453,15 +453,9 @@ struct arm_smmu_impl { =20 static inline int __arm_smmu_alloc_bitmap(unsigned long *map, int start, i= nt end) { - int idx; + int idx =3D find_and_set_next_bit(map, end, start); =20 - do { - idx =3D find_next_zero_bit(map, end, start); - if (idx =3D=3D end) - return -ENOSPC; - } while (test_and_set_bit(idx, map)); - - return idx; + return idx < end ? idx : -ENOSPC; } =20 static inline void __iomem *arm_smmu_page(struct arm_smmu_device *smmu, in= t n) diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c index f86af9815d6f..67124f4228b1 100644 --- a/drivers/iommu/msm_iommu.c +++ b/drivers/iommu/msm_iommu.c @@ -185,17 +185,9 @@ static const struct iommu_flush_ops msm_iommu_flush_op= s =3D { .tlb_add_page =3D __flush_iotlb_page, }; =20 -static int msm_iommu_alloc_ctx(unsigned long *map, int start, int end) +static int msm_iommu_alloc_ctx(struct msm_iommu_dev *iommu) { - int idx; - - do { - idx =3D find_next_zero_bit(map, end, start); - if (idx =3D=3D end) - return -ENOSPC; - } while (test_and_set_bit(idx, map)); - - return idx; + return find_and_set_bit(iommu->context_map, iommu->ncb); } =20 static void msm_iommu_free_ctx(unsigned long *map, int idx) @@ -418,10 +410,8 @@ static int msm_iommu_attach_dev(struct iommu_domain *d= omain, struct device *dev) ret =3D -EEXIST; goto fail; } - master->num =3D - msm_iommu_alloc_ctx(iommu->context_map, - 0, iommu->ncb); - if (IS_ERR_VALUE(master->num)) { + master->num =3D msm_iommu_alloc_ctx(iommu); + if (master->num >=3D iommu->ncb) { ret =3D -ENODEV; goto fail; } --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6571C2BB3F for ; Sat, 18 Nov 2023 15:53:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231315AbjKRPxj (ORCPT ); Sat, 18 Nov 2023 10:53:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229480AbjKRPwn (ORCPT ); Sat, 18 Nov 2023 10:52:43 -0500 Received: from mail-yw1-x112a.google.com (mail-yw1-x112a.google.com [IPv6:2607:f8b0:4864:20::112a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 765A2D58; Sat, 18 Nov 2023 07:51:37 -0800 (PST) Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-5c9adcaf514so405017b3.2; Sat, 18 Nov 2023 07:51:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322696; x=1700927496; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=X35XMuOkQGRdZiwlzwdQZgjDPtyUYCVaMlOgAQr4CJI=; b=Zxvk2SQ2TdWAKA7Wv5MzEaJezJmEcN2rcF2SkfgbS5YuiJd6L5S23PmiwXpjZyE0/G hikIQFfpvqVVy2YKm3u3dnMMi+p0fKJ0kSHGbTQ3lGkDLzR75nnRcILlrZIgkeO3DSyw 3cDAB1lNohNnAQTDUXZz9g7G3JfaxW2hXsD5EMOsqc2rYrjxEuzjiv+1n8YOorCzC+EE UE2dWl1llANf6D5P5n/VheWWZCzrZwO8thOMAXPjm7By55LjQPf791oSOItviPs9JXfj Fl0l5uqtfSC8nNMZRqnjUnUF49mdCcfquaFEHstRQeYJOS8Cq3PWs5Bp31RoGxjjDB5O XYUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322696; x=1700927496; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=X35XMuOkQGRdZiwlzwdQZgjDPtyUYCVaMlOgAQr4CJI=; b=jH96M27GtpaMUlix3CdFYCsYagsGJng1oNeVdZFmQp2vbjJemDB/4TZ51JgWjcIqLd uHfffyxJ0s1JrscxnUezxpoA1e2wrspu8b/d+8gLMf1Ebq8Nq/aWZmHf0P+OxQPW6guW zX4kHrpWm7baOoCCI3EmzlWSP8h/kY762mNKQVyjJE9+ukQWLTvR7P9RkDOuX5NFSR+X Xu1386e5vH9NkgYSFyXIhTFS1d1x3w0GUrrIjACJc2b+IDWG7RI0r1wiWFeyz8tq+14r cepecTd4RGuU9mLokeLOUi7PpZI66EtGjnmXaqUboeCF/8HguNjRuibUEPOcJGPGYdb+ 0nsw== X-Gm-Message-State: AOJu0Yyeh6OhiQLXzwpLmdCrbCpUYjD2MjMHdzAI0jVca7eyQmlMuqpY IJK8kXgKrNQSQNTDq8epBzr+OKL6Bovhu5+j X-Google-Smtp-Source: AGHT+IHAhvZBoGNxpPDB2BCWYJwaK4V04ZOAMY/osneEuJm+eKrAFTeb+/vBc80W6VqFpHOGlnjhyA== X-Received: by 2002:a81:a141:0:b0:5a7:b819:648f with SMTP id y62-20020a81a141000000b005a7b819648fmr2715402ywg.4.1700322696135; Sat, 18 Nov 2023 07:51:36 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id b65-20020a0dd944000000b005a8c392f498sm1167744ywe.82.2023.11.18.07.51.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:35 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Hans Verkuil , Mauro Carvalho Chehab , linux-media@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 18/34] media: radio-shark: use atomic find_bit() API where appropriate Date: Sat, 18 Nov 2023 07:50:49 -0800 Message-Id: <20231118155105.25678-19-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Despite that it's only 2- or 3-bit maps, convert for-loop followed by test_bit() to for_each_test_and_clear_bit() as it makes the code cleaner. Signed-off-by: Yury Norov --- drivers/media/radio/radio-shark.c | 5 +---- drivers/media/radio/radio-shark2.c | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/media/radio/radio-shark.c b/drivers/media/radio/radio-= shark.c index 127a3be0e0f0..0c50b3a9623e 100644 --- a/drivers/media/radio/radio-shark.c +++ b/drivers/media/radio/radio-shark.c @@ -158,10 +158,7 @@ static void shark_led_work(struct work_struct *work) container_of(work, struct shark_device, led_work); int i, res, brightness, actual_len; =20 - for (i =3D 0; i < 3; i++) { - if (!test_and_clear_bit(i, &shark->brightness_new)) - continue; - + for_each_test_and_clear_bit(i, &shark->brightness_new, 3) { brightness =3D atomic_read(&shark->brightness[i]); memset(shark->transfer_buffer, 0, TB_LEN); if (i !=3D RED_LED) { diff --git a/drivers/media/radio/radio-shark2.c b/drivers/media/radio/radio= -shark2.c index f1c5c0a6a335..d9ef241e1778 100644 --- a/drivers/media/radio/radio-shark2.c +++ b/drivers/media/radio/radio-shark2.c @@ -145,10 +145,7 @@ static void shark_led_work(struct work_struct *work) container_of(work, struct shark_device, led_work); int i, res, brightness, actual_len; =20 - for (i =3D 0; i < 2; i++) { - if (!test_and_clear_bit(i, &shark->brightness_new)) - continue; - + for_each_test_and_clear_bit(i, &shark->brightness_new, 2) { brightness =3D atomic_read(&shark->brightness[i]); memset(shark->transfer_buffer, 0, TB_LEN); shark->transfer_buffer[0] =3D 0x83 + i; --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EB36C2BB3F for ; Sat, 18 Nov 2023 15:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230522AbjKRPxo (ORCPT ); Sat, 18 Nov 2023 10:53:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231361AbjKRPws (ORCPT ); Sat, 18 Nov 2023 10:52:48 -0500 Received: from mail-yb1-xb29.google.com (mail-yb1-xb29.google.com [IPv6:2607:f8b0:4864:20::b29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A799F1BD4; Sat, 18 Nov 2023 07:51:39 -0800 (PST) Received: by mail-yb1-xb29.google.com with SMTP id 3f1490d57ef6-da819902678so2850616276.1; Sat, 18 Nov 2023 07:51:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322698; x=1700927498; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MVDnPRtaRLazzNSQqeYFzsOLIVc3PVHkJ3Smdo81+fM=; b=fH6IUlnKl+XJ2/OuYFTx23RstVGtGSlGFQ/3+xlroLXDu1iCWEociJ0i4qjs+HhfEO aOtwuhCaKCn7N8R9ulrKmvt4zGkgL7KmefwSS7195RiI72CX5L4ijY+RYDxqavdqTV+p +QBshJ9+oMGQvxhCvauk98tZur/evaRPmpJsAoCYoZy2Tb5OKqqszoCNwuVCMnlNDyli qzi6MZ7EwJpElz7mSyM11yFwcUpU3M5Yju7pLfZz6aS11EsbRQG4Hq6lYFslYBY8w/Vx atEKoMayU0rr/A8RMw6MDDnGuHW/QKvL/5CqcjIqhRyTfjN8X/8v9tbPw+v3CbFo914V OpxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322698; x=1700927498; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MVDnPRtaRLazzNSQqeYFzsOLIVc3PVHkJ3Smdo81+fM=; b=eUFVJ/I3c6HsTpn6yVhaxaa7ggfFTiZExzEdL7k7TgltVCHgxwh9Te/HU78iWKbNef mvYGpGLKhqbwhMW8N/QUQSlS7YtLLMXBK65rqTWi/lhcD4FwlV2DX5znt8tJK7fPMkTZ ZUE7Ts7WF5tDXSbLRy1rta/I9Bxi/wWkK7IGbvPwoZsFpSj6jchUjyk/TuxU6a1TIVgR ACu4e8F+lCT048CmIXf3gsEojWBWFOYtu9Z1Opoa2FP6E+ufNxZ/LAEwOMrRN2UyvhqA 4fA7zV9ii6twWTk/e36KL4DlVVlw83h3NLHSFA06h6x/ap4/lXzEs96JkfnBfhld1M5e JZIQ== X-Gm-Message-State: AOJu0Yzqtkc6PYBlKcP3kf941lOT5TJm9olg/hXHoEGSDc/VUGGDCHrU zMT0iZtmxUCJd8Iouv9yl57hLl6jOgbN8Ok7 X-Google-Smtp-Source: AGHT+IFtv4Y5M+sXZKP4hY/boWna7OBaMWOrVT2d9mWQ309PzUbuFpqsDSmyQwNUVJs/HTlum9QHAQ== X-Received: by 2002:a5b:a12:0:b0:d9a:ba25:d1f9 with SMTP id k18-20020a5b0a12000000b00d9aba25d1f9mr2149118ybq.9.1700322697688; Sat, 18 Nov 2023 07:51:37 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id b79-20020a253452000000b00da076458395sm998958yba.43.2023.11.18.07.51.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:36 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Edward Cree , Martin Habets , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Yury Norov , netdev@vger.kernel.org, linux-net-drivers@amd.com Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 19/34] sfc: switch to using atomic find_bit() API where appropriate Date: Sat, 18 Nov 2023 07:50:50 -0800 Message-Id: <20231118155105.25678-20-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" SFC code traverses rps_slot_map and rxq_retry_mask bit by bit. We can do it better by using dedicated atomic find_bit() functions, because they skip already clear bits. Signed-off-by: Yury Norov Reviewed-by: Edward Cree --- drivers/net/ethernet/sfc/rx_common.c | 4 +--- drivers/net/ethernet/sfc/siena/rx_common.c | 4 +--- drivers/net/ethernet/sfc/siena/siena_sriov.c | 14 ++++++-------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/sfc/rx_common.c b/drivers/net/ethernet/sf= c/rx_common.c index d2f35ee15eff..0112968b3fe7 100644 --- a/drivers/net/ethernet/sfc/rx_common.c +++ b/drivers/net/ethernet/sfc/rx_common.c @@ -950,9 +950,7 @@ int efx_filter_rfs(struct net_device *net_dev, const st= ruct sk_buff *skb, int rc; =20 /* find a free slot */ - for (slot_idx =3D 0; slot_idx < EFX_RPS_MAX_IN_FLIGHT; slot_idx++) - if (!test_and_set_bit(slot_idx, &efx->rps_slot_map)) - break; + slot_idx =3D find_and_set_bit(&efx->rps_slot_map, EFX_RPS_MAX_IN_FLIGHT); if (slot_idx >=3D EFX_RPS_MAX_IN_FLIGHT) return -EBUSY; =20 diff --git a/drivers/net/ethernet/sfc/siena/rx_common.c b/drivers/net/ether= net/sfc/siena/rx_common.c index 4579f43484c3..160b16aa7486 100644 --- a/drivers/net/ethernet/sfc/siena/rx_common.c +++ b/drivers/net/ethernet/sfc/siena/rx_common.c @@ -958,9 +958,7 @@ int efx_siena_filter_rfs(struct net_device *net_dev, co= nst struct sk_buff *skb, int rc; =20 /* find a free slot */ - for (slot_idx =3D 0; slot_idx < EFX_RPS_MAX_IN_FLIGHT; slot_idx++) - if (!test_and_set_bit(slot_idx, &efx->rps_slot_map)) - break; + slot_idx =3D find_and_set_bit(&efx->rps_slot_map, EFX_RPS_MAX_IN_FLIGHT); if (slot_idx >=3D EFX_RPS_MAX_IN_FLIGHT) return -EBUSY; =20 diff --git a/drivers/net/ethernet/sfc/siena/siena_sriov.c b/drivers/net/eth= ernet/sfc/siena/siena_sriov.c index 8353c15dc233..554b799288b8 100644 --- a/drivers/net/ethernet/sfc/siena/siena_sriov.c +++ b/drivers/net/ethernet/sfc/siena/siena_sriov.c @@ -722,14 +722,12 @@ static int efx_vfdi_fini_all_queues(struct siena_vf *= vf) efx_vfdi_flush_wake(vf), timeout); rxqs_count =3D 0; - for (index =3D 0; index < count; ++index) { - if (test_and_clear_bit(index, vf->rxq_retry_mask)) { - atomic_dec(&vf->rxq_retry_count); - MCDI_SET_ARRAY_DWORD( - inbuf, FLUSH_RX_QUEUES_IN_QID_OFST, - rxqs_count, vf_offset + index); - rxqs_count++; - } + for_each_test_and_clear_bit(index, vf->rxq_retry_mask, count) { + atomic_dec(&vf->rxq_retry_count); + MCDI_SET_ARRAY_DWORD( + inbuf, FLUSH_RX_QUEUES_IN_QID_OFST, + rxqs_count, vf_offset + index); + rxqs_count++; } } =20 --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFC26C2BB3F for ; Sat, 18 Nov 2023 15:53:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231159AbjKRPx7 (ORCPT ); Sat, 18 Nov 2023 10:53:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231157AbjKRPwx (ORCPT ); Sat, 18 Nov 2023 10:52:53 -0500 Received: from mail-yw1-x1136.google.com (mail-yw1-x1136.google.com [IPv6:2607:f8b0:4864:20::1136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69A9310F7; Sat, 18 Nov 2023 07:51:41 -0800 (PST) Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-5c9169300caso5651217b3.2; Sat, 18 Nov 2023 07:51:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322699; x=1700927499; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KH/C2GbGilv4dEVGrlEtm1neXP6vUXqVIR2w3PMGoMU=; b=l1wglQacW5bOp1InX5DIoQdvtQBnkVSQYzCPO11Q64OYnQnkYSOLykca4riSKSiBkk E0BU9SRbJi+7G8534ABotGg3Mi4jtFnH7arCjWR/tcvS0LpKeEm0ct1F0IpC06WMJgC1 24PVVzDzyCB2fwWj+cN2t2tu7ddqB4tf0JH+ArX30sMP+e6A5xoXjQemJnzFZ9DgdeeU e/aOO+iJn/v/eQ2+nBd8kn6ROXq7O95FlDHrwCafcpeevlKZ5pv6h2WHLKra0cEXtHug GwTPHVVre3UOlyXXBJTgPB+eMq0WT++SfG3j3repoa7Z0nH2Hks66sza2TwOuzOhN7VD 4+dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322699; x=1700927499; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KH/C2GbGilv4dEVGrlEtm1neXP6vUXqVIR2w3PMGoMU=; b=VxEm2Df9RIjMC2a0y94OFs8TXVij0mgoEl7ir/ixFvKMUrF0XzMMtCfeFtzMIUYpRb oFmpjZ2Kk5+r86s5KNBEkN5WRXIVgAvW1QnJkooA19IvhX2MlZdQw8ZPC8fAmdIQKdx1 B6oRVTpg31E6h6UHm/0/9g/MSLEcG4ymS+QAehWOCs0qzXQ2aPduhUmWE9lY2/gO+1m8 c407Gli2AkKgnBJLb5HLv5cmdjfd0LIJ18Cs5zwVPdTMRs4qJY26IhRn8dtG3Dd/x3Rz bFjOOnzlOfq8vLqRB0EIdm0oTho+JcwoTx+yFMleaRzHnyVgRkvwd/1WwWtTcy5iNEAz vr0w== X-Gm-Message-State: AOJu0YzbVYSm83orr5EYTVRziJ757bp+/ifrP4F7NbhoZXmL8M32dy3l JQ465BX+rojqgqkl2hMJUmN+EchTly22GOfN X-Google-Smtp-Source: AGHT+IH8iE5pRuee+JQIvG8dc4ZEm5Lvvk2s9b3hTX2Ou24/UpkP0ESpVFcnBMmBTlDyte+avOB5TA== X-Received: by 2002:a25:ac89:0:b0:da0:c744:3211 with SMTP id x9-20020a25ac89000000b00da0c7443211mr2333419ybi.2.1700322699285; Sat, 18 Nov 2023 07:51:39 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id l129-20020a257087000000b00d8168e226e6sm1005873ybc.47.2023.11.18.07.51.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:38 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Jiri Slaby , linux-serial@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 20/34] tty: nozomi: optimize interrupt_handler() Date: Sat, 18 Nov 2023 07:50:51 -0800 Message-Id: <20231118155105.25678-21-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In exit path of interrupt_handler(), dc->flip map is traversed bit by bit to find and clear set bits and call tty_flip_buffer_push() for corresponding ports. We can do it better by using for_each_test_and_clear_bit(), because it skips already clear bits. Signed-off-by: Yury Norov --- drivers/tty/nozomi.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/tty/nozomi.c b/drivers/tty/nozomi.c index 02cd40147b3a..de0503247391 100644 --- a/drivers/tty/nozomi.c +++ b/drivers/tty/nozomi.c @@ -1220,9 +1220,8 @@ static irqreturn_t interrupt_handler(int irq, void *d= ev_id) exit_handler: spin_unlock(&dc->spin_mutex); =20 - for (a =3D 0; a < NOZOMI_MAX_PORTS; a++) - if (test_and_clear_bit(a, &dc->flip)) - tty_flip_buffer_push(&dc->port[a].port); + for_each_test_and_clear_bit(a, &dc->flip, NOZOMI_MAX_PORTS) + tty_flip_buffer_push(&dc->port[a].port); =20 return IRQ_HANDLED; none: --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 102D5C2BB3F for ; Sat, 18 Nov 2023 15:53:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230396AbjKRPxz (ORCPT ); Sat, 18 Nov 2023 10:53:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231134AbjKRPwx (ORCPT ); Sat, 18 Nov 2023 10:52:53 -0500 Received: from mail-yw1-x112f.google.com (mail-yw1-x112f.google.com [IPv6:2607:f8b0:4864:20::112f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 490D81BE7; Sat, 18 Nov 2023 07:51:42 -0800 (PST) Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-5a87ac9d245so33495957b3.3; Sat, 18 Nov 2023 07:51:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322701; x=1700927501; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xU0+DezQv+68hocsYMOkgL5EeuD6VUR6bUdseKeBvTQ=; b=dZ2UyIN3A4I+uz+Sprjt0VFFj2X1jLL9nuNKSLztr7npWIr2Wwr9XCrUOUNsY1qTds 8rkTbFjknSc3F3dFcBOhd5maeRBv1jYrtfv+w7Frs5L8gaFvgskYcb/P54v5XX/oVTaJ ZG7qKLROTfnDkmDrjNJNThlmazWaAfYEzaIQWmd0F0NOkmc5gpXXb2gke5lcxNMMm/4w 7i5nlsgTGGT13TELNRctEnXItDifjQ9UB5GHshV5gb/vX06mZJPXZruDiK548QeTMO/5 HPqXXnvTfTmaJO5Lmni60R+eYQv5LvUokaPYhqVYbvjFUPLz0aEEMOZ1yfBZ/rHPERmE qDxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322701; x=1700927501; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xU0+DezQv+68hocsYMOkgL5EeuD6VUR6bUdseKeBvTQ=; b=I7jo1eXBOJcRH97wbiZI+Ts0zwaq0W9hUk4s4hLhYqrpNTCyBR4EmlGt/WYW80yce3 1OrctUM1MXyBpR7W+Is9pVVRom40yohTbH0yzZTSzaXKqZGfs13nQPITLFgHf7XzVSiT wgl7EYTlXu/MkLXCVW5vOTs2uhb+PNM9pD1HwW3CPYv1k5I0RfPNKZSqLhI6cn+BscDo t/aiFLdYeJpjNO/visorZ8IpJYV8+nWNB8+yDpoaiAlrRNa3+y4vH2JzNA15Assa3cri XuBKpxEGkyh8om7yv0s315DzvTSoiyQyAZyrVnS/pDGcOAj3SsqHe0GP13GVTfUdpT9I P1wA== X-Gm-Message-State: AOJu0Yx+LLJpqYnfAeNVJwbUaW9IEnzim3iiyZlD05ZYoXL1F4W/s8uH YaG37nntgUQXGKqu0SVtugTfuYJURxhTuhKq X-Google-Smtp-Source: AGHT+IG6nIXVYrYe/pryLJVqS9YCy2pJ5nYZyS8QkV+6BipP7usnXBp+kFRkjKxXiPygV0miOmYDaA== X-Received: by 2002:a81:928f:0:b0:5ad:47ba:fa43 with SMTP id j137-20020a81928f000000b005ad47bafa43mr2864475ywg.35.1700322700888; Sat, 18 Nov 2023 07:51:40 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id x188-20020a8187c5000000b005af958bb2absm1157374ywf.109.2023.11.18.07.51.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:40 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Oliver Neukum , Greg Kroah-Hartman , linux-usb@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 21/34] usb: cdc-acm: optimize acm_softint() Date: Sat, 18 Nov 2023 07:50:52 -0800 Message-Id: <20231118155105.25678-22-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" acm_softint(), uses for-loop to traverse urbs_in_error_delay bitmap bit by bit to find and clear set bits. We can do it better by using for_each_test_and_clear_bit(), because it doesn't test already clear bits. Signed-off-by: Yury Norov Acked-by: Oliver Neukum --- drivers/usb/class/cdc-acm.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index a1f4e1ead97f..8664b63050b0 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -613,9 +613,8 @@ static void acm_softint(struct work_struct *work) } =20 if (test_and_clear_bit(ACM_ERROR_DELAY, &acm->flags)) { - for (i =3D 0; i < acm->rx_buflimit; i++) - if (test_and_clear_bit(i, &acm->urbs_in_error_delay)) - acm_submit_read_urb(acm, i, GFP_KERNEL); + for_each_test_and_clear_bit(i, &acm->urbs_in_error_delay, acm->rx_buflim= it) + acm_submit_read_urb(acm, i, GFP_KERNEL); } =20 if (test_and_clear_bit(EVENT_TTY_WAKEUP, &acm->flags)) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8793C5AD4C for ; Sat, 18 Nov 2023 15:53:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232726AbjKRPyB (ORCPT ); Sat, 18 Nov 2023 10:54:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231389AbjKRPxA (ORCPT ); Sat, 18 Nov 2023 10:53:00 -0500 Received: from mail-yb1-xb30.google.com (mail-yb1-xb30.google.com [IPv6:2607:f8b0:4864:20::b30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECD151BF9; Sat, 18 Nov 2023 07:51:43 -0800 (PST) Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-d9ac3b4f42cso3362107276.0; Sat, 18 Nov 2023 07:51:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322702; x=1700927502; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tg2dWT1RhFKme6yZPEIj44E7/nsRkUJhN3arViZI26M=; b=LX0Ty0bL4pMGI7gQ5d7p8EDFQ9rDmYzupxxul3h1v0ChIU2ggm3JZfJqnfaxHnlMH7 dMKNUQ+FdJFnmF5e8H4/8nAqVTSbVQOlRuUDrIwHiqXd4sg2OPukdZDT7WeNCa3sOyqI /fo3kQhSmqBcZmgZufy3bEzS8R/LGyjCWczqu6KUYr8Nj3/W9jEjt2Gdx+krsfF0SdUI rXzQKd9bZKzK1aQtcKdJQFLzr2h8crIscLZ+g+H2BZO0netk4WdH/N20fl9aXKZyyd50 TbVdX15R2F919pwplLPX9mQUAxaGk9qHABAdAlJw5fZYAXPjqWxVYZXlFUA7WUHP8b6C g9oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322702; x=1700927502; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tg2dWT1RhFKme6yZPEIj44E7/nsRkUJhN3arViZI26M=; b=IPF8W04ewcwO6sh9e9zownO9utMV4G+4Rp+V8FnsWAjJjgOkX/MduzvDBqT8VsypF1 LwQK+k9i9kQ4WqTC/b4JA4vPSqYnWFOUNZchwrcjug5OGpZ/v4sgAb+z5oV/ovuyj5l6 PFULSZ6ZAcUWw70Xt9c0DWPDM2OyCrQ1IxhBOYgXPfN8svR51mZ3Un5YaXD9oQNrzKAV YJV3j5rRmlhW3mkqj2p6TIeIU7K4k6USgM7VORprI9nczBaJXVht7YT/lt52XBNVt8FA NuETR2X3WuXonV5MocpaK9n5Arw42p4jZPPDYnetHniHOR9TkVZLo0vGZ1DFkyQGi073 3ajA== X-Gm-Message-State: AOJu0Yz2C07TxMPEY/hOyRwClLk8XJH2DDPdQzIhGUiRGtcuOwNNFi3I IpVgxBjnchWtS60v3ruwZH2BA1uz1zw+cBmi X-Google-Smtp-Source: AGHT+IGLuAbyQuCwpl0+dEJc+LhpBrFdlR1P42AFwq9mnuU8O7NnAWExHW0iaDQvbV6DL8BBzMuPMg== X-Received: by 2002:a25:ad4f:0:b0:daf:7702:fd60 with SMTP id l15-20020a25ad4f000000b00daf7702fd60mr1666669ybe.1.1700322702147; Sat, 18 Nov 2023 07:51:42 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id i10-20020a05690200ca00b00daf198ef6fbsm964572ybs.21.2023.11.18.07.51.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:41 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Jens Axboe , Damien Le Moal , Chaitanya Kulkarni , Ming Lei , Johannes Thumshirn , Chengming Zhou , Nitesh Shetty , Akinobu Mita , "Shin'ichiro Kawasaki" , Yury Norov , linux-block@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 22/34] block: null_blk: fix opencoded find_and_set_bit() in get_tag() Date: Sat, 18 Nov 2023 07:50:53 -0800 Message-Id: <20231118155105.25678-23-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" get_tag() opencodes find_and_set_bit(). Switch the code to use the dedicated function, and get rid of get_tag entirely. Signed-off-by: Yury Norov --- drivers/block/null_blk/main.c | 41 +++++++++++------------------------ 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c index 22a3cf7f32e2..a41d146663e1 100644 --- a/drivers/block/null_blk/main.c +++ b/drivers/block/null_blk/main.c @@ -760,19 +760,6 @@ static void put_tag(struct nullb_queue *nq, unsigned i= nt tag) wake_up(&nq->wait); } =20 -static unsigned int get_tag(struct nullb_queue *nq) -{ - unsigned int tag; - - do { - tag =3D find_first_zero_bit(nq->tag_map, nq->queue_depth); - if (tag >=3D nq->queue_depth) - return -1U; - } while (test_and_set_bit_lock(tag, nq->tag_map)); - - return tag; -} - static void free_cmd(struct nullb_cmd *cmd) { put_tag(cmd->nq, cmd->tag); @@ -782,24 +769,22 @@ static enum hrtimer_restart null_cmd_timer_expired(st= ruct hrtimer *timer); =20 static struct nullb_cmd *__alloc_cmd(struct nullb_queue *nq) { + unsigned int tag =3D find_and_set_bit_lock(nq->tag_map, nq->queue_depth); struct nullb_cmd *cmd; - unsigned int tag; - - tag =3D get_tag(nq); - if (tag !=3D -1U) { - cmd =3D &nq->cmds[tag]; - cmd->tag =3D tag; - cmd->error =3D BLK_STS_OK; - cmd->nq =3D nq; - if (nq->dev->irqmode =3D=3D NULL_IRQ_TIMER) { - hrtimer_init(&cmd->timer, CLOCK_MONOTONIC, - HRTIMER_MODE_REL); - cmd->timer.function =3D null_cmd_timer_expired; - } - return cmd; + + if (tag >=3D nq->queue_depth) + return NULL; + + cmd =3D &nq->cmds[tag]; + cmd->tag =3D tag; + cmd->error =3D BLK_STS_OK; + cmd->nq =3D nq; + if (nq->dev->irqmode =3D=3D NULL_IRQ_TIMER) { + hrtimer_init(&cmd->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); + cmd->timer.function =3D null_cmd_timer_expired; } =20 - return NULL; + return cmd; } =20 static struct nullb_cmd *alloc_cmd(struct nullb_queue *nq, struct bio *bio) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44AD0C5ACB3 for ; Sat, 18 Nov 2023 15:54:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231400AbjKRPyJ (ORCPT ); Sat, 18 Nov 2023 10:54:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231185AbjKRPxD (ORCPT ); Sat, 18 Nov 2023 10:53:03 -0500 Received: from mail-yw1-x112c.google.com (mail-yw1-x112c.google.com [IPv6:2607:f8b0:4864:20::112c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 348B71FC3; Sat, 18 Nov 2023 07:51:45 -0800 (PST) Received: by mail-yw1-x112c.google.com with SMTP id 00721157ae682-5a7dd65052aso33807947b3.0; Sat, 18 Nov 2023 07:51:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322703; x=1700927503; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=phxxXofFhF+VjGYxpvuhMgjdcfI/PSJyd4/4jUAT2FE=; b=a5eesQm5O5JlmTp25FdxAsMuE7ZxUbyEvxra9wNcgqF4HasdgmMdaBOnyuKe8Lni68 BNj7pLsw4KCBvmUmqH1wcclGY+yyp+l/VtGcBlXNwSjchXwTajKqO7GSzUU3sfNyrwi2 JDdg1U579Ay14OlS/8DKkiy2vSTY6Hjekkivf6NPU6/NUvzlaFpG5ZgLUUT/rYmH1gIJ dTG2LFgNy3Gp3d77fRodIlGnfSTHji9GUlt5fN0rHSjV1rRQRUhiYSnIeAdNHXyKDSR0 hpN8jcPeNdMJhikWMX/zeg/9YGO60YWSIMhLUVwMTSvm/ScIOMF4Uvg3GJYRen/7wT9n Idfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322703; x=1700927503; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=phxxXofFhF+VjGYxpvuhMgjdcfI/PSJyd4/4jUAT2FE=; b=xBmHlC75oOuWzumRnfFouqx8fPIrKuYJMhVSYBBmkjc9rSepUW/H8jCnmvswPyzjlM Y/cHDc+KOrLHAGUt7utk9Sp5mNO4o8jmdCZqFs/EzFDo5xNKDgayRYLxWJuEZWu7U7OC 1NouYGyWN+3KcA+Ihv3FYvJYYumS1UMtxTM9FzH80zGJZ8UAUx/7jlfAq16NkbcU9bnX tmmttx4hn4oc3v1UWBadGahclL8qYWh0GHSwtskcHYG4veSOKeF2BZohEs/cT7hHsVFO 9sxUkRqzsYWY9vySqU9IZ3/7c0DET9WpLttwYIw1hh0dgjrWuCcSwUz+RoW8axzLPfKN K9PQ== X-Gm-Message-State: AOJu0Yx5NEoS4oSGaUyTvKkRM6W5fKgPnjedPR4JV6sVY1MIu+SpRhrj h6SJa09wHbPDb/d4VJLb4HWMUSAAT0/HJ4Kf X-Google-Smtp-Source: AGHT+IG7xraS3i1lSLIwVNn87X3jl4n4U8OES6bJWUTWk+DaM7OZ2mTSeaQ2nJYkbf0r4npTVy6Xaw== X-Received: by 2002:a81:920e:0:b0:5a7:b036:360c with SMTP id j14-20020a81920e000000b005a7b036360cmr2839457ywg.23.1700322703364; Sat, 18 Nov 2023 07:51:43 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id t195-20020a8183cc000000b00582b239674esm1172512ywf.129.2023.11.18.07.51.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:42 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, "Md. Haris Iqbal" , Jack Wang , Jason Gunthorpe , Leon Romanovsky , linux-rdma@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 23/34] RDMA/rtrs: fix opencoded find_and_set_bit_lock() in __rtrs_get_permit() Date: Sat, 18 Nov 2023 07:50:54 -0800 Message-Id: <20231118155105.25678-24-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The function opencodes find_and_set_bit_lock() with a while-loop polling on test_and_set_bit_lock(). Use a dedicated find_and_set_bit_lock() instead. Signed-off-by: Yury Norov --- drivers/infiniband/ulp/rtrs/rtrs-clt.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ul= p/rtrs/rtrs-clt.c index 07261523c554..2f3b0ad42e8a 100644 --- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c +++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c @@ -72,18 +72,9 @@ __rtrs_get_permit(struct rtrs_clt_sess *clt, enum rtrs_c= lt_con_type con_type) struct rtrs_permit *permit; int bit; =20 - /* - * Adapted from null_blk get_tag(). Callers from different cpus may - * grab the same bit, since find_first_zero_bit is not atomic. - * But then the test_and_set_bit_lock will fail for all the - * callers but one, so that they will loop again. - * This way an explicit spinlock is not required. - */ - do { - bit =3D find_first_zero_bit(clt->permits_map, max_depth); - if (bit >=3D max_depth) - return NULL; - } while (test_and_set_bit_lock(bit, clt->permits_map)); + bit =3D find_and_set_bit_lock(clt->permits_map, max_depth); + if (bit >=3D max_depth) + return NULL; =20 permit =3D get_permit(clt, bit); WARN_ON(permit->mem_id !=3D bit); --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA900C2BB3F for ; Sat, 18 Nov 2023 15:54:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230094AbjKRPyM (ORCPT ); Sat, 18 Nov 2023 10:54:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230306AbjKRPxE (ORCPT ); Sat, 18 Nov 2023 10:53:04 -0500 Received: from mail-yw1-x1132.google.com (mail-yw1-x1132.google.com [IPv6:2607:f8b0:4864:20::1132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85E921FC6; Sat, 18 Nov 2023 07:51:46 -0800 (PST) Received: by mail-yw1-x1132.google.com with SMTP id 00721157ae682-5a86b6391e9so34000057b3.0; Sat, 18 Nov 2023 07:51:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322704; x=1700927504; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0d2eKvr3TXuVBrgKyJ84PHfbsLaO9M1lKSW9z0G3/1I=; b=CliZe3TkN7RwUCns6Euw1bJup2j6ayFXl5NT81h8uTPGUvhdBUh5diVVPsw3bAbv27 WZ2XqtPAIvvkC7CD0hD9ixz4h1RcDLrTHRS74k6yrVGcpAiwFT2AGBj0AU7of/fywI/L JTTng5KOCH3F3F3JG5l4LczIrrFtSuo46cgoPeRbag2VvuLz7te8cEiyJA9x5SqAc1kh K6jXIdOvZhFRpD6r4hAFZf6CykGW9soyWPMRYXBM86k5SaLBbiFH6ulPZlWh+Ur7AbFu SLkqGLq07GRBd3MckE6gBcEmhEzwiHsA3J+7Abja/qAvN0ewCQxmvDr8ZSfEaekFZKXm 5+TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322704; x=1700927504; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0d2eKvr3TXuVBrgKyJ84PHfbsLaO9M1lKSW9z0G3/1I=; b=v8DWeUGOsMEG/nOvZRXGtQNXetznK5b3gSHY4FMsJ8voW2KhCYXJDp74yXgG4jmx4B Wy9Gau/uMpkHhVxMJt7zmBzljsdJ+36A3OtccYlnIudugKhjJN4/BiuSvZb2ywamXYSz 2Bb6vfTV4At9BxwHjxbtLckWpxn601w2TFmsmvCcmenZ1nFPyvmWlasTvDvZYOXMMRod Cl0INW2+LHrQKCAupymrRRoYbzqyA2+cOYckP9Ra28SZEE/xp7pKkwze5ah8DWk7emD6 Bi5KUwp/U7SQ6+Uu6RBtgmkedDDa6BYDFH1KMmXnXDpRkPVoFHS34SakTDxdTL/Epbrh ctjg== X-Gm-Message-State: AOJu0Yyq9LqF2t7qh5s0Wd4QMBlkDaTzp3ujSBGrTvuYla/skZJYY73y 18FYq+3z3tuDesfzS9/tv8xd7W1czoz0mznF X-Google-Smtp-Source: AGHT+IELqoxPTAIh1lB3sdLeAXBXNyn+zXCWPkZuWXsEeemBrT9Rti9Mc1tneRNCARA0PmaLxTdqxw== X-Received: by 2002:a05:690c:2a85:b0:5af:66e7:e382 with SMTP id ek5-20020a05690c2a8500b005af66e7e382mr2522479ywb.34.1700322704464; Sat, 18 Nov 2023 07:51:44 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id q126-20020a815c84000000b005a7c829dda2sm1170423ywb.84.2023.11.18.07.51.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:44 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Karsten Keil , netdev@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 24/34] mISDN: optimize get_free_devid() Date: Sat, 18 Nov 2023 07:50:55 -0800 Message-Id: <20231118155105.25678-25-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" get_free_devid() traverses each bit in device_ids in an open-coded loop. We can do it faster by using dedicated find_and_set_bit(). It makes the whole function a nice one-liner, and because MAX_DEVICE_ID is a small constant-time value (63), on 64-bit platforms find_and_set_bit() call will be optimized to: ffs(); test_and_set_bit(). Signed-off-by: Yury Norov --- drivers/isdn/mISDN/core.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/isdn/mISDN/core.c b/drivers/isdn/mISDN/core.c index ab8513a7acd5..3f97db006cf3 100644 --- a/drivers/isdn/mISDN/core.c +++ b/drivers/isdn/mISDN/core.c @@ -197,14 +197,9 @@ get_mdevice_count(void) static int get_free_devid(void) { - u_int i; + u_int i =3D find_and_set_bit((u_long *)&device_ids, MAX_DEVICE_ID + 1); =20 - for (i =3D 0; i <=3D MAX_DEVICE_ID; i++) - if (!test_and_set_bit(i, (u_long *)&device_ids)) - break; - if (i > MAX_DEVICE_ID) - return -EBUSY; - return i; + return i <=3D MAX_DEVICE_ID ? i : -EBUSY; } =20 int --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 77338C5ACB3 for ; Sat, 18 Nov 2023 15:54:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232958AbjKRPyQ (ORCPT ); Sat, 18 Nov 2023 10:54:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230441AbjKRPxF (ORCPT ); Sat, 18 Nov 2023 10:53:05 -0500 Received: from mail-yw1-x1133.google.com (mail-yw1-x1133.google.com [IPv6:2607:f8b0:4864:20::1133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D72561FD2; Sat, 18 Nov 2023 07:51:47 -0800 (PST) Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-5a84204e7aeso33080057b3.0; Sat, 18 Nov 2023 07:51:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322706; x=1700927506; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+wZmOHN/Mg2WsccYCg7xC7qQhfAqQUan5w/+E5l83yM=; b=cioG4iq440S8UbfRh0/MZWlkYyGhkicQn7v7zVRG+6tK6pFqDhQXlCb3/U8Axte3nu nhoGZb0O4z4D9XcEMxWHkks53RfHl2N2inPX5H3K+3ZY4cO3O9bR8nsbWMAOKzvUl7m4 bp7nrP4mQ23b7742UAG6wQUQMkb9VzNV9sTijPlxOm680tpPlauMRaK3wg039To86Iii 6lVkJ+4KkYI5K8LzhFU//cOCRK/qO1eceR6oawjQj5tSL+zxyboPsGi5ub312TMS1MEB FOxI4zFhncEw0O2kSbIeUysYeeJYmLWwvtVQRAjV7fb0yZVpV+s/pM29qz9zQMy0BaZv 5pOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322706; x=1700927506; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+wZmOHN/Mg2WsccYCg7xC7qQhfAqQUan5w/+E5l83yM=; b=TZFdpTxEA7HZI+e1/e8+/xaNziTNx1yxHA9+xxMvNisafaSa/0HQTvqKo1BbkeXqsj /Yx+DG3JBwDKsLGMXWuwuPYDFm1nZiQ+wyFs6m7XGcZW3/cI0hSqiIXQD/lOipOMhdVa jLMLYT/BKWj/RxcQro6NZGvD68R/BiIlKgN2oCC+LvAEfIBY7pA+SokALX9RxpG//XN2 yITM5HZE5EWM+lMJAM9/35qAHQRKauVR7Z5WWxldz6uQ5csOTQqLl7DEcPrHWd854IAd yBnWEhRCqTqW6OfgkmhT6hsYsy19406p6yWDwCYjUVN13HI4BkOt0j9UrcVMR79V6ZVy 45tA== X-Gm-Message-State: AOJu0YxzF9Te+udH47+rGExGLbPlS+U0Wq2Y+VuS5G/rT1uqpOmRTsSt 9aUrCTdrtZRAydkGEeN9w0Qk1vXQmCTIGGgM X-Google-Smtp-Source: AGHT+IGmbeF69W2mApLtp2TFzllWj55CQ7MKd/oTUsvyCnOVTANukMUN2r2bgNvuI8ZjHjDNDSI/Gg== X-Received: by 2002:a0d:d48a:0:b0:59b:5d6b:5110 with SMTP id w132-20020a0dd48a000000b0059b5d6b5110mr2902658ywd.21.1700322706091; Sat, 18 Nov 2023 07:51:46 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id m2-20020a819c02000000b0057a44e20fb8sm1163887ywa.73.2023.11.18.07.51.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:45 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Yury Norov , linux-media@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 25/34] media: em28xx: cx231xx: fix opencoded find_and_set_bit() Date: Sat, 18 Nov 2023 07:50:56 -0800 Message-Id: <20231118155105.25678-26-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Functions in the media/usb drivers opencode find_and_set_bit() by polling on a found bit in a while-loop. Signed-off-by: Yury Norov --- drivers/media/usb/cx231xx/cx231xx-cards.c | 16 ++++------ drivers/media/usb/em28xx/em28xx-cards.c | 37 +++++++++-------------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/= cx231xx/cx231xx-cards.c index 92efe6c1f47b..b314603932d7 100644 --- a/drivers/media/usb/cx231xx/cx231xx-cards.c +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c @@ -1708,16 +1708,12 @@ static int cx231xx_usb_probe(struct usb_interface *= interface, return -ENODEV; =20 /* Check to see next free device and mark as used */ - do { - nr =3D find_first_zero_bit(&cx231xx_devused, CX231XX_MAXBOARDS); - if (nr >=3D CX231XX_MAXBOARDS) { - /* No free device slots */ - dev_err(d, - "Supports only %i devices.\n", - CX231XX_MAXBOARDS); - return -ENOMEM; - } - } while (test_and_set_bit(nr, &cx231xx_devused)); + nr =3D find_and_set_bit(&cx231xx_devused, CX231XX_MAXBOARDS); + if (nr >=3D CX231XX_MAXBOARDS) { + /* No free device slots */ + dev_err(d, "Supports only %i devices.\n", CX231XX_MAXBOARDS); + return -ENOMEM; + } =20 udev =3D usb_get_dev(interface_to_usbdev(interface)); =20 diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em= 28xx/em28xx-cards.c index 4d037c92af7c..af4809fe74a8 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c @@ -3684,17 +3684,14 @@ static int em28xx_duplicate_dev(struct em28xx *dev) return -ENOMEM; } /* Check to see next free device and mark as used */ - do { - nr =3D find_first_zero_bit(em28xx_devused, EM28XX_MAXBOARDS); - if (nr >=3D EM28XX_MAXBOARDS) { - /* No free device slots */ - dev_warn(&dev->intf->dev, ": Supports only %i em28xx boards.\n", - EM28XX_MAXBOARDS); - kfree(sec_dev); - dev->dev_next =3D NULL; - return -ENOMEM; - } - } while (test_and_set_bit(nr, em28xx_devused)); + nr =3D find_and_set_bit(em28xx_devused, EM28XX_MAXBOARDS); + if (nr >=3D EM28XX_MAXBOARDS) { + /* No free device slots */ + dev_warn(&dev->intf->dev, ": Supports only %i em28xx boards.\n", EM28XX_= MAXBOARDS); + kfree(sec_dev); + dev->dev_next =3D NULL; + return -ENOMEM; + } sec_dev->devno =3D nr; snprintf(sec_dev->name, 28, "em28xx #%d", nr); sec_dev->dev_next =3D NULL; @@ -3827,17 +3824,13 @@ static int em28xx_usb_probe(struct usb_interface *i= ntf, udev =3D usb_get_dev(interface_to_usbdev(intf)); =20 /* Check to see next free device and mark as used */ - do { - nr =3D find_first_zero_bit(em28xx_devused, EM28XX_MAXBOARDS); - if (nr >=3D EM28XX_MAXBOARDS) { - /* No free device slots */ - dev_err(&intf->dev, - "Driver supports up to %i em28xx boards.\n", - EM28XX_MAXBOARDS); - retval =3D -ENOMEM; - goto err_no_slot; - } - } while (test_and_set_bit(nr, em28xx_devused)); + nr =3D find_and_set_bit(em28xx_devused, EM28XX_MAXBOARDS); + if (nr >=3D EM28XX_MAXBOARDS) { + /* No free device slots */ + dev_err(&intf->dev, "Driver supports up to %i em28xx boards.\n", EM28XX_= MAXBOARDS); + retval =3D -ENOMEM; + goto err_no_slot; + } =20 /* Don't register audio interfaces */ if (intf->altsetting[0].desc.bInterfaceClass =3D=3D USB_CLASS_AUDIO) { --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C0EE6C5AD4C for ; Sat, 18 Nov 2023 15:54:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233056AbjKRPy1 (ORCPT ); Sat, 18 Nov 2023 10:54:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49912 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230409AbjKRPxG (ORCPT ); Sat, 18 Nov 2023 10:53:06 -0500 Received: from mail-yw1-x112a.google.com (mail-yw1-x112a.google.com [IPv6:2607:f8b0:4864:20::112a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF76A1FD9; Sat, 18 Nov 2023 07:51:48 -0800 (PST) Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-5c516f92759so32038617b3.2; Sat, 18 Nov 2023 07:51:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322708; x=1700927508; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fm1bHPEyELp3MiPjOSu0bHDojYqM84986duNSStQHBY=; b=S4GwRONQN6Sg7Bq0l5QNXv2PN7PtyWj4PbeIQm1D0PgHld0Aue9+G9wJIa3+VR6r4N 69fckYz3ZFtTSrTmp3wBm9HgI4AFnN9oP8kq2NFoUF7zI5qMGuq0QfN8uWOwRlPcugwb SgsXAzhcRoKLyTeBcAykIkmKaVsdwZTdnJ5oMwlTmUIrFNm6hE7uIZwbfaRavFTiFbSN vgLIi9Doss0CR/kd4xoJudiEEg0LxDUQSmpsoAPa9Rmil3o3cEkzZkK+0SN5LNZQnmG0 AT8q/gLHLLhO5bFeMeduSD7QNmlMQ2PI9YysiarzIbxyaKqkuWP1uhYJj7ntZbz/adua lqdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322708; x=1700927508; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fm1bHPEyELp3MiPjOSu0bHDojYqM84986duNSStQHBY=; b=GvT1qHTA1uEw494ni2VTjuK/ejdoxx2W4wC6b86eetyhkRQcvwqLVuPHZqngQNHWE9 dH4nYSxgs41Au6dTRF9+wxsmX1DMAdGL7VCzEidM3cTZGwg1rs/eU/bEz0zTRhR/U9Cv 4+s+twvmyjJy2dfHPNz27sxaCqP7cz7hoyB0d8Z8tZ+36nFIJD2LMr98ongzkb7HAhpm mQUe43NT0Q9kPYAErdfb28epsXkRnD2REq0gxnuFzu5G+q9qlahmAT24manx57LN1lPJ OrJhi7ujbDrip45E/9MuE9on4tDNZSIDVWJ11mMeaERVCsriDnS1kjXNYTS+PA6WFcoX Phkw== X-Gm-Message-State: AOJu0YxMJB6d2rNmyaG7G7trBdICttbdfXUClSnpYrs9S3nhXHKBdK0e ZNaImNiBiHR4RDMbCI7KngBlwAnUSXF289po X-Google-Smtp-Source: AGHT+IEr9EXnIrnz3KfJlWeIhC3M3/FUV0iAGcHYIcYOW9tXgSnWoyx3lY1GC4qxv/GhgpzHagmIGw== X-Received: by 2002:a81:ef0d:0:b0:59b:5696:c33 with SMTP id o13-20020a81ef0d000000b0059b56960c33mr2780375ywm.46.1700322707666; Sat, 18 Nov 2023 07:51:47 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id b65-20020a0dd944000000b005a8c392f498sm1167821ywe.82.2023.11.18.07.51.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:46 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Jiri Pirko , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , netdev@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 26/34] ethernet: rocker: optimize ofdpa_port_internal_vlan_id_get() Date: Sat, 18 Nov 2023 07:50:57 -0800 Message-Id: <20231118155105.25678-27-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Optimize ofdpa_port_internal_vlan_id_get() by using find_and_set_bit(), instead of polling every bit from bitmap in a for-loop. Signed-off-by: Yury Norov --- drivers/net/ethernet/rocker/rocker_ofdpa.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/rocker/rocker_ofdpa.c b/drivers/net/ether= net/rocker/rocker_ofdpa.c index 826990459fa4..449be8af7ffc 100644 --- a/drivers/net/ethernet/rocker/rocker_ofdpa.c +++ b/drivers/net/ethernet/rocker/rocker_ofdpa.c @@ -2249,14 +2249,11 @@ static __be16 ofdpa_port_internal_vlan_id_get(struc= t ofdpa_port *ofdpa_port, found =3D entry; hash_add(ofdpa->internal_vlan_tbl, &found->entry, found->ifindex); =20 - for (i =3D 0; i < OFDPA_N_INTERNAL_VLANS; i++) { - if (test_and_set_bit(i, ofdpa->internal_vlan_bitmap)) - continue; + i =3D find_and_set_bit(ofdpa->internal_vlan_bitmap, OFDPA_N_INTERNAL_VLAN= S); + if (i < OFDPA_N_INTERNAL_VLANS) found->vlan_id =3D htons(OFDPA_INTERNAL_VLAN_ID_BASE + i); - goto found; - } - - netdev_err(ofdpa_port->dev, "Out of internal VLAN IDs\n"); + else + netdev_err(ofdpa_port->dev, "Out of internal VLAN IDs\n"); =20 found: found->ref_count++; --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01751C5AD4C for ; Sat, 18 Nov 2023 15:54:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230486AbjKRPyc (ORCPT ); Sat, 18 Nov 2023 10:54:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49986 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231197AbjKRPxJ (ORCPT ); Sat, 18 Nov 2023 10:53:09 -0500 Received: from mail-yw1-x1129.google.com (mail-yw1-x1129.google.com [IPv6:2607:f8b0:4864:20::1129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEA111FE5; Sat, 18 Nov 2023 07:51:50 -0800 (PST) Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-5b499b18b28so32751827b3.0; Sat, 18 Nov 2023 07:51:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322709; x=1700927509; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=q0DdBJNYkBobnoLbuVdpfFwfkBXRkkwlqArhSXd28Ns=; b=h85wGB4uDaCRaOlOiipFKIhfT6uht+Bl+Tl8v7GH6vA18ehtjHt6ia+qyyd2qF82b4 BlwOMtt/hLHgeDnRymeeBW6olQA+DKhBpK5Ah/S063zZWYRrkhad6iOQueZwZw8/EpXQ 1l7EWkKEcpiSnNIg3eHYj2n74NoG6P2vlDg2/CI3ty1mhuGWyegQBINphlEkjHeSHCCc CROPr/XXZaDg+nW0qCIWwGnvBYRA7hRvYKkA4e1wRa/cOvVn/7iNN5eUy77scPYSWHeG LICzIKT46NXe3LyehwIrnOAHIgPaeoLhzVGr0j4xNFptnsqn51ddM5nQWajRx4Q7MNPb MnTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322709; x=1700927509; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q0DdBJNYkBobnoLbuVdpfFwfkBXRkkwlqArhSXd28Ns=; b=SBHnHTG2TU3yX+A+q9zRJnjGH9J99pAljaSW1/lskIvLJOVLJ03xVH3Db1zdOpR45g AAGWS/n3dipL2HgpuJlRdd3idwXDYm1F2Rp//Ymr4hhK3+hcsb2wJQdcc0kVhW43kF8g 6/VMYME1fsT+LuO+2ussn2Owi2dNAgFYMmsKAU9PdlEMzaK2JwcCTr5HKjgPPsbZJPSH MakhXNp1nxbQFvWaymWJMrEy9XZTpzM7CdIZuMgFU6AIA+wp1czKBNokdzapaLjX3TOk U6JynVgkJwbFC7z5wUoXu4dmOTuMCSOBcBtvnF8TlF/wqXGjsOsrXpxkvWwNr6PLLdo6 y1gg== X-Gm-Message-State: AOJu0YwEUcGyoKjR7IoNapoe5tMfBd62W1kjelnHvdY1R3ZNsbDG7bFl PCR4HGhc6BnH0oJLiYqBthuASZuOcSaokAdo X-Google-Smtp-Source: AGHT+IHf/y6t164pMjc17343PBLUYFLD9XOP4hlMacNZfcaCxBOFO6cO3hN3hjM1cdowPx+3vJjRHQ== X-Received: by 2002:a81:4fcf:0:b0:5a7:c906:14f with SMTP id d198-20020a814fcf000000b005a7c906014fmr2498604ywb.11.1700322708779; Sat, 18 Nov 2023 07:51:48 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id y200-20020a81a1d1000000b005af5ef0687bsm1177615ywg.13.2023.11.18.07.51.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:48 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Jiri Slaby , Hugo Villeneuve , Lech Perczak , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Andy Shevchenko , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , Thomas Gleixner , Hui Wang , Isaac True , Yury Norov , linux-serial@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 27/34] serial: sc12is7xx: optimize sc16is7xx_alloc_line() Date: Sat, 18 Nov 2023 07:50:58 -0800 Message-Id: <20231118155105.25678-28-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Instead of polling every bit in sc16is7xx_lines, switch it to using a dedicated find_and_set_bit(), and make the function a simple one-liner. Signed-off-by: Yury Norov --- drivers/tty/serial/sc16is7xx.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c index db2bb1c0d36c..6a463988d5e0 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c @@ -427,15 +427,9 @@ static void sc16is7xx_port_update(struct uart_port *po= rt, u8 reg, =20 static int sc16is7xx_alloc_line(void) { - int i; - BUILD_BUG_ON(SC16IS7XX_MAX_DEVS > BITS_PER_LONG); =20 - for (i =3D 0; i < SC16IS7XX_MAX_DEVS; i++) - if (!test_and_set_bit(i, &sc16is7xx_lines)) - break; - - return i; + return find_and_set_bit(&sc16is7xx_lines, SC16IS7XX_MAX_DEVS); } =20 static void sc16is7xx_power(struct uart_port *port, int on) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4452DC5ACB3 for ; Sat, 18 Nov 2023 15:54:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231682AbjKRPyh (ORCPT ); Sat, 18 Nov 2023 10:54:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230253AbjKRPxc (ORCPT ); Sat, 18 Nov 2023 10:53:32 -0500 Received: from mail-yw1-x1133.google.com (mail-yw1-x1133.google.com [IPv6:2607:f8b0:4864:20::1133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1500D1FEB; Sat, 18 Nov 2023 07:51:52 -0800 (PST) Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-5c9adcaf514so407127b3.2; Sat, 18 Nov 2023 07:51:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322710; x=1700927510; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5/FFRxNdIVmBtGkGik+eY+kvUwCYYAdIhZdGmVH5ny0=; b=XHFM6tKQUtr+ERDMSFScqY8TpsnBRXCGYuutGO0nb1jrhv7VWiCmz8vSZpRl3H4EXu NFFvC0GFb4qTtkyiEroiLv8JYpXsun4dWahd/cWc+aTR+916BWvMI7BLQCQuSJ6Fjx6s 090ZZr+pw0FC4Bq1GekOw4/eCTAka5QBvtAP78FJ61Ps42T/bDARzMy98D/iZfaF6UQy a6d+X6NSxvFmKGCYr7Krt+yLnooXahSheZ5psFFQElE+6wVU/Qg4ImNxK3eZUs/xp/2G 6wYVpt4CIuhipxn2oo1Jcp08zqJr6C9XjNOupeVlIjjqab8ENkNrALLPhWq33QZFI0FB GFNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322710; x=1700927510; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5/FFRxNdIVmBtGkGik+eY+kvUwCYYAdIhZdGmVH5ny0=; b=Ct4nzdt4mx15hxHbv9hsQAhX2ZtgICGYJzYRlqHiHPRHJa6oEGKJrH7qdylsNj3fTL sJJSB0rcQCe5oR1diK6OgnhPWyDBnYIadr+BiR5o2D0ivbOPEBAC8lGnx02/6l+7ltgI 2IwAy4Gh1TEPeN9Cw9SejC0a5jb3BGCsPobEwVGuUyYcGKXzHeaBA7s0MBDEp5K3E0NK y6OrDPCOWXEZkU63RC3GSf4EGndtCdoy3sI7N4OS/W3G9blvqoRYkHUwXD9+zoZ52iuQ er4glkaX9oODEHOnf+qZmfVM2+uaDndlXBRNDZHMqxxZAOiaSvAhK/7aG0WEPc3kY2Vm 3dqw== X-Gm-Message-State: AOJu0YzJqz7WaDwT8PabL6YOTwuYEF3To1B16tJSGFBNFCnd9T2Ywmhw wISDFCj8etrArWmi3LoI2uXtgy5vyjUKZmyU X-Google-Smtp-Source: AGHT+IGMZW2BXhTq6urOTFJBRfGUnn7sVaNNC8L1hFUdeATS2oy7Q8NxWcEEhUoAcnJ9H9mWRS92oA== X-Received: by 2002:a0d:d951:0:b0:5a7:d412:af32 with SMTP id b78-20020a0dd951000000b005a7d412af32mr2476093ywe.10.1700322710270; Sat, 18 Nov 2023 07:51:50 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id i205-20020a8154d6000000b0059bcadded9dsm1176063ywb.116.2023.11.18.07.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:49 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Karsten Keil , Marcel Holtmann , Johan Hedberg , Luiz Augusto von Dentz , Yury Norov , netdev@vger.kernel.org, linux-bluetooth@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 28/34] bluetooth: optimize cmtp_alloc_block_id() Date: Sat, 18 Nov 2023 07:50:59 -0800 Message-Id: <20231118155105.25678-29-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Instead of polling every bit in blockids, switch it to using a dedicated find_and_set_bit(), and make the function a simple one-liner. Signed-off-by: Yury Norov --- net/bluetooth/cmtp/core.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c index 90d130588a3e..b1330acbbff3 100644 --- a/net/bluetooth/cmtp/core.c +++ b/net/bluetooth/cmtp/core.c @@ -88,15 +88,9 @@ static void __cmtp_copy_session(struct cmtp_session *ses= sion, struct cmtp_connin =20 static inline int cmtp_alloc_block_id(struct cmtp_session *session) { - int i, id =3D -1; + int id =3D find_and_set_bit(&session->blockids, 16); =20 - for (i =3D 0; i < 16; i++) - if (!test_and_set_bit(i, &session->blockids)) { - id =3D i; - break; - } - - return id; + return id < 16 ? id : -1; } =20 static inline void cmtp_free_block_id(struct cmtp_session *session, int id) --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 113CCC5AD4C for ; Sat, 18 Nov 2023 15:54:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231650AbjKRPyn (ORCPT ); Sat, 18 Nov 2023 10:54:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231698AbjKRPxf (ORCPT ); Sat, 18 Nov 2023 10:53:35 -0500 Received: from mail-yb1-xb34.google.com (mail-yb1-xb34.google.com [IPv6:2607:f8b0:4864:20::b34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 27F821FF3; Sat, 18 Nov 2023 07:51:54 -0800 (PST) Received: by mail-yb1-xb34.google.com with SMTP id 3f1490d57ef6-da3b4b7c6bdso2917083276.2; Sat, 18 Nov 2023 07:51:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322712; x=1700927512; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FRJAi9fqLnpZBQBfWveY0fRnarAyBBO44GyImL+GpQw=; b=IT8+IBr/GjwsHiuzp7JbGVGoUMD6y1ZMGmXhJaeFaN9TrOcyttSLuKo4qdu1SmXbcG VgMptIT0UAnXXPkr+htmJdWc8gttbfZJkgEawCYNoL3m1PmHFpTdb/1VYtDUa07e+tWc YjIfSHyIXopdgUYFRwTlxcaaOtQKI762QKvW8zdhLUU+jOHItUV2D9HlB/xKYgi2d27J Tx+DKwf0B/ilLwI6vSXqzgjVkD61+aQRmW9T+9xlfrfdXzy9qxHVkFY/cat075drS2di /foAu1lF96mWe7J41kM2yRloUptbCXY6fjPpShM53bkrQJ+krv3IFOWamSUUxClDXG39 4i5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322712; x=1700927512; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FRJAi9fqLnpZBQBfWveY0fRnarAyBBO44GyImL+GpQw=; b=mDBnc/xl3/t16XUHfApkuAktgGMjkyxeKEp9vBN0+hxNFXHTqEHzokNr9YK+VsAsKF FTOEo88in//BEuOU0B3wE8a0L9+6hYJj6TTNznIDk6yy2RaI95MssBIIKBq3Pd0NqI2z wDmH0xpka0HJQ8tgr3kdtTHoi8X0k4U4itbl1aEUWeTU4MKfRPQx3L6BrlEsMVUilQOE aw9m9jzk/Ciy6b3vDILc+FOIFiXzC2zN4SUIe+v+grOfQSWlrcugQQI22Xikx7qyYfVd L+leu3AqRb6r2KsJ0iU0Hv0PYJOwZQ/KjYo7Cnn9/kSZ+yzld/NPLvH/drU8h4DrTGA+ KPSQ== X-Gm-Message-State: AOJu0Yy+Fkdbs3cozq22sc2AkHohJpbMBiASZs2x7WLhVxu9P0cdIjUm 8J08UJJ4YcruDo/4vry5oWqTLuzICP1NQ/lp X-Google-Smtp-Source: AGHT+IElJ0U3CjFZG+s3NnFjnzuVmrFeyc2e4WM5oO3xxPOV5mRPbrBHmRloD2DElouQFvaTAENskA== X-Received: by 2002:a05:6902:212:b0:d9a:d7a5:e445 with SMTP id j18-20020a056902021200b00d9ad7a5e445mr2342423ybs.49.1700322711961; Sat, 18 Nov 2023 07:51:51 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id e62-20020a25a3c4000000b00da10d9e96cesm1006690ybi.35.2023.11.18.07.51.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:51 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Karsten Graul , Wenjia Zhang , Jan Karcher , "D. Wythe" , Tony Lu , Wen Gu , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-s390@vger.kernel.org, netdev@vger.kernel.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 29/34] net: smc: fix opencoded find_and_set_bit() in smc_wr_tx_get_free_slot_index() Date: Sat, 18 Nov 2023 07:51:00 -0800 Message-Id: <20231118155105.25678-30-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The function opencodes find_and_set_bit() with a for_each() loop. Fix it, and make the whole function a simple almost one-liner. Signed-off-by: Yury Norov --- net/smc/smc_wr.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/net/smc/smc_wr.c b/net/smc/smc_wr.c index 0021065a600a..b6f0cfc52788 100644 --- a/net/smc/smc_wr.c +++ b/net/smc/smc_wr.c @@ -170,15 +170,11 @@ void smc_wr_tx_cq_handler(struct ib_cq *ib_cq, void *= cq_context) =20 static inline int smc_wr_tx_get_free_slot_index(struct smc_link *link, u32= *idx) { - *idx =3D link->wr_tx_cnt; if (!smc_link_sendable(link)) return -ENOLINK; - for_each_clear_bit(*idx, link->wr_tx_mask, link->wr_tx_cnt) { - if (!test_and_set_bit(*idx, link->wr_tx_mask)) - return 0; - } - *idx =3D link->wr_tx_cnt; - return -EBUSY; + + *idx =3D find_and_set_bit(link->wr_tx_mask, link->wr_tx_cnt); + return *idx < link->wr_tx_cnt ? 0 : -EBUSY; } =20 /** --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EAC97C5ACB3 for ; Sat, 18 Nov 2023 15:54:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230516AbjKRPyp (ORCPT ); Sat, 18 Nov 2023 10:54:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230292AbjKRPxh (ORCPT ); Sat, 18 Nov 2023 10:53:37 -0500 Received: from mail-yw1-x112c.google.com (mail-yw1-x112c.google.com [IPv6:2607:f8b0:4864:20::112c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DCC5E1FF9; Sat, 18 Nov 2023 07:51:54 -0800 (PST) Received: by mail-yw1-x112c.google.com with SMTP id 00721157ae682-5c516f92759so32039337b3.2; Sat, 18 Nov 2023 07:51:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322713; x=1700927513; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Pqvvn3jC6Vz8bzOhTQHPcM8ndCOZ4pDWuw3ZxWJvphM=; b=cSoJGbdUB2e8+JfALFn1StMsw2Z57vXAv8W3lpRnBCvQ3pT50egm1YoxTOYi1LLcD8 hwrD+VPnOFkk7hSSAmOVhPTdwGqPWIPZOVwiylyErS6WcXRS8BzSvRqAdb4b6IGFdhVt 3Eoqurbr05XjloHaIaCCZztvsVWSMiBPzYu/zPRC5ZEaqS65HGekyB4/11SFgyL7oGqF 4spoIaXqnL2oOQzd1zO3vyO9aeC8XF5Zl5gYjUcF4Qv/bntzsg/yg2L3eSEP7lnQVI3g okmeVAJDLcCljZCE2jpY6icyq0x4G+l2O5KDcgxBgd2JUydy1igv+nx57E8ZWsmSoYAe HlTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322713; x=1700927513; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Pqvvn3jC6Vz8bzOhTQHPcM8ndCOZ4pDWuw3ZxWJvphM=; b=NccrJYZc/bVG7fZHBfGv6FaQQg4ay2NVnMzvgmU4IqC/3JlzOx5pvxvQefhzcwE3pg GrqjxISDDLZidVYHGBsnnFLQQpdk6ezt6LT85dUcVGT238kmXf+N+up+yir+HKwA6kh8 ex759O+75POHSkZVn2tpi2wa2bIYX/zQ29CRlE7WgoWBnxdCdEb+EqHoZ7NqVhi3Xhk6 BMMHWonvgbb7TQRT4TOTOj0LBKAJU/gpUXBBq5c6vIcCT/pgtiPdC12yd/1ZJ8wmxeKb m395yq98186MKMfU7TS5SMFEhA7h11kURS0ap5k195kHL9RAnBiRzZvAJqYrIPe/ME26 rQpA== X-Gm-Message-State: AOJu0YxDZXNP4f16SYMcts/+E8HL3Hv8zIyiWb4xFofejrJOlTeF2Jw8 M9zOGhlqbHCGO/bNVVkPzr02gveBsmrAByqI X-Google-Smtp-Source: AGHT+IHi1UfS8eoFXkfozWsLdq/Iqyn0m7FQM2MTep2E1EPNYtNXp8LEwhBmcZHJxn/bgTZr34eiJg== X-Received: by 2002:a81:f202:0:b0:5c9:9097:6427 with SMTP id i2-20020a81f202000000b005c990976427mr546580ywm.44.1700322713616; Sat, 18 Nov 2023 07:51:53 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id b65-20020a0dd944000000b005a8c392f498sm1167875ywe.82.2023.11.18.07.51.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:52 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Jaroslav Kysela , Takashi Iwai , Daniel Mack , Cezary Rojewski , Kai Vehmanen , Yury Norov , Kees Cook , linux-sound@vger.kernel.org, alsa-devel@alsa-project.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 30/34] ALSA: use atomic find_bit() functions where applicable Date: Sat, 18 Nov 2023 07:51:01 -0800 Message-Id: <20231118155105.25678-31-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ALSA code tests each bit in bitmaps in a for() loop. Switch it to dedicated atomic find_bit() API. Signed-off-by: Yury Norov Acked-by: Takashi Iwai --- sound/pci/hda/hda_codec.c | 7 +++---- sound/usb/caiaq/audio.c | 13 +++++-------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 01718b1fc9a7..29254005f394 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -3275,10 +3275,9 @@ static int get_empty_pcm_device(struct hda_bus *bus,= unsigned int type) =20 #ifdef CONFIG_SND_DYNAMIC_MINORS /* non-fixed slots starting from 10 */ - for (i =3D 10; i < 32; i++) { - if (!test_and_set_bit(i, bus->pcm_dev_bits)) - return i; - } + i =3D find_and_set_next_bit(bus->pcm_dev_bits, 32, 10); + if (i < 32) + return i; #endif =20 dev_warn(bus->card->dev, "Too many %s devices\n", diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c index 4981753652a7..74dfcf32b439 100644 --- a/sound/usb/caiaq/audio.c +++ b/sound/usb/caiaq/audio.c @@ -610,7 +610,7 @@ static void read_completed(struct urb *urb) struct snd_usb_caiaq_cb_info *info =3D urb->context; struct snd_usb_caiaqdev *cdev; struct device *dev; - struct urb *out =3D NULL; + struct urb *out; int i, frame, len, send_it =3D 0, outframe =3D 0; unsigned long flags; size_t offset =3D 0; @@ -625,17 +625,14 @@ static void read_completed(struct urb *urb) return; =20 /* find an unused output urb that is unused */ - for (i =3D 0; i < N_URBS; i++) - if (test_and_set_bit(i, &cdev->outurb_active_mask) =3D=3D 0) { - out =3D cdev->data_urbs_out[i]; - break; - } - - if (!out) { + i =3D find_and_set_bit(&cdev->outurb_active_mask, N_URBS); + if (i >=3D N_URBS) { dev_err(dev, "Unable to find an output urb to use\n"); goto requeue; } =20 + out =3D cdev->data_urbs_out[i]; + /* read the recently received packet and send back one which has * the same layout */ for (frame =3D 0; frame < FRAMES_PER_URB; frame++) { --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2916DC2BB3F for ; Sat, 18 Nov 2023 15:54:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231197AbjKRPy4 (ORCPT ); Sat, 18 Nov 2023 10:54:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40732 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231244AbjKRPxh (ORCPT ); Sat, 18 Nov 2023 10:53:37 -0500 Received: from mail-yw1-x1132.google.com (mail-yw1-x1132.google.com [IPv6:2607:f8b0:4864:20::1132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0482A1FFF for ; Sat, 18 Nov 2023 07:51:56 -0800 (PST) Received: by mail-yw1-x1132.google.com with SMTP id 00721157ae682-5a822f96aedso33743847b3.2 for ; Sat, 18 Nov 2023 07:51:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322715; x=1700927515; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Faq88orJ2tLAcgJ6Ak512QARxmUWD9dLolef7kGFuP8=; b=hcACIPzBulOdtEuNm05hpsAR7UMnLmhav62wLOz5hBaF+NaS7TnMBjmZHBpNdNHso7 P+9DV7JUtJnclhdlegEPImotD8CuVBTQDwux3woKsjUay2BnxPd5e1M1kxlObqXfmW9f eJ4woQpt6fPpUx+nrbRY+zo9r+TviA7/olG313tK0nFv7FVi9jbvrpDy7JNbHiBZnO5Q vlzDinRv+pOhYFNrtwso2pyKM+KN6ZBtu/kX2ySchrgrM7X1/CdEJifdY7AuZ+2UWLvt B3vXQCjt4YnsaFdhCtvdY7QKaz39r/mGjN5n3SgC8583qWYGThYiyCTAfYiZsADh5+Id m+Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322715; x=1700927515; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Faq88orJ2tLAcgJ6Ak512QARxmUWD9dLolef7kGFuP8=; b=JNc5YYZnll6ePdQcSaPx2sghkts4R9MBTS3h1tH4SQlVASTAnJe0clnWBBlCm/RjCu fBflDx9U3C6UuiL5NoONY+dTAq5DQ6e6ME+RjU7iMOrOiVu/JJIo/4KulRv5m7y2bgZr X7H/+56lmoqpqxWPRSISL1z7TO1fHtNhlGzdjzMdr+9SOP+LEbrrqTbnq7c/JR9EHm4K 3l6JIXmQjBoOer9TyQoZDdyRh/Ox9FtpkFbb8calxffJaJ/rQedOnlydFtsFisFCOK9J uamcJNszenxE6mtP+a0XoOMfuRG3Ne1KMMUocjrwoVzDH17cvGYkK077cMOut91SZKeQ t2aQ== X-Gm-Message-State: AOJu0YzG4hn18fS2Zjol7VvwKRdjHeVWM075jq3Qv+rVtcyG/14LtHv7 LYT3eq+BRER3bBppTWItmliUODBYksqaIf6K X-Google-Smtp-Source: AGHT+IEN5VHZ3duafcnm/k8t+mVTB/cJ3CeGZaVa462hMjL/JpTWc3yeLMLvRrae0wvqSgJiWcTX/g== X-Received: by 2002:a0d:cb0b:0:b0:5a7:dda6:cbaf with SMTP id n11-20020a0dcb0b000000b005a7dda6cbafmr2882441ywd.19.1700322714741; Sat, 18 Nov 2023 07:51:54 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id k186-20020a0dfac3000000b00559f1cb8444sm1186383ywf.70.2023.11.18.07.51.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:54 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Will Deacon , Mark Rutland , Marc Zyngier , linux-arm-kernel@lists.infradead.org Cc: Yury Norov , Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 31/34] drivers/perf: optimize m1_pmu_get_event_idx() by using find_bit() API Date: Sat, 18 Nov 2023 07:51:02 -0800 Message-Id: <20231118155105.25678-32-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The function searches used_mask for a bit in a for-loop bit by bit. We can do it faster by using atomic find_and_set_bit(). The comment to the function says that it searches for the first free counter, but obviously for_each_set_bit() searches for the first set counter. The following test_and_set_bit() tries to enable already set bit, which is weird. This patch, by using find_and_set_bit(), fixes this automatically. Fixes: a639027a1be1 ("drivers/perf: Add Apple icestorm/firestorm CPU PMU dr= iver") Signed-off-by: Yury Norov --- drivers/perf/apple_m1_cpu_pmu.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/perf/apple_m1_cpu_pmu.c b/drivers/perf/apple_m1_cpu_pm= u.c index cd2de44b61b9..2d50670ffb01 100644 --- a/drivers/perf/apple_m1_cpu_pmu.c +++ b/drivers/perf/apple_m1_cpu_pmu.c @@ -447,12 +447,8 @@ static int m1_pmu_get_event_idx(struct pmu_hw_events *= cpuc, * counting on the PMU at any given time, and by placing the * most constraining events first. */ - for_each_set_bit(idx, &affinity, M1_PMU_NR_COUNTERS) { - if (!test_and_set_bit(idx, cpuc->used_mask)) - return idx; - } - - return -EAGAIN; + idx =3D find_and_set_bit(cpuc->used_mask, M1_PMU_NR_COUNTERS); + return idx < M1_PMU_NR_COUNTERS ? idx : -EAGAIN; } =20 static void m1_pmu_clear_event_idx(struct pmu_hw_events *cpuc, --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2CBABC5ACB3 for ; Sat, 18 Nov 2023 15:55:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230156AbjKRPzN (ORCPT ); Sat, 18 Nov 2023 10:55:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44602 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231356AbjKRPxk (ORCPT ); Sat, 18 Nov 2023 10:53:40 -0500 Received: from mail-yb1-xb2c.google.com (mail-yb1-xb2c.google.com [IPv6:2607:f8b0:4864:20::b2c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4DD2010E5 for ; Sat, 18 Nov 2023 07:51:57 -0800 (PST) Received: by mail-yb1-xb2c.google.com with SMTP id 3f1490d57ef6-da0cfcb9f40so2988934276.2 for ; Sat, 18 Nov 2023 07:51:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322716; x=1700927516; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SNt2pqVZ1WV5AdCyxo2zcjd8VNJuqW2Azbsupr/AuxU=; b=NGUiw/mL7WRPzT2RlK9PbyCZveUqmgM81hOy+rsUTY5fSOyrgceZh6KAyPQzty08Er GAAyE0otRecqL5W6PFgzjLVh3yne9zHw6kI2SH8c7iWoHgJMYjMEbS+595kxbLBm8qf2 qQERnVQax891G0oWLCpQSHURuboOkuyMPhmkvxoHKNqten4zo5ap/qzmonSf5EAJSo4z mDtWXXE2X35cf75WmH66B9QVWAfS2XEcrFdFNpMX/+GTN7kPhOXo1+dHUg/QsP9/hwJw wO3z9qKaKklY2xI5N5fhygTooZsfTXlDHcv8N5z/VF8EnuPvSdW/cMsUf+VEYBVP1U19 0FAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322716; x=1700927516; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SNt2pqVZ1WV5AdCyxo2zcjd8VNJuqW2Azbsupr/AuxU=; b=B6dxk603r1jGG8Pcg7ZdcDnBun7MaeN54X75oO6iBeTWopBAMV0ac7N8XkwEddJdyY HEAv9SbPkjsxPmyTfXs/4K2BfwwegAhcTwpjIptS0kWNgm6iZ2r2w/aO4E4boP/f0VOx MB4hwR3EncXb8NSmjg1PrOfY+hpkKKSNNUUY5voZsuV/5oImPrr72CTR2uqYiMoUJflh tDcGgSbnltxOZcsJIH1AVbdVVdzx4ItVW3jrg6oRsqU9+x9cuVQFnK1xLk6xHPfBtwvN AxZ2CprCmZhf68BRQLwWi1mJ1zbX7YDeeZDVc0kE0/q5H3kFsdMEz8F6ULhgpxAbehqA 7+Hg== X-Gm-Message-State: AOJu0YzYd1C2qNspPB+bM1ZaayHlo5uTOqjH72kUUKRFih4MqRHL4qEA t/4SfbySe6RMomO1DFjAr7isdtkCkM0s7/+g X-Google-Smtp-Source: AGHT+IEf1SMn4kx/hj71N88M3PWh0tAr7wvGpwiR33ZDpQe2i0m4dnQ8GWNqn8AtrUGo6m7vBDMcZQ== X-Received: by 2002:a25:ca44:0:b0:da0:54f7:69bd with SMTP id a65-20020a25ca44000000b00da054f769bdmr2497887ybg.22.1700322715920; Sat, 18 Nov 2023 07:51:55 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id y36-20020a25ad24000000b00d9a577d8434sm998467ybi.53.2023.11.18.07.51.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:55 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Geert Uytterhoeven , Hugh Dickins , Andrew Morton , Yury Norov , linux-m68k@lists.linux-m68k.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 32/34] m68k: rework get_mmu_context() Date: Sat, 18 Nov 2023 07:51:03 -0800 Message-Id: <20231118155105.25678-33-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ALSA code opencodes atomic find_and_set_bit_wrap(). Switch it to dedicated function. Signed-off-by: Yury Norov Acked-by: Greg Ungerer --- arch/m68k/include/asm/mmu_context.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/arch/m68k/include/asm/mmu_context.h b/arch/m68k/include/asm/mm= u_context.h index 141bbdfad960..0419ad87a1c1 100644 --- a/arch/m68k/include/asm/mmu_context.h +++ b/arch/m68k/include/asm/mmu_context.h @@ -35,12 +35,11 @@ static inline void get_mmu_context(struct mm_struct *mm) atomic_inc(&nr_free_contexts); steal_context(); } - ctx =3D next_mmu_context; - while (test_and_set_bit(ctx, context_map)) { - ctx =3D find_next_zero_bit(context_map, LAST_CONTEXT+1, ctx); - if (ctx > LAST_CONTEXT) - ctx =3D 0; - } + + do { + ctx =3D find_and_set_bit_wrap(context_map, LAST_CONTEXT + 1, next_mmu_co= ntext); + } while (ctx > LAST_CONTEXT); + next_mmu_context =3D (ctx + 1) & LAST_CONTEXT; mm->context =3D ctx; context_mm[ctx] =3D mm; --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1DC5BC2BB3F for ; Sat, 18 Nov 2023 15:55:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231572AbjKRPzQ (ORCPT ); Sat, 18 Nov 2023 10:55:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44628 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230518AbjKRPxl (ORCPT ); Sat, 18 Nov 2023 10:53:41 -0500 Received: from mail-yw1-x112d.google.com (mail-yw1-x112d.google.com [IPv6:2607:f8b0:4864:20::112d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E867B2107 for ; Sat, 18 Nov 2023 07:51:58 -0800 (PST) Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-5b383b4184fso33543527b3.1 for ; Sat, 18 Nov 2023 07:51:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322717; x=1700927517; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+JD5ffTGpk93tg8AkoESy4I0f3LaG6FeAVUaBjQtKP0=; b=X7pc2AVj+gHCUODSfMJQ1CCULuF++OsKUTMOHebHVYuvR+MvRn6nhotkGpU/kxXh/2 aZJ3Xya7gtFHfEbh4wBKK0E/UATRnEdwk80UWlQdUgJazARP+qCKUetQ5aLNkNquEdcU 0+XCzfzH74i9o5L9kDnBssrtP3Z3QSykWlwJv0oi9MEexSkaGku06cELfiogK2kISFeB DuU23LUY58LkVlgdEc4+13umvrYG9zK7eaxlAvKs39+PjzuGM0qRPU5HZ7r14rXMnNac jZx9whY3yYAx9Ru1flPMZll5kbS4rTK5kiGUHblS+MtLtbMveV4r67k+cMg8tSvbGln7 Yz0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322717; x=1700927517; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+JD5ffTGpk93tg8AkoESy4I0f3LaG6FeAVUaBjQtKP0=; b=WST0Rg6KKynh3QjteS6LJaCH11OKgfkcb125CGWp061Y4E2TV+j6oB79BVeX3Ddhe/ x+1uiKYQ2cRnCV5tmoELwONiJIU2WANGAMS4xkIghywK50SiwB4bS1gITbwtj3m1a439 yccK5hAcnpfiuwmGdi4G/MqWIiLNTobxGMS3fOdchG2tHLG1I4CV7pwAaXJd4kbhbb48 HQNUYPsJHFX0V4lmps1hEvxKX/mRFMZhzgU0W6yrq55jIWdWNZ5Fahy7TUg8kgCl59co MKNOo7q8an0yMA6Z51Dn7asgJpkfF2VJKz6I+WFT0pEv+6Ijhe8b84azH8xQJfCCzum5 1SQg== X-Gm-Message-State: AOJu0YwvB03sE9aRrwBoasc808s53Yf/KPxM0quuxhEdVP4LIfARlAxW JC0u/SJ+2zerM/83M2RxaT206N4UTO6an+TO X-Google-Smtp-Source: AGHT+IG7wPFpUNycKY+N0nEw19mU/BEjuia4iH+Rsm+r8LMcRL1GjjYZzQ/va5FVyE428m6U7tDiNQ== X-Received: by 2002:a81:4f13:0:b0:5a5:65e:b847 with SMTP id d19-20020a814f13000000b005a5065eb847mr2911182ywb.34.1700322717124; Sat, 18 Nov 2023 07:51:57 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id w184-20020a0dd4c1000000b0059f650f46b2sm1172057ywd.7.2023.11.18.07.51.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:56 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Michal Simek , Yury Norov Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 33/34] microblaze: rework get_mmu_context() Date: Sat, 18 Nov 2023 07:51:04 -0800 Message-Id: <20231118155105.25678-34-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Fix opencoded find_and_set_bit_wrap(), which also suppresses potential KCSAN warning. Signed-off-by: Yury Norov --- arch/microblaze/include/asm/mmu_context_mm.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/arch/microblaze/include/asm/mmu_context_mm.h b/arch/microblaze= /include/asm/mmu_context_mm.h index c2c77f708455..209c3a62353a 100644 --- a/arch/microblaze/include/asm/mmu_context_mm.h +++ b/arch/microblaze/include/asm/mmu_context_mm.h @@ -82,12 +82,11 @@ static inline void get_mmu_context(struct mm_struct *mm) return; while (atomic_dec_if_positive(&nr_free_contexts) < 0) steal_context(); - ctx =3D next_mmu_context; - while (test_and_set_bit(ctx, context_map)) { - ctx =3D find_next_zero_bit(context_map, LAST_CONTEXT+1, ctx); - if (ctx > LAST_CONTEXT) - ctx =3D 0; - } + + do { + ctx =3D find_and_set_bit_wrap(context_map, LAST_CONTEXT + 1, next_mmu_co= ntext); + } while (ctx > LAST_CONTEXT); + next_mmu_context =3D (ctx + 1) & LAST_CONTEXT; mm->context =3D ctx; context_mm[ctx] =3D mm; --=20 2.39.2 From nobody Tue Dec 30 07:25:26 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76FE2C2BB3F for ; Sat, 18 Nov 2023 15:55:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231271AbjKRPzK (ORCPT ); Sat, 18 Nov 2023 10:55:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37284 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231334AbjKRPxk (ORCPT ); Sat, 18 Nov 2023 10:53:40 -0500 Received: from mail-yw1-x1131.google.com (mail-yw1-x1131.google.com [IPv6:2607:f8b0:4864:20::1131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BC87D210B; Sat, 18 Nov 2023 07:52:00 -0800 (PST) Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-5c739c80e29so18512357b3.3; Sat, 18 Nov 2023 07:52:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700322719; x=1700927519; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uLtIilfR7gLFqagyYs+6NDG1iSmOOH2SMP2aNmrlvmc=; b=GW216KwSCWFh4PSi9cZrFkFhSYyawbd/ImFwY7t+jv0HJKOv88GRK3GQ27YRh6i1H8 PRFBNg+087O7RyBwPj11KKG5KncOXTAafBFpaebdyWn/iiGrk5oDZXaDn8Gd1kLa3+jK 4HdAqXiuISk8PTv5tR4HtIMAgaD4KVF1+SB4tnyVxZ/mjk9voCpT8U7aZif0zXCyohWq pwVk/l+C1HMfZFBkERtFg+FgyjoDNQym8a2Ij3uTjkHKikfc2oo1Y93VPw1v/TaRGCkY ngWt5mZBoMBivDE/5F03cQM93f1YteDre75FIRo12N6ZGd9+2YNhGqEPaL4g7mv/MzV3 R1Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700322719; x=1700927519; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uLtIilfR7gLFqagyYs+6NDG1iSmOOH2SMP2aNmrlvmc=; b=LAPhpyjy7P8OqRrlRDPQqLZMl6YYnwBTNszwK1jVahcD4o4dyft/GpsB9KxEE29CM5 f/uUyLtSpUNAmG80ICybjKN33nZhuIbQi/7gs97/C1j7RX45WisJARhj3+PKQ7XkrOYa TRuujqPjjGU1s4iPB3aEXnw00dxO2cocaDcY4vSqHFkQjGEHavNcx5cQ6S6pGKTfFKio i91ae6HCMFmmKmP8AilzO42DmvUzHRsx2a5zQWUNzuxSVzV/A8dRTJ22iDZLApL3pxLQ nBdcLHGxzEz2+SJTiTQ3uHgTtQAO+LUT+Z3afpJ1S6CfUIvUyDbtIdGhvsyeEj5QVnn3 93lA== X-Gm-Message-State: AOJu0YytblmIcL4NLe/7l0s+b4ZK7WwucJ7Ta5AjmGYst2gUcIFhYS7p 7qPx2c4lV1EzgF9+VK76SkRenmbzuDIlYmp1 X-Google-Smtp-Source: AGHT+IHzm0/pMsA84butgw//kfAU4Z52dcxRoxcpd4wkUYIvA5AU7oytHGlrX6abNYyb17yO7KbvWw== X-Received: by 2002:a05:690c:13:b0:5c9:7f0a:e2fb with SMTP id bc19-20020a05690c001300b005c97f0ae2fbmr835696ywb.12.1700322718902; Sat, 18 Nov 2023 07:51:58 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:48a9:bd4c:868d:dc97]) by smtp.gmail.com with ESMTPSA id i9-20020a0ddf09000000b005a7a92a62besm1174746ywe.8.2023.11.18.07.51.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Nov 2023 07:51:57 -0800 (PST) From: Yury Norov To: linux-kernel@vger.kernel.org, Yoshinori Sato , Rich Felker , John Paul Adrian Glaubitz , Yury Norov , linux-sh@vger.kernel.org Cc: Jan Kara , Mirsad Todorovac , Matthew Wilcox , Rasmus Villemoes , Andy Shevchenko , Maxim Kuvyrkov , Alexey Klimov Subject: [PATCH 34/34] sh: rework ilsel_enable() Date: Sat, 18 Nov 2023 07:51:05 -0800 Message-Id: <20231118155105.25678-35-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231118155105.25678-1-yury.norov@gmail.com> References: <20231118155105.25678-1-yury.norov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Fix opencoded find_and_set_bit(), which also suppresses potential KCSAN warning. Signed-off-by: Yury Norov --- arch/sh/boards/mach-x3proto/ilsel.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/sh/boards/mach-x3proto/ilsel.c b/arch/sh/boards/mach-x3pr= oto/ilsel.c index f0d5eb41521a..7fadc479a80b 100644 --- a/arch/sh/boards/mach-x3proto/ilsel.c +++ b/arch/sh/boards/mach-x3proto/ilsel.c @@ -99,8 +99,8 @@ int ilsel_enable(ilsel_source_t set) } =20 do { - bit =3D find_first_zero_bit(&ilsel_level_map, ILSEL_LEVELS); - } while (test_and_set_bit(bit, &ilsel_level_map)); + bit =3D find_and_set_bit(&ilsel_level_map, ILSEL_LEVELS); + } while (bit >=3D ILSEL_LEVELS); =20 __ilsel_enable(set, bit); =20 --=20 2.39.2