diff options
author | Konstantin Khlebnikov <k.khlebnikov@samsung.com> | 2014-09-10 09:40:34 +1000 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2014-09-10 09:40:34 +1000 |
commit | ba7348a3d53ef2fb93b5a5586e795251cc7a9582 (patch) | |
tree | 8f5f036d5f4220466de410e7d56d15a28b5adb03 /fs | |
parent | 216c3fe01d2ae58225716d7010301dc5c9b0c3ef (diff) |
mm: introduce common page state for ballooned memory
Add page state PageBallon() and functions __Set/ClearPageBalloon. Like
PageBuddy() PageBalloon() looks like page-flag but actually this is
special state of page->_mapcount counter. There is no conflict because
ballooned pages cannot be mapped and cannot be in buddy allocator.
Ballooned pages are counted in vmstat counter NR_BALLOON_PAGES, it's shown
them in /proc/meminfo and /proc/meminfo. Also this patch it exports
PageBallon into userspace via /proc/kpageflags as KPF_BALLOON.
All this code including mm/balloon_compaction.o is under
CONFIG_MEMORY_BALLOON, it should be selected by ballooning driver which
want use this feature.
Signed-off-by: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
Cc: Rafael Aquini <aquini@redhat.com>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/proc/meminfo.c | 6 | ||||
-rw-r--r-- | fs/proc/page.c | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index aa1eee06420f..f897fbf278c6 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c @@ -138,6 +138,9 @@ static int meminfo_proc_show(struct seq_file *m, void *v) #ifdef CONFIG_TRANSPARENT_HUGEPAGE "AnonHugePages: %8lu kB\n" #endif +#ifdef CONFIG_MEMORY_BALLOON + "BalloonPages: %8lu kB\n" +#endif , K(i.totalram), K(i.freeram), @@ -193,6 +196,9 @@ static int meminfo_proc_show(struct seq_file *m, void *v) ,K(global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) * HPAGE_PMD_NR) #endif +#ifdef CONFIG_MEMORY_BALLOON + ,K(global_page_state(NR_BALLOON_PAGES)) +#endif ); hugetlb_report_meminfo(m); diff --git a/fs/proc/page.c b/fs/proc/page.c index e647c55275d9..1e3187da1fed 100644 --- a/fs/proc/page.c +++ b/fs/proc/page.c @@ -133,6 +133,9 @@ u64 stable_page_flags(struct page *page) if (PageBuddy(page)) u |= 1 << KPF_BUDDY; + if (PageBalloon(page)) + u |= 1 << KPF_BALLOON; + u |= kpf_copy_bit(k, KPF_LOCKED, PG_locked); u |= kpf_copy_bit(k, KPF_SLAB, PG_slab); |