[patch] mm: node-setup agnostic free_bootmem()

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Ingo Molnar
Date: Sunday, April 27, 2008 - 5:40 pm

* Johannes Weiner <hannes@saeurebad.de> wrote:


no, better to have them in separate patches.


sure, find the merged patch below, against latest -git, boot-tested on 
x86. Is this what you had in mind?

	Ingo

---------------->
Subject: mm: node-setup agnostic free_bootmem()
From: Johannes Weiner <hannes@saeurebad.de>
Date: Wed, 16 Apr 2008 13:36:31 +0200

Make free_bootmem() look up the node holding the specified address
range which lets it work transparently on single-node and multi-node
configurations.

If the address range exceeds the node range, it well be marked free
across node boundaries, too.

Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
CC: Andi Kleen <andi@firstfloor.org>
CC: Yinghai Lu <yhlu.kernel@gmail.com>
CC: Yasunori Goto <y-goto@jp.fujitsu.com>
CC: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
CC: Christoph Lameter <clameter@sgi.com>
CC: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 mm/bootmem.c |   27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

Index: linux-x86.q/mm/bootmem.c
===================================================================
--- linux-x86.q.orig/mm/bootmem.c
+++ linux-x86.q/mm/bootmem.c
@@ -493,8 +493,31 @@ int __init reserve_bootmem(unsigned long
 void __init free_bootmem(unsigned long addr, unsigned long size)
 {
 	bootmem_data_t *bdata;
-	list_for_each_entry(bdata, &bdata_list, list)
-		free_bootmem_core(bdata, addr, size);
+	unsigned long pos = addr;
+	unsigned long partsize = size;
+
+	list_for_each_entry(bdata, &bdata_list, list) {
+		unsigned long remainder = 0;
+
+		if (pos < bdata->node_boot_start)
+			continue;
+
+		if (PFN_DOWN(pos + partsize) > bdata->node_low_pfn) {
+			remainder = PFN_DOWN(pos + partsize) - bdata->node_low_pfn;
+			partsize -= remainder;
+		}
+
+		free_bootmem_core(bdata, pos, partsize);
+
+		if (!remainder)
+			return;
+
+		pos = PFN_PHYS(bdata->node_low_pfn + 1);
+	}
+	printk(KERN_ERR "free_bootmem: request: addr=%lx, size=%lx, "
+			"state: pos=%lx, partsize=%lx\n", addr, size,
+			pos, partsize);
+	BUG();
 }
 
 unsigned long __init free_all_bootmem(void)
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC git pull] &quot;big box&quot; x86 changes, Ingo Molnar, (Sat Apr 26, 11:55 am)
Re: [RFC git pull] &quot;big box&quot; x86 changes, Stefan Richter, (Sat Apr 26, 12:05 pm)
Re: [RFC git pull] &quot;big box&quot; x86 changes, Linus Torvalds, (Sat Apr 26, 12:12 pm)
Re: [RFC git pull] &quot;big box&quot; x86 changes, Ingo Molnar, (Sat Apr 26, 12:21 pm)
[RFC git pull] &quot;big box&quot; x86 changes, GART, Ingo Molnar, (Sat Apr 26, 1:24 pm)
[git pull] &quot;big box&quot; x86 changes, PCI, Ingo Molnar, (Sat Apr 26, 2:55 pm)
Re: [RFC git pull] &quot;big box&quot; x86 changes, Andi Kleen, (Sat Apr 26, 3:17 pm)
Re: [git pull] &quot;big box&quot; x86 changes, boot protocol, Jeremy Fitzhardinge, (Sat Apr 26, 4:37 pm)
Re: [RFC git pull] &quot;big box&quot; x86 changes, Yinghai Lu, (Sat Apr 26, 8:14 pm)
Re: [RFC git pull] &quot;big box&quot; x86 changes, Andi Kleen, (Sun Apr 27, 1:30 am)
Re: [git pull] &quot;big box&quot; x86 changes, PCI, Jesse Barnes, (Sun Apr 27, 9:30 am)
[patch] mm: node-setup agnostic free_bootmem(), Ingo Molnar, (Sun Apr 27, 5:40 pm)
Re: [patch] mm: node-setup agnostic free_bootmem(), Yinghai Lu, (Sun Apr 27, 6:48 pm)
Re: [git pull] &quot;big box&quot; x86 changes, PCI, Ingo Molnar, (Mon Apr 28, 8:38 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Johannes Weiner, (Mon Apr 28, 9:49 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Johannes Weiner, (Mon Apr 28, 9:54 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Yinghai Lu, (Mon Apr 28, 12:11 pm)
Re: [patch] mm: node-setup agnostic free_bootmem(), Yinghai Lu, (Mon Apr 28, 12:55 pm)
Re: [git pull] &quot;big box&quot; x86 changes, PCI, Jesse Barnes, (Mon Apr 28, 1:34 pm)
Re: [git pull] &quot;big box&quot; x86 changes, PCI, Yinghai Lu, (Mon Apr 28, 3:53 pm)
Re: [patch] mm: node-setup agnostic free_bootmem(), Ingo Molnar, (Tue Apr 29, 7:25 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Johannes Weiner, (Wed Apr 30, 3:50 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Johannes Weiner, (Wed Apr 30, 3:52 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Yinghai Lu, (Wed Apr 30, 9:22 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Johannes Weiner, (Wed Apr 30, 10:52 am)
Re: [patch] mm: node-setup agnostic free_bootmem(), Yinghai Lu, (Wed Apr 30, 1:30 pm)