mm/pm: force GFP_NOIO during suspend/hibernation and resume
There are quite a few GFP_KERNEL memory allocations made during suspend/hibernation and resume that may cause the system to hang, because the I/O operations they depend on cannot be completed due to the underlying devices being suspended. Avoid this problem by clearing the __GFP_IO and __GFP_FS bits in gfp_allowed_mask before suspend/hibernation and restoring the original values of these bits in gfp_allowed_mask durig the subsequent resume. [akpm@linux-foundation.org: fix CONFIG_PM=n linkage] Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Reported-by: Maxim Levitsky <maximlevitsky@gmail.com> Cc: Sebastian Ott <sebott@linux.vnet.ibm.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
这个提交包含在:
@@ -618,7 +618,7 @@ asmlinkage void __init start_kernel(void)
|
||||
local_irq_enable();
|
||||
|
||||
/* Interrupts are enabled now so all GFP allocations are safe. */
|
||||
set_gfp_allowed_mask(__GFP_BITS_MASK);
|
||||
gfp_allowed_mask = __GFP_BITS_MASK;
|
||||
|
||||
kmem_cache_init_late();
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户