aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/xen/xen-selfballoon.c2
-rw-r--r--include/linux/mman.h2
-rw-r--r--mm/mmap.c14
-rw-r--r--mm/nommu.c15
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;
11extern int sysctl_overcommit_ratio; 11extern int sysctl_overcommit_ratio;
12extern struct percpu_counter vm_committed_as; 12extern struct percpu_counter vm_committed_as;
13 13
14unsigned long vm_memory_committed(void);
15
14static inline void vm_acct_memory(long pages) 16static 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);
diff --git a/mm/mmap.c b/mm/mmap.c
index 2d942353d68..b064822be82 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -89,6 +89,20 @@ int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
89struct percpu_counter vm_committed_as ____cacheline_aligned_in_smp; 89struct 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 */
99unsigned long vm_memory_committed(void)
100{
101 return percpu_counter_read_positive(&vm_committed_as);
102}
103EXPORT_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
67atomic_long_t mmap_pages_allocated; 67atomic_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 */
77unsigned long vm_memory_committed(void)
78{
79 return percpu_counter_read_positive(&vm_committed_as);
80}
81
82EXPORT_SYMBOL_GPL(vm_memory_committed);
83
69EXPORT_SYMBOL(mem_map); 84EXPORT_SYMBOL(mem_map);
70EXPORT_SYMBOL(num_physpages); 85EXPORT_SYMBOL(num_physpages);
71 86