diff options
Diffstat (limited to 'mm/quicklist.c')
| -rw-r--r-- | mm/quicklist.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/mm/quicklist.c b/mm/quicklist.c index 3f703f7cb398..8dbb6805ef35 100644 --- a/mm/quicklist.c +++ b/mm/quicklist.c | |||
| @@ -26,7 +26,10 @@ DEFINE_PER_CPU(struct quicklist, quicklist)[CONFIG_NR_QUICK]; | |||
| 26 | static unsigned long max_pages(unsigned long min_pages) | 26 | static unsigned long max_pages(unsigned long min_pages) |
| 27 | { | 27 | { |
| 28 | unsigned long node_free_pages, max; | 28 | unsigned long node_free_pages, max; |
| 29 | struct zone *zones = NODE_DATA(numa_node_id())->node_zones; | 29 | int node = numa_node_id(); |
| 30 | struct zone *zones = NODE_DATA(node)->node_zones; | ||
| 31 | int num_cpus_on_node; | ||
| 32 | node_to_cpumask_ptr(cpumask_on_node, node); | ||
| 30 | 33 | ||
| 31 | node_free_pages = | 34 | node_free_pages = |
| 32 | #ifdef CONFIG_ZONE_DMA | 35 | #ifdef CONFIG_ZONE_DMA |
| @@ -38,6 +41,10 @@ static unsigned long max_pages(unsigned long min_pages) | |||
| 38 | zone_page_state(&zones[ZONE_NORMAL], NR_FREE_PAGES); | 41 | zone_page_state(&zones[ZONE_NORMAL], NR_FREE_PAGES); |
| 39 | 42 | ||
| 40 | max = node_free_pages / FRACTION_OF_NODE_MEM; | 43 | max = node_free_pages / FRACTION_OF_NODE_MEM; |
| 44 | |||
| 45 | num_cpus_on_node = cpus_weight_nr(*cpumask_on_node); | ||
| 46 | max /= num_cpus_on_node; | ||
| 47 | |||
| 41 | return max(max, min_pages); | 48 | return max(max, min_pages); |
| 42 | } | 49 | } |
| 43 | 50 | ||
