diff options
author | Xinyu Chen <xinyu.chen@freescale.com> | 2012-02-02 16:58:05 +0800 |
---|---|---|
committer | Xinyu Chen <xinyu.chen@freescale.com> | 2012-02-02 16:58:05 +0800 |
commit | 599a980adc5c2ba32f6aedcd87640b781d347d1f (patch) | |
tree | 9163c58e47cf900303b6db19d2e6bd4468a43ecb /mm/page_alloc.c | |
parent | 203993cd89ec6395b6bfba948c2e424680dd622e (diff) | |
parent | a65e28a0149261776678977962cfa0f90973e1d4 (diff) |
Merge branch 'android-3.0' into imx_3.0.15_android
Conflicts:
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/net/wireless/Makefile
kernel/power/main.c
sound/soc/soc-core.c
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 8439d2a04f2d..afa80ed07253 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -127,6 +127,20 @@ void pm_restrict_gfp_mask(void) saved_gfp_mask = gfp_allowed_mask; gfp_allowed_mask &= ~GFP_IOFS; } + +static bool pm_suspending(void) +{ + if ((gfp_allowed_mask & GFP_IOFS) == GFP_IOFS) + return false; + return true; +} + +#else + +static bool pm_suspending(void) +{ + return false; +} #endif /* CONFIG_PM_SLEEP */ #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE @@ -176,6 +190,7 @@ static char * const zone_names[MAX_NR_ZONES] = { }; int min_free_kbytes = 1024; +int min_free_order_shift = 1; static unsigned long __meminitdata nr_kernel_pages; static unsigned long __meminitdata nr_all_pages; @@ -1487,7 +1502,7 @@ static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark, free_pages -= z->free_area[o].nr_free << o; /* Require fewer higher order pages to be free */ - min >>= 1; + min >>= min_free_order_shift; if (free_pages <= min) return false; @@ -2225,6 +2240,14 @@ rebalance: goto restart; } + + /* + * Suspend converts GFP_KERNEL to __GFP_WAIT which can + * prevent reclaim making forward progress without + * invoking OOM. Bail if we are suspending + */ + if (pm_suspending()) + goto nopage; } /* Check if we should retry the allocation */ |