From: Paul Jackson <pj@sgi.com>
To: William Lee Irwin III <wli@holomorphy.com>
Cc: colpatch@us.ibm.com, linux-kernel@vger.kernel.org,
mbligh@aracnet.com, akpm@osdl.org, haveblue@us.ibm.com,
hch@infradead.org
Subject: Re: [PATCH] Introduce nodemask_t ADT [0/7]
Date: Sat, 20 Mar 2004 00:02:35 -0800 [thread overview]
Message-ID: <20040320000235.5e72040a.pj@sgi.com> (raw)
In-Reply-To: <20040320031843.GY2045@holomorphy.com>
Other ways to reduce cpumask copies:
1) Additional macros, for example a boolean cpus_intersect(x,y), which
is true iff x overlaps y, and saves the tmp cpumask in the code:
cpus_and(tmp, target_cpu_mask, allowed_mask);
if (!cpus_empty(tmp)) {
or a cpus_subset(x,y) "is x a subset of y" macro to replace this:
cpus_and(tmp, cpumask, cpu_callout_map);
BUG_ON(!cpus_equal(cpumask, tmp));
with this:
BUG_ON(!cpus_subset(cpumask, cpu_callout_map));
2) Using existing macros more carefully, for example using cpu_set() to
set the bit in the following, and saving the copy by assignment:
pending_irq_balance_cpumask[irq] = cpumask_of_cpu(new_cpu);
or using the existing cpu_isset() macro, replacing the code (seen
in part above ;):
cpus_and(allowed_mask, cpu_online_map, irq_affinity[selected_irq]);
target_cpu_mask = cpumask_of_cpu(min_loaded);
cpus_and(tmp, target_cpu_mask, allowed_mask);
if (!cpus_empty(tmp)) {
with the code:
if (cpu_isset(min_loaded, cpu_online_map) && cpu_isset(min_loaded, irq_affinity[selected_irq]) {
The current nested and ifdef'd complexity of the cpumask macro headers works
against such efficient coding - it's non-trivial to see just what macros are
available. The youngins reading this may not appreciate the value of reducing
brain load; but the oldins might.
2) Pass a cpumask pointer to a function that generates a cpumask instead of
taking one as a return value, letting the called function fill in the memory
so referenced. We should not be trying to hide such details, unless we can
do so seamlessly and consistent with traditional 'C' semantics.
3) Passing a const cpumask pointer to a function that examines a cpumask
instead of passing the cpumask by value (on small systems, its one word
either way - on big systems, it saves copying a multiword mask on the
stack).
4) Throwing away dead code:
static int physical_balance = 0;
cpumask_t tmp;
cpus_shift_right(tmp, cpu_online_map, 2);
if (smp_num_siblings > 1 && !cpus_empty(tmp)
physical_balance = 1;
The above code fragments are from arch/i386 in 2.6.3-rc1-mm1.
--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.650.933.1373
next prev parent reply other threads:[~2004-03-20 8:04 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-18 23:04 [PATCH] Introduce nodemask_t ADT [0/7] Matthew Dobson
2004-03-18 23:23 ` Jesse Barnes
2004-03-18 23:32 ` Martin J. Bligh
2004-03-18 23:37 ` Jesse Barnes
2004-03-18 23:43 ` Martin J. Bligh
2004-03-18 23:59 ` Jesse Barnes
2004-03-19 16:20 ` Martin J. Bligh
2004-03-19 0:58 ` Zwane Mwaikambo
2004-03-19 1:11 ` Jesse Barnes
2004-03-19 1:34 ` Zwane Mwaikambo
2004-03-19 1:40 ` Jesse Barnes
2004-03-19 1:08 ` Paul Jackson
2004-03-19 0:01 ` Matthew Dobson
2004-03-18 23:58 ` Matthew Dobson
2004-03-19 2:55 ` William Lee Irwin III
2004-03-19 0:59 ` Paul Jackson
2004-03-19 1:19 ` Matthew Dobson
2004-03-19 1:45 ` Paul Jackson
2004-03-19 22:51 ` Matthew Dobson
2004-03-19 23:42 ` Paul Jackson
2004-03-19 1:48 ` Paul Jackson
2004-03-19 1:56 ` Paul Jackson
2004-03-19 23:02 ` Matthew Dobson
2004-03-20 0:59 ` Paul Jackson
2004-03-20 3:18 ` William Lee Irwin III
2004-03-20 6:09 ` Paul Jackson
2004-03-20 9:36 ` William Lee Irwin III
2004-03-22 23:59 ` Paul Jackson
2004-03-23 2:12 ` William Lee Irwin III
2004-03-23 1:21 ` Paul Jackson
2004-03-23 2:10 ` William Lee Irwin III
2004-03-23 1:24 ` Paul Jackson
2004-03-20 8:02 ` Paul Jackson [this message]
2004-03-20 11:13 ` William Lee Irwin III
2004-03-21 4:19 ` Paul Jackson
2004-03-21 4:36 ` William Lee Irwin III
2004-03-21 7:59 ` Nick Piggin
2004-03-23 1:12 ` Paul Jackson
2004-03-23 2:09 ` William Lee Irwin III
2004-03-23 2:39 ` Paul Jackson
2004-03-23 3:13 ` William Lee Irwin III
2004-03-23 3:36 ` Paul Jackson
2004-03-23 3:59 ` William Lee Irwin III
2004-03-23 4:03 ` Paul Jackson
[not found] ` <20040325012457.51f708c7.pj@sgi.com>
[not found] ` <20040325101827.GO791@holomorphy.com>
2004-03-26 22:36 ` Sparc64, cpumask_t and struct arguments (was: [PATCH] Introduce nodemask_t ADT) Paul Jackson
2004-03-26 22:54 ` David S. Miller
2004-03-26 23:18 ` Paul Jackson
2004-03-26 23:29 ` Paul Jackson
2004-03-27 0:08 ` David S. Miller
2004-03-27 0:50 ` Paul Jackson
2004-03-26 23:37 ` Paul Jackson
[not found] <1BeOx-7ax-55@gated-at.bofh.it>
[not found] ` <1BgGq-DU-5@gated-at.bofh.it>
[not found] ` <1BgZN-Vk-1@gated-at.bofh.it>
2004-03-19 2:04 ` [PATCH] Introduce nodemask_t ADT [0/7] Andi Kleen
2004-03-19 2:38 ` Paul Jackson
2004-03-19 23:09 ` Matthew Dobson
2004-03-20 0:47 ` Paul Jackson
2004-03-20 1:14 ` Paul Jackson
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=20040320000235.5e72040a.pj@sgi.com \
--to=pj@sgi.com \
--cc=akpm@osdl.org \
--cc=colpatch@us.ibm.com \
--cc=haveblue@us.ibm.com \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbligh@aracnet.com \
--cc=wli@holomorphy.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