2008-03-19 22:37:57

by Yinghai Lu

[permalink] [raw]
Subject: [PATCH 10/12] x86_64: make reserve_bootmem_generic to use new reserve_bootmem

[PATCH] x86_64: make reserve_bootmem_generic to use new reserve_bootmem

[PATCH] mm: make reserve_bootmem can crossed the nodes

provides new resever_bootmem, let reserve_bootmem_generic use that.

acctualy reserve_bootme_generic is used to reserve initramdisk.
so we can make sure even bootloader or kexec load that cross the nodes, reserve_bootmem
still works.

Signed-off-by: Yinghai Lu <[email protected]>


Index: linux-2.6/arch/x86/mm/init_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_64.c
+++ linux-2.6/arch/x86/mm/init_64.c
@@ -648,7 +648,7 @@ void free_initrd_mem(unsigned long start
void __init reserve_bootmem_generic(unsigned long phys, unsigned len)
{
#ifdef CONFIG_NUMA
- int nid = phys_to_nid(phys);
+ int nid, next_nid;
#endif
unsigned long pfn = phys >> PAGE_SHIFT;

@@ -667,10 +667,14 @@ void __init reserve_bootmem_generic(unsi

/* Should check here against the e820 map to avoid double free */
#ifdef CONFIG_NUMA
+ nid = phys_to_nid(phys);
+ next_nid = phys_to_nid(phys + len - 1);
+ if (nid == next_nid)
reserve_bootmem_node(NODE_DATA(nid), phys, len, BOOTMEM_DEFAULT);
-#else
- reserve_bootmem(phys, len, BOOTMEM_DEFAULT);
+ else
#endif
+ reserve_bootmem(phys, len, BOOTMEM_DEFAULT);
+
if (phys+len <= MAX_DMA_PFN*PAGE_SIZE) {
dma_reserve += len / PAGE_SIZE;
set_dma_reserve(dma_reserve);


2008-03-21 10:50:26

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH 10/12] x86_64: make reserve_bootmem_generic to use new reserve_bootmem


* Yinghai Lu <[email protected]> wrote:

> [PATCH] x86_64: make reserve_bootmem_generic to use new reserve_bootmem
>
> [PATCH] mm: make reserve_bootmem can crossed the nodes
>
> provides new resever_bootmem, let reserve_bootmem_generic use that.
>
> acctualy reserve_bootme_generic is used to reserve initramdisk. so we
> can make sure even bootloader or kexec load that cross the nodes,
> reserve_bootmem still works.

.25 fix, correct? But due to dependency on the mm/bootmem.c change this
patch should go via Andrew.

Acked-by: Ingo Molnar <[email protected]>

Ingo