mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 04:01:48 -04:00
mm: correctly update zone->managed_pages
Enhance adjust_managed_page_count() to adjust totalhigh_pages for highmem pages. And change code which directly adjusts totalram_pages to use adjust_managed_page_count() because it adjusts totalram_pages, totalhigh_pages and zone->managed_pages altogether in a safe way. Remove inc_totalhigh_pages() and dec_totalhigh_pages() from xen/balloon driver bacause adjust_managed_page_count() has already adjusted totalhigh_pages. This patch also fixes two bugs: 1) enhances virtio_balloon driver to adjust totalhigh_pages when reserve/unreserve pages. 2) enhance memory_hotplug.c to adjust totalhigh_pages when hot-removing memory. We still need to deal with modifications of totalram_pages in file arch/powerpc/platforms/pseries/cmm.c, but need help from PPC experts. [[email protected]: remove ifdef, per Wanpeng Li, virtio_balloon.c cleanup, per Sergei] [[email protected]: export adjust_managed_page_count() to modules, for drivers/virtio/virtio_balloon.c] Signed-off-by: Jiang Liu <[email protected]> Cc: Chris Metcalf <[email protected]> Cc: Rusty Russell <[email protected]> Cc: "Michael S. Tsirkin" <[email protected]> Cc: Konrad Rzeszutek Wilk <[email protected]> Cc: Jeremy Fitzhardinge <[email protected]> Cc: Wen Congyang <[email protected]> Cc: Tang Chen <[email protected]> Cc: Yasuaki Ishimatsu <[email protected]> Cc: Mel Gorman <[email protected]> Cc: Minchan Kim <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: <[email protected]> Cc: Arnd Bergmann <[email protected]> Cc: Catalin Marinas <[email protected]> Cc: David Howells <[email protected]> Cc: Geert Uytterhoeven <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Jianguo Wu <[email protected]> Cc: Joonsoo Kim <[email protected]> Cc: Kamezawa Hiroyuki <[email protected]> Cc: Marek Szyprowski <[email protected]> Cc: Michel Lespinasse <[email protected]> Cc: Rik van Riel <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Will Deacon <[email protected]> Cc: Yinghai Lu <[email protected]> Cc: Russell King <[email protected]> Cc: Sergei Shtylyov <[email protected]> Cc: Wu Fengguang <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
170a5a7eb2
commit
3dcc0571cd
5 changed files with 19 additions and 40 deletions
|
|
@ -89,14 +89,6 @@ EXPORT_SYMBOL_GPL(balloon_stats);
|
|||
/* We increase/decrease in batches which fit in a page */
|
||||
static xen_pfn_t frame_list[PAGE_SIZE / sizeof(unsigned long)];
|
||||
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
#define inc_totalhigh_pages() (totalhigh_pages++)
|
||||
#define dec_totalhigh_pages() (totalhigh_pages--)
|
||||
#else
|
||||
#define inc_totalhigh_pages() do {} while (0)
|
||||
#define dec_totalhigh_pages() do {} while (0)
|
||||
#endif
|
||||
|
||||
/* List of ballooned pages, threaded through the mem_map array. */
|
||||
static LIST_HEAD(ballooned_pages);
|
||||
|
||||
|
|
@ -132,9 +124,7 @@ static void __balloon_append(struct page *page)
|
|||
static void balloon_append(struct page *page)
|
||||
{
|
||||
__balloon_append(page);
|
||||
if (PageHighMem(page))
|
||||
dec_totalhigh_pages();
|
||||
totalram_pages--;
|
||||
adjust_managed_page_count(page, -1);
|
||||
}
|
||||
|
||||
/* balloon_retrieve: rescue a page from the balloon, if it is not empty. */
|
||||
|
|
@ -151,13 +141,12 @@ static struct page *balloon_retrieve(bool prefer_highmem)
|
|||
page = list_entry(ballooned_pages.next, struct page, lru);
|
||||
list_del(&page->lru);
|
||||
|
||||
if (PageHighMem(page)) {
|
||||
if (PageHighMem(page))
|
||||
balloon_stats.balloon_high--;
|
||||
inc_totalhigh_pages();
|
||||
} else
|
||||
else
|
||||
balloon_stats.balloon_low--;
|
||||
|
||||
totalram_pages++;
|
||||
adjust_managed_page_count(page, 1);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
|
@ -372,9 +361,7 @@ static enum bp_state increase_reservation(unsigned long nr_pages)
|
|||
#endif
|
||||
|
||||
/* Relinquish the page back to the allocator. */
|
||||
ClearPageReserved(page);
|
||||
init_page_count(page);
|
||||
__free_page(page);
|
||||
__free_reserved_page(page);
|
||||
}
|
||||
|
||||
balloon_stats.current_pages += rc;
|
||||
|
|
|
|||
Loading…
Reference in a new issue