diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index df54e2fc8ee0..dde04ff4be31 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1213,18 +1213,21 @@ static void __get_page_state(struct page_state *ret, int nr, cpumask_t *cpumask) | |||
1213 | { | 1213 | { |
1214 | int cpu = 0; | 1214 | int cpu = 0; |
1215 | 1215 | ||
1216 | memset(ret, 0, sizeof(*ret)); | 1216 | memset(ret, 0, nr * sizeof(unsigned long)); |
1217 | cpus_and(*cpumask, *cpumask, cpu_online_map); | 1217 | cpus_and(*cpumask, *cpumask, cpu_online_map); |
1218 | 1218 | ||
1219 | cpu = first_cpu(*cpumask); | 1219 | cpu = first_cpu(*cpumask); |
1220 | while (cpu < NR_CPUS) { | 1220 | while (cpu < NR_CPUS) { |
1221 | unsigned long *in, *out, off; | 1221 | unsigned long *in, *out, off; |
1222 | 1222 | ||
1223 | if (!cpu_isset(cpu, *cpumask)) | ||
1224 | continue; | ||
1225 | |||
1223 | in = (unsigned long *)&per_cpu(page_states, cpu); | 1226 | in = (unsigned long *)&per_cpu(page_states, cpu); |
1224 | 1227 | ||
1225 | cpu = next_cpu(cpu, *cpumask); | 1228 | cpu = next_cpu(cpu, *cpumask); |
1226 | 1229 | ||
1227 | if (cpu < NR_CPUS) | 1230 | if (likely(cpu < NR_CPUS)) |
1228 | prefetch(&per_cpu(page_states, cpu)); | 1231 | prefetch(&per_cpu(page_states, cpu)); |
1229 | 1232 | ||
1230 | out = (unsigned long *)ret; | 1233 | out = (unsigned long *)ret; |
@@ -1799,7 +1802,7 @@ void zonetable_add(struct zone *zone, int nid, int zid, unsigned long pfn, | |||
1799 | memmap_init_zone((size), (nid), (zone), (start_pfn)) | 1802 | memmap_init_zone((size), (nid), (zone), (start_pfn)) |
1800 | #endif | 1803 | #endif |
1801 | 1804 | ||
1802 | static int __meminit zone_batchsize(struct zone *zone) | 1805 | static int __cpuinit zone_batchsize(struct zone *zone) |
1803 | { | 1806 | { |
1804 | int batch; | 1807 | int batch; |
1805 | 1808 | ||
@@ -1886,14 +1889,13 @@ static void setup_pagelist_highmark(struct per_cpu_pageset *p, | |||
1886 | * not check if the processor is online before following the pageset pointer. | 1889 | * not check if the processor is online before following the pageset pointer. |
1887 | * Other parts of the kernel may not check if the zone is available. | 1890 | * Other parts of the kernel may not check if the zone is available. |
1888 | */ | 1891 | */ |
1889 | static struct per_cpu_pageset | 1892 | static struct per_cpu_pageset boot_pageset[NR_CPUS]; |
1890 | boot_pageset[NR_CPUS]; | ||
1891 | 1893 | ||
1892 | /* | 1894 | /* |
1893 | * Dynamically allocate memory for the | 1895 | * Dynamically allocate memory for the |
1894 | * per cpu pageset array in struct zone. | 1896 | * per cpu pageset array in struct zone. |
1895 | */ | 1897 | */ |
1896 | static int __meminit process_zones(int cpu) | 1898 | static int __cpuinit process_zones(int cpu) |
1897 | { | 1899 | { |
1898 | struct zone *zone, *dzone; | 1900 | struct zone *zone, *dzone; |
1899 | 1901 | ||
@@ -1934,7 +1936,7 @@ static inline void free_zone_pagesets(int cpu) | |||
1934 | } | 1936 | } |
1935 | } | 1937 | } |
1936 | 1938 | ||
1937 | static int __meminit pageset_cpuup_callback(struct notifier_block *nfb, | 1939 | static int __cpuinit pageset_cpuup_callback(struct notifier_block *nfb, |
1938 | unsigned long action, | 1940 | unsigned long action, |
1939 | void *hcpu) | 1941 | void *hcpu) |
1940 | { | 1942 | { |