Thread (34 messages) 34 messages, 6 authors, 2013-09-27

Re: [PATCH v5 4/6] x86/mem-hotplug: Support initialize page tables in bottom-up

From: Andrew Morton <akpm@linux-foundation.org>
Date: 2013-09-26 22:52:11
Also in: linux-mm, lkml

On Wed, 25 Sep 2013 02:30:51 +0800 Zhang Yanfei [off-list ref] wrote:
From: Tang Chen <redacted>

The Linux kernel cannot migrate pages used by the kernel. As a
result, kernel pages cannot be hot-removed. So we cannot allocate
hotpluggable memory for the kernel.

In a memory hotplug system, any numa node the kernel resides in
should be unhotpluggable. And for a modern server, each node could
have at least 16GB memory. So memory around the kernel image is
highly likely unhotpluggable.

ACPI SRAT (System Resource Affinity Table) contains the memory
hotplug info. But before SRAT is parsed, memblock has already
started to allocate memory for the kernel. So we need to prevent
memblock from doing this.

So direct memory mapping page tables setup is the case. init_mem_mapping()
is called before SRAT is parsed. To prevent page tables being allocated
within hotpluggable memory, we will use bottom-up direction to allocate
page tables from the end of kernel image to the higher memory.

...

+		kernel_end = __pa_symbol(_end);
__pa_symbol() is implemented only on mips and x86.

I stole the mips implementation like this:
--- a/mm/memblock.c~a
+++ a/mm/memblock.c
@@ -187,8 +187,11 @@ phys_addr_t __init_memblock memblock_fin
 	/* avoid allocating the first page */
 	start = max_t(phys_addr_t, start, PAGE_SIZE);
 	end = max(start, end);
+#ifdef CONFIG_X86
 	kernel_end = __pa_symbol(_end);
-
+#else
+	kernel_end = __pa(RELOC_HIDE((unsigned long)(_end), 0));
+#endif
 	/*
 	 * try bottom-up allocation only when bottom-up mode
 	 * is set and @end is above the kernel image.
just so I can get a -mm release out the door.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help