lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20231118155105.25678-25-yury.norov@gmail.com> Date: Sat, 18 Nov 2023 07:50:55 -0800 From: Yury Norov <yury.norov@...il.com> To: linux-kernel@...r.kernel.org, Karsten Keil <isdn@...ux-pingi.de>, netdev@...r.kernel.org Cc: Yury Norov <yury.norov@...il.com>, Jan Kara <jack@...e.cz>, Mirsad Todorovac <mirsad.todorovac@....unizg.hr>, Matthew Wilcox <willy@...radead.org>, Rasmus Villemoes <linux@...musvillemoes.dk>, Andy Shevchenko <andriy.shevchenko@...ux.intel.com>, Maxim Kuvyrkov <maxim.kuvyrkov@...aro.org>, Alexey Klimov <klimov.linux@...il.com> Subject: [PATCH 24/34] mISDN: optimize get_free_devid() 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 <yury.norov@...il.com> --- 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 = find_and_set_bit((u_long *)&device_ids, MAX_DEVICE_ID + 1); - for (i = 0; i <= 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 <= MAX_DEVICE_ID ? i : -EBUSY; } int -- 2.39.2
Powered by blists - more mailing lists