mirror of https://gitee.com/openkylin/linux.git
kexec: allocate the kexec control page with KEXEC_CONTROL_MEMORY_GFP
Introduce KEXEC_CONTROL_MEMORY_GFP to allow the architecture code to override the gfp flags of the allocation for the kexec control page. The loop in kimage_alloc_normal_control_pages allocates pages with GFP_KERNEL until a page is found that happens to have an address smaller than the KEXEC_CONTROL_MEMORY_LIMIT. On systems with a large memory size but a small KEXEC_CONTROL_MEMORY_LIMIT the loop will keep allocating memory until the oom killer steps in. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
27cf3a16b2
commit
7e01b5acd8
|
@ -26,6 +26,9 @@
|
|||
/* Not more than 2GB */
|
||||
#define KEXEC_CONTROL_MEMORY_LIMIT (1UL<<31)
|
||||
|
||||
/* Allocate control page with GFP_DMA */
|
||||
#define KEXEC_CONTROL_MEMORY_GFP GFP_DMA
|
||||
|
||||
/* Maximum address we can use for the crash control pages */
|
||||
#define KEXEC_CRASH_CONTROL_MEMORY_LIMIT (-1UL)
|
||||
|
||||
|
|
|
@ -40,6 +40,10 @@
|
|||
#error KEXEC_CONTROL_MEMORY_LIMIT not defined
|
||||
#endif
|
||||
|
||||
#ifndef KEXEC_CONTROL_MEMORY_GFP
|
||||
#define KEXEC_CONTROL_MEMORY_GFP GFP_KERNEL
|
||||
#endif
|
||||
|
||||
#ifndef KEXEC_CONTROL_PAGE_SIZE
|
||||
#error KEXEC_CONTROL_PAGE_SIZE not defined
|
||||
#endif
|
||||
|
|
|
@ -707,7 +707,7 @@ static struct page *kimage_alloc_normal_control_pages(struct kimage *image,
|
|||
do {
|
||||
unsigned long pfn, epfn, addr, eaddr;
|
||||
|
||||
pages = kimage_alloc_pages(GFP_KERNEL, order);
|
||||
pages = kimage_alloc_pages(KEXEC_CONTROL_MEMORY_GFP, order);
|
||||
if (!pages)
|
||||
break;
|
||||
pfn = page_to_pfn(pages);
|
||||
|
|
Loading…
Reference in New Issue