diff options
-rw-r--r-- | drivers/xen/xen-selfballoon.c | 2 | ||||
-rw-r--r-- | include/linux/mman.h | 2 | ||||
-rw-r--r-- | mm/mmap.c | 14 | ||||
-rw-r--r-- | mm/nommu.c | 15 |
4 files changed, 32 insertions, 1 deletions
diff --git a/drivers/xen/xen-selfballoon.c b/drivers/xen/xen-selfballoon.c index 7d041cb6da2..2552d3e0a70 100644 --- a/drivers/xen/xen-selfballoon.c +++ b/drivers/xen/xen-selfballoon.c | |||
@@ -222,7 +222,7 @@ static void selfballoon_process(struct work_struct *work) | |||
222 | if (xen_selfballooning_enabled) { | 222 | if (xen_selfballooning_enabled) { |
223 | cur_pages = totalram_pages; | 223 | cur_pages = totalram_pages; |
224 | tgt_pages = cur_pages; /* default is no change */ | 224 | tgt_pages = cur_pages; /* default is no change */ |
225 | goal_pages = percpu_counter_read_positive(&vm_committed_as) + | 225 | goal_pages = vm_memory_committed() + |
226 | totalreserve_pages + | 226 | totalreserve_pages + |
227 | MB2PAGES(selfballoon_reserved_mb); | 227 | MB2PAGES(selfballoon_reserved_mb); |
228 | #ifdef CONFIG_FRONTSWAP | 228 | #ifdef CONFIG_FRONTSWAP |
diff --git a/include/linux/mman.h b/include/linux/mman.h index d09dde1e57f..9aa863da287 100644 --- a/include/linux/mman.h +++ b/include/linux/mman.h | |||
@@ -11,6 +11,8 @@ extern int sysctl_overcommit_memory; | |||
11 | extern int sysctl_overcommit_ratio; | 11 | extern int sysctl_overcommit_ratio; |
12 | extern struct percpu_counter vm_committed_as; | 12 | extern struct percpu_counter vm_committed_as; |
13 | 13 | ||
14 | unsigned long vm_memory_committed(void); | ||
15 | |||
14 | static inline void vm_acct_memory(long pages) | 16 | static inline void vm_acct_memory(long pages) |
15 | { | 17 | { |
16 | percpu_counter_add(&vm_committed_as, pages); | 18 | percpu_counter_add(&vm_committed_as, pages); |
@@ -89,6 +89,20 @@ int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT; | |||
89 | struct percpu_counter vm_committed_as ____cacheline_aligned_in_smp; | 89 | struct percpu_counter vm_committed_as ____cacheline_aligned_in_smp; |
90 | 90 | ||
91 | /* | 91 | /* |
92 | * The global memory commitment made in the system can be a metric | ||
93 | * that can be used to drive ballooning decisions when Linux is hosted | ||
94 | * as a guest. On Hyper-V, the host implements a policy engine for dynamically | ||
95 | * balancing memory across competing virtual machines that are hosted. | ||
96 | * Several metrics drive this policy engine including the guest reported | ||
97 | * memory commitment. | ||
98 | */ | ||
99 | unsigned long vm_memory_committed(void) | ||
100 | { | ||
101 | return percpu_counter_read_positive(&vm_committed_as); | ||
102 | } | ||
103 | EXPORT_SYMBOL_GPL(vm_memory_committed); | ||
104 | |||
105 | /* | ||
92 | * Check that a process has enough memory to allocate a new virtual | 106 | * Check that a process has enough memory to allocate a new virtual |
93 | * mapping. 0 means there is enough memory for the allocation to | 107 | * mapping. 0 means there is enough memory for the allocation to |
94 | * succeed and -ENOMEM implies there is not. | 108 | * succeed and -ENOMEM implies there is not. |
diff --git a/mm/nommu.c b/mm/nommu.c index 45131b41bcd..79c3cac87af 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -66,6 +66,21 @@ int heap_stack_gap = 0; | |||
66 | 66 | ||
67 | atomic_long_t mmap_pages_allocated; | 67 | atomic_long_t mmap_pages_allocated; |
68 | 68 | ||
69 | /* | ||
70 | * The global memory commitment made in the system can be a metric | ||
71 | * that can be used to drive ballooning decisions when Linux is hosted | ||
72 | * as a guest. On Hyper-V, the host implements a policy engine for dynamically | ||
73 | * balancing memory across competing virtual machines that are hosted. | ||
74 | * Several metrics drive this policy engine including the guest reported | ||
75 | * memory commitment. | ||
76 | */ | ||
77 | unsigned long vm_memory_committed(void) | ||
78 | { | ||
79 | return percpu_counter_read_positive(&vm_committed_as); | ||
80 | } | ||
81 | |||
82 | EXPORT_SYMBOL_GPL(vm_memory_committed); | ||
83 | |||
69 | EXPORT_SYMBOL(mem_map); | 84 | EXPORT_SYMBOL(mem_map); |
70 | EXPORT_SYMBOL(num_physpages); | 85 | EXPORT_SYMBOL(num_physpages); |
71 | 86 | ||