diff options
author | Mike Travis <travis@sgi.com> | 2008-04-04 21:11:10 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-19 13:44:59 -0400 |
commit | c5f59f0833df945eef7ff35f3dc6ba61c5f293dd (patch) | |
tree | 32c1a94847d0154051c79011212d401462723d55 /kernel/sched.c | |
parent | b53e921ba1cff8453dc9a87a84052fa12d5b30bd (diff) |
nodemask: use new node_to_cpumask_ptr function
* Use new node_to_cpumask_ptr. This creates a pointer to the
cpumask for a given node. This definition is in mm patch:
asm-generic-add-node_to_cpumask_ptr-macro.patch
* Use new set_cpus_allowed_ptr function.
Depends on:
[mm-patch]: asm-generic-add-node_to_cpumask_ptr-macro.patch
[sched-devel]: sched: add new set_cpus_allowed_ptr function
[x86/latest]: x86: add cpus_scnprintf function
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Greg Banks <gnb@melbourne.sgi.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Mike Travis <travis@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 1a8252385c4d..9f7980f8ec00 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -6448,7 +6448,7 @@ init_sched_build_groups(cpumask_t span, const cpumask_t *cpu_map, | |||
6448 | * | 6448 | * |
6449 | * Should use nodemask_t. | 6449 | * Should use nodemask_t. |
6450 | */ | 6450 | */ |
6451 | static int find_next_best_node(int node, unsigned long *used_nodes) | 6451 | static int find_next_best_node(int node, nodemask_t *used_nodes) |
6452 | { | 6452 | { |
6453 | int i, n, val, min_val, best_node = 0; | 6453 | int i, n, val, min_val, best_node = 0; |
6454 | 6454 | ||
@@ -6462,7 +6462,7 @@ static int find_next_best_node(int node, unsigned long *used_nodes) | |||
6462 | continue; | 6462 | continue; |
6463 | 6463 | ||
6464 | /* Skip already used nodes */ | 6464 | /* Skip already used nodes */ |
6465 | if (test_bit(n, used_nodes)) | 6465 | if (node_isset(n, *used_nodes)) |
6466 | continue; | 6466 | continue; |
6467 | 6467 | ||
6468 | /* Simple min distance search */ | 6468 | /* Simple min distance search */ |
@@ -6474,14 +6474,13 @@ static int find_next_best_node(int node, unsigned long *used_nodes) | |||
6474 | } | 6474 | } |
6475 | } | 6475 | } |
6476 | 6476 | ||
6477 | set_bit(best_node, used_nodes); | 6477 | node_set(best_node, *used_nodes); |
6478 | return best_node; | 6478 | return best_node; |
6479 | } | 6479 | } |
6480 | 6480 | ||
6481 | /** | 6481 | /** |
6482 | * sched_domain_node_span - get a cpumask for a node's sched_domain | 6482 | * sched_domain_node_span - get a cpumask for a node's sched_domain |
6483 | * @node: node whose cpumask we're constructing | 6483 | * @node: node whose cpumask we're constructing |
6484 | * @size: number of nodes to include in this span | ||
6485 | * | 6484 | * |
6486 | * Given a node, construct a good cpumask for its sched_domain to span. It | 6485 | * Given a node, construct a good cpumask for its sched_domain to span. It |
6487 | * should be one that prevents unnecessary balancing, but also spreads tasks | 6486 | * should be one that prevents unnecessary balancing, but also spreads tasks |
@@ -6489,22 +6488,22 @@ static int find_next_best_node(int node, unsigned long *used_nodes) | |||
6489 | */ | 6488 | */ |
6490 | static cpumask_t sched_domain_node_span(int node) | 6489 | static cpumask_t sched_domain_node_span(int node) |
6491 | { | 6490 | { |
6492 | DECLARE_BITMAP(used_nodes, MAX_NUMNODES); | 6491 | nodemask_t used_nodes; |
6493 | cpumask_t span, nodemask; | 6492 | cpumask_t span; |
6493 | node_to_cpumask_ptr(nodemask, node); | ||
6494 | int i; | 6494 | int i; |
6495 | 6495 | ||
6496 | cpus_clear(span); | 6496 | cpus_clear(span); |
6497 | bitmap_zero(used_nodes, MAX_NUMNODES); | 6497 | nodes_clear(used_nodes); |
6498 | 6498 | ||
6499 | nodemask = node_to_cpumask(node); | 6499 | cpus_or(span, span, *nodemask); |
6500 | cpus_or(span, span, nodemask); | 6500 | node_set(node, used_nodes); |
6501 | set_bit(node, used_nodes); | ||
6502 | 6501 | ||
6503 | for (i = 1; i < SD_NODES_PER_DOMAIN; i++) { | 6502 | for (i = 1; i < SD_NODES_PER_DOMAIN; i++) { |
6504 | int next_node = find_next_best_node(node, used_nodes); | 6503 | int next_node = find_next_best_node(node, &used_nodes); |
6505 | 6504 | ||
6506 | nodemask = node_to_cpumask(next_node); | 6505 | node_to_cpumask_ptr_next(nodemask, next_node); |
6507 | cpus_or(span, span, nodemask); | 6506 | cpus_or(span, span, *nodemask); |
6508 | } | 6507 | } |
6509 | 6508 | ||
6510 | return span; | 6509 | return span; |
@@ -6901,6 +6900,7 @@ static int build_sched_domains(const cpumask_t *cpu_map) | |||
6901 | for (j = 0; j < MAX_NUMNODES; j++) { | 6900 | for (j = 0; j < MAX_NUMNODES; j++) { |
6902 | cpumask_t tmp, notcovered; | 6901 | cpumask_t tmp, notcovered; |
6903 | int n = (i + j) % MAX_NUMNODES; | 6902 | int n = (i + j) % MAX_NUMNODES; |
6903 | node_to_cpumask_ptr(pnodemask, n); | ||
6904 | 6904 | ||
6905 | cpus_complement(notcovered, covered); | 6905 | cpus_complement(notcovered, covered); |
6906 | cpus_and(tmp, notcovered, *cpu_map); | 6906 | cpus_and(tmp, notcovered, *cpu_map); |
@@ -6908,8 +6908,7 @@ static int build_sched_domains(const cpumask_t *cpu_map) | |||
6908 | if (cpus_empty(tmp)) | 6908 | if (cpus_empty(tmp)) |
6909 | break; | 6909 | break; |
6910 | 6910 | ||
6911 | nodemask = node_to_cpumask(n); | 6911 | cpus_and(tmp, tmp, *pnodemask); |
6912 | cpus_and(tmp, tmp, nodemask); | ||
6913 | if (cpus_empty(tmp)) | 6912 | if (cpus_empty(tmp)) |
6914 | continue; | 6913 | continue; |
6915 | 6914 | ||