From: Kuan-Wei Chiu <visitorckw@gmail.com>
To: yury.norov@gmail.com
Cc: linux@rasmusvillemoes.dk, richard120310@gmail.com,
jserv@ccns.ncku.edu.tw, mark.rutland@arm.com,
linux-kernel@vger.kernel.org,
Kuan-Wei Chiu <visitorckw@gmail.com>,
Yu-Chun Lin <eleanor15x@gmail.com>
Subject: [PATCH] cpumask: Optimize cpumask_any_but()
Date: Fri, 17 Jan 2025 22:26:58 +0800 [thread overview]
Message-ID: <20250117142658.297325-1-visitorckw@gmail.com> (raw)
The cpumask_any_but() function can avoid using a loop to determine the
CPU index to return. If the first set bit in the cpumask is not equal
to the specified CPU, we can directly return the index of the first set
bit. Otherwise, we return the next set bit's index.
This optimization replaces the loop with a single if statement,
allowing the compiler to generate more concise and efficient code.
As a result, the size of the bzImage built with x86 defconfig is
reduced by 4096 bytes:
* Before:
$ size arch/x86/boot/bzImage
text data bss dec hex filename
13537280 1024 0 13538304 ce9400 arch/x86/boot/bzImage
* After:
$ size arch/x86/boot/bzImage
text data bss dec hex filename
13533184 1024 0 13534208 ce8400 arch/x86/boot/bzImage
Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
---
Not sure how to measure the efficiency difference, but I guess this
patch might be slightly more efficient or nearly the same as before. If
you have any good ideas for measuring efficiency, please let me know!
include/linux/cpumask.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
index 9278a50d514f..b769fcdbaa10 100644
--- a/include/linux/cpumask.h
+++ b/include/linux/cpumask.h
@@ -404,10 +404,10 @@ unsigned int cpumask_any_but(const struct cpumask *mask, unsigned int cpu)
unsigned int i;
cpumask_check(cpu);
- for_each_cpu(i, mask)
- if (i != cpu)
- break;
- return i;
+ i = find_first_bit(cpumask_bits(mask), small_cpumask_bits);
+ if (i != cpu)
+ return i;
+ return find_next_bit(cpumask_bits(mask), small_cpumask_bits, i + 1);
}
/**
--
2.34.1
next reply other threads:[~2025-01-17 14:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-17 14:26 Kuan-Wei Chiu [this message]
2025-01-17 14:59 ` [PATCH] cpumask: Optimize cpumask_any_but() I Hsin Cheng
2025-01-17 16:32 ` Kuan-Wei Chiu
2025-01-17 16:32 ` Yury Norov
2025-01-18 7:32 ` Kuan-Wei Chiu
2025-01-23 22:39 ` Yury Norov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250117142658.297325-1-visitorckw@gmail.com \
--to=visitorckw@gmail.com \
--cc=eleanor15x@gmail.com \
--cc=jserv@ccns.ncku.edu.tw \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mark.rutland@arm.com \
--cc=richard120310@gmail.com \
--cc=yury.norov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox