patch-2.4.0-test3 linux/arch/arm/mm/mm-armv.c
Next file: linux/arch/arm/mm/proc-arm2,3.S
Previous file: linux/arch/arm/mm/fault-common.c
Back to the patch index
Back to the overall index
- Lines: 48
- Date:
Mon Jun 26 12:04:01 2000
- Orig file:
v2.4.0-test2/linux/arch/arm/mm/mm-armv.c
- Orig date:
Fri Jun 23 21:55:07 2000
diff -u --recursive --new-file v2.4.0-test2/linux/arch/arm/mm/mm-armv.c linux/arch/arm/mm/mm-armv.c
@@ -410,9 +410,24 @@
flush_cache_all();
}
-/*
- * The mem_map array can get very big. Free the unused area of the memory map.
- */
+static inline void free_memmap(unsigned long start, unsigned long end)
+{
+ unsigned long pg, pgend;
+
+ start = __phys_to_virt(start);
+ end = __phys_to_virt(end);
+
+ pg = PAGE_ALIGN((unsigned long)(mem_map + MAP_NR(start)));
+ pgend = ((unsigned long)(mem_map + MAP_NR(end))) & PAGE_MASK;
+
+ start = __virt_to_phys(pg);
+ end = __virt_to_phys(pgend);
+ /*
+ * The mem_map is always stored in node 0
+ */
+ free_bootmem_node(0, start, end - start);
+}
+
static inline void free_unused_memmap_node(int node, struct meminfo *mi)
{
unsigned long bank_start, prev_bank_end = 0;
@@ -434,14 +449,17 @@
* between the current bank and the previous, free it.
*/
if (prev_bank_end && prev_bank_end != bank_start)
- free_bootmem_node(node, prev_bank_end,
- bank_start - prev_bank_end);
+ free_memmap(prev_bank_end, bank_start);
prev_bank_end = PAGE_ALIGN(mi->bank[i].start +
mi->bank[i].size);
}
}
+/*
+ * The mem_map array can get very big. Free
+ * the unused area of the memory map.
+ */
void __init create_memmap_holes(struct meminfo *mi)
{
int node;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)