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 /mm | |
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 'mm')
-rw-r--r-- | mm/page_alloc.c | 6 | ||||
-rw-r--r-- | mm/slab.c | 5 | ||||
-rw-r--r-- | mm/vmscan.c | 18 |
3 files changed, 13 insertions, 16 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 402a504f1228..32e796af12a1 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -2029,6 +2029,7 @@ static int find_next_best_node(int node, nodemask_t *used_node_mask) | |||
2029 | int n, val; | 2029 | int n, val; |
2030 | int min_val = INT_MAX; | 2030 | int min_val = INT_MAX; |
2031 | int best_node = -1; | 2031 | int best_node = -1; |
2032 | node_to_cpumask_ptr(tmp, 0); | ||
2032 | 2033 | ||
2033 | /* Use the local node if we haven't already */ | 2034 | /* Use the local node if we haven't already */ |
2034 | if (!node_isset(node, *used_node_mask)) { | 2035 | if (!node_isset(node, *used_node_mask)) { |
@@ -2037,7 +2038,6 @@ static int find_next_best_node(int node, nodemask_t *used_node_mask) | |||
2037 | } | 2038 | } |
2038 | 2039 | ||
2039 | for_each_node_state(n, N_HIGH_MEMORY) { | 2040 | for_each_node_state(n, N_HIGH_MEMORY) { |
2040 | cpumask_t tmp; | ||
2041 | 2041 | ||
2042 | /* Don't want a node to appear more than once */ | 2042 | /* Don't want a node to appear more than once */ |
2043 | if (node_isset(n, *used_node_mask)) | 2043 | if (node_isset(n, *used_node_mask)) |
@@ -2050,8 +2050,8 @@ static int find_next_best_node(int node, nodemask_t *used_node_mask) | |||
2050 | val += (n < node); | 2050 | val += (n < node); |
2051 | 2051 | ||
2052 | /* Give preference to headless and unused nodes */ | 2052 | /* Give preference to headless and unused nodes */ |
2053 | tmp = node_to_cpumask(n); | 2053 | node_to_cpumask_ptr_next(tmp, n); |
2054 | if (!cpus_empty(tmp)) | 2054 | if (!cpus_empty(*tmp)) |
2055 | val += PENALTY_FOR_NODE_WITH_CPUS; | 2055 | val += PENALTY_FOR_NODE_WITH_CPUS; |
2056 | 2056 | ||
2057 | /* Slight preference for less loaded node */ | 2057 | /* Slight preference for less loaded node */ |
@@ -1160,14 +1160,13 @@ static void __cpuinit cpuup_canceled(long cpu) | |||
1160 | struct kmem_cache *cachep; | 1160 | struct kmem_cache *cachep; |
1161 | struct kmem_list3 *l3 = NULL; | 1161 | struct kmem_list3 *l3 = NULL; |
1162 | int node = cpu_to_node(cpu); | 1162 | int node = cpu_to_node(cpu); |
1163 | node_to_cpumask_ptr(mask, node); | ||
1163 | 1164 | ||
1164 | list_for_each_entry(cachep, &cache_chain, next) { | 1165 | list_for_each_entry(cachep, &cache_chain, next) { |
1165 | struct array_cache *nc; | 1166 | struct array_cache *nc; |
1166 | struct array_cache *shared; | 1167 | struct array_cache *shared; |
1167 | struct array_cache **alien; | 1168 | struct array_cache **alien; |
1168 | cpumask_t mask; | ||
1169 | 1169 | ||
1170 | mask = node_to_cpumask(node); | ||
1171 | /* cpu is dead; no one can alloc from it. */ | 1170 | /* cpu is dead; no one can alloc from it. */ |
1172 | nc = cachep->array[cpu]; | 1171 | nc = cachep->array[cpu]; |
1173 | cachep->array[cpu] = NULL; | 1172 | cachep->array[cpu] = NULL; |
@@ -1183,7 +1182,7 @@ static void __cpuinit cpuup_canceled(long cpu) | |||
1183 | if (nc) | 1182 | if (nc) |
1184 | free_block(cachep, nc->entry, nc->avail, node); | 1183 | free_block(cachep, nc->entry, nc->avail, node); |
1185 | 1184 | ||
1186 | if (!cpus_empty(mask)) { | 1185 | if (!cpus_empty(*mask)) { |
1187 | spin_unlock_irq(&l3->list_lock); | 1186 | spin_unlock_irq(&l3->list_lock); |
1188 | goto free_array_cache; | 1187 | goto free_array_cache; |
1189 | } | 1188 | } |
diff --git a/mm/vmscan.c b/mm/vmscan.c index 4046434046e6..f80a5b7c057f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1647,11 +1647,10 @@ static int kswapd(void *p) | |||
1647 | struct reclaim_state reclaim_state = { | 1647 | struct reclaim_state reclaim_state = { |
1648 | .reclaimed_slab = 0, | 1648 | .reclaimed_slab = 0, |
1649 | }; | 1649 | }; |
1650 | cpumask_t cpumask; | 1650 | node_to_cpumask_ptr(cpumask, pgdat->node_id); |
1651 | 1651 | ||
1652 | cpumask = node_to_cpumask(pgdat->node_id); | 1652 | if (!cpus_empty(*cpumask)) |
1653 | if (!cpus_empty(cpumask)) | 1653 | set_cpus_allowed_ptr(tsk, cpumask); |
1654 | set_cpus_allowed(tsk, cpumask); | ||
1655 | current->reclaim_state = &reclaim_state; | 1654 | current->reclaim_state = &reclaim_state; |
1656 | 1655 | ||
1657 | /* | 1656 | /* |
@@ -1880,17 +1879,16 @@ out: | |||
1880 | static int __devinit cpu_callback(struct notifier_block *nfb, | 1879 | static int __devinit cpu_callback(struct notifier_block *nfb, |
1881 | unsigned long action, void *hcpu) | 1880 | unsigned long action, void *hcpu) |
1882 | { | 1881 | { |
1883 | pg_data_t *pgdat; | ||
1884 | cpumask_t mask; | ||
1885 | int nid; | 1882 | int nid; |
1886 | 1883 | ||
1887 | if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN) { | 1884 | if (action == CPU_ONLINE || action == CPU_ONLINE_FROZEN) { |
1888 | for_each_node_state(nid, N_HIGH_MEMORY) { | 1885 | for_each_node_state(nid, N_HIGH_MEMORY) { |
1889 | pgdat = NODE_DATA(nid); | 1886 | pg_data_t *pgdat = NODE_DATA(nid); |
1890 | mask = node_to_cpumask(pgdat->node_id); | 1887 | node_to_cpumask_ptr(mask, pgdat->node_id); |
1891 | if (any_online_cpu(mask) != NR_CPUS) | 1888 | |
1889 | if (any_online_cpu(*mask) < nr_cpu_ids) | ||
1892 | /* One of our CPUs online: restore mask */ | 1890 | /* One of our CPUs online: restore mask */ |
1893 | set_cpus_allowed(pgdat->kswapd, mask); | 1891 | set_cpus_allowed_ptr(pgdat->kswapd, mask); |
1894 | } | 1892 | } |
1895 | } | 1893 | } |
1896 | return NOTIFY_OK; | 1894 | return NOTIFY_OK; |