lkml.org 
[lkml]   [2004]   [Oct]   [16]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateSat, 16 Oct 2004 15:03:34 +1000
FromAnton Blanchard <>
Subject[PATCH] ppc64: fix some issues with mem_reserve
Hi,

I found a couple of issues with reserve_mem:

- If we try and mem_reserve something of zero length, everything
  reserved after it would get ignored. This is because early_reserve_mem 
  sees a zero length as a terminator.
- The code rounded the top down instead of up.

Signed-off-by: Anton Blanchard <anton@samba.org>

===== prom_init.c 1.2 vs edited =====
--- 1.2/arch/ppc64/kernel/prom_init.c	2004-09-27 19:12:49 +10:00
+++ edited/prom_init.c	2004-09-30 22:19:56 +10:00
@@ -587,17 +587,19 @@
 static void reserve_mem(unsigned long base, unsigned long size)
 {
 	unsigned long offset = reloc_offset();
-	unsigned long top = base + size;
 	unsigned long cnt = RELOC(mem_reserve_cnt);
 
-	/* We need to always keep one empty entry so that we
+	if (!size)
+		return;
+
+	base = _ALIGN_DOWN(base, PAGE_SIZE);
+	size = _ALIGN_UP(size, PAGE_SIZE);
+
+	/*
+	 * We need to always keep one empty entry so that we
 	 * have our terminator with "size" set to 0 since we are
 	 * dumb and just copy this entire array to the boot params
 	 */
-	base = _ALIGN_DOWN(base, PAGE_SIZE);
-	top = _ALIGN_DOWN(top, PAGE_SIZE);
-	size = top - base;
-
 	if (cnt >= (MEM_RESERVE_MAP_SIZE - 1))
 		prom_panic("Memory reserve map exhausted !\n");
 	RELOC(mem_reserve_map)[cnt].base = base;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:07    [from the cache]
©2003-2008