
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
---

 include/asm-i386/crash_dump.h             |    0 
 memhotplug-dave/arch/i386/kernel/traps.c  |    2 -
 memhotplug-dave/arch/i386/mm/init.c       |   18 ++++++++----
 memhotplug-dave/drivers/base/memory.c     |   18 ++++++++++--
 memhotplug-dave/fs/dcache.c               |    3 ++
 memhotplug-dave/fs/sysfs/file.c           |    4 ++
 memhotplug-dave/include/linux/mm.h        |   16 +++++++++-
 memhotplug-dave/include/linux/nonlinear.h |   30 ++++++++++++++++----
 memhotplug-dave/mm/highmem.c              |    4 ++
 memhotplug-dave/mm/memory_hotplug.c       |   10 ++++++
 memhotplug-dave/mm/nonlinear.c            |   44 +++++++++++++++++++++++++++---
 memhotplug-dave/mm/page_alloc.c           |   25 ++++++++++++-----
 12 files changed, 145 insertions(+), 29 deletions(-)

diff -puN mm/memory_hotplug.c~Z2-debug mm/memory_hotplug.c
--- memhotplug/mm/memory_hotplug.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/mm/memory_hotplug.c	2004-12-10 13:53:25.000000000 -0800
@@ -150,6 +150,9 @@ int online_pages(unsigned long pfn, unsi
 
 	page_zone(pfn_to_page(pfn))->present_pages += nr_pages;
 
+	printk(KERN_DEBUG "%s: onlining if 0x%lx pages done.\n",
+		__func__, nr_pages);
+
 	/* need error checking */
 	return 0;
 }
@@ -162,8 +165,11 @@ int __remove_pages(struct zone *zone, un
 	/*
 	 * for now, only handle 2^x sized areas
 	 */
-	if (nr_pages != 1<<order)
+	if (nr_pages != 1<<order) {
+		printk(KERN_WARNING "%s() non-2^x-sized area: %ld\n",
+				__func__, nr_pages);
 		return -EINVAL;
+	}
 
 	if (capture_page_range(start_pfn, order)) {
 		printk(KERN_WARNING "%s(): failed to capture page range: %ld -> %ld\n",
@@ -174,6 +180,8 @@ int __remove_pages(struct zone *zone, un
 
 	for (i = 0; i < nr_pages; i += SECTION_SIZE) {
 		unsigned int phys_section = pfn_to_section(start_pfn + i);
+		printk(KERN_INFO "%s() calling unregister_memory_section: %d\n",
+				__func__, phys_section);
 		unregister_memory_section(phys_section);
 	}
 
diff -puN mm/page_alloc.c~Z2-debug mm/page_alloc.c
--- memhotplug/mm/page_alloc.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/mm/page_alloc.c	2004-12-10 13:53:25.000000000 -0800
@@ -41,6 +41,8 @@
 #include <asm/tlbflush.h>
 #include "internal.h"
 
+#define inline
+
 nodemask_t node_online_map = NODE_MASK_NONE;
 nodemask_t node_possible_map = NODE_MASK_ALL;
 struct pglist_data *pgdat_list;
@@ -271,7 +273,15 @@ static inline void __free_pages_bulk (st
 	page_idx = page_to_pfn(page) & ((1 << MAX_ORDER) - 1);
 
 	BUG_ON(page_idx & (order_size - 1));
-	BUG_ON(bad_range(zone, page));
+	if (bad_range(zone, page)) {
+		printk(KERN_ERR "BAD RANGE!!\n");
+		printk(KERN_ERR "page: %p pfn: %08lx\n", page, page_to_pfn(page));
+		printk(KERN_ERR "zone->zone_start_pfn: %08lx\n", zone->zone_start_pfn);
+		printk(KERN_ERR "zone->zone_start_pfn + spanned: %08lx\n",
+				zone->zone_start_pfn + zone->spanned_pages);
+		printk(KERN_ERR "zone->spanned_pages: %08lx\n", zone->spanned_pages);
+		BUG();
+	}
 
 	zone->free_pages += order_size;
 	while (order < MAX_ORDER-1) {
@@ -773,7 +783,7 @@ retry:
 		if (remains == -ENOSPC) {
 			/* Any swap devices should be added. */
 		} else if (printk_ratelimit())
-			printk(KERN_NOTICE "Removing memory: still under capture:%d pages, not migrated yet:%d pages.\n", rest, remains);
+			printk(KERN_DEBUG "Removing memory: still under capture:%d pages, not migrated yet:%d pages.\n", rest, remains);
 		msleep(1000);
 		goto retry;
 	}
@@ -788,6 +798,8 @@ retry:
 		msleep(1000);
 	}
 
+	printk(KERN_DEBUG "%s() done\n", __func__);
+
 	return 0;
 }
 
@@ -1087,12 +1099,12 @@ __alloc_pages(unsigned int gfp_mask, uns
 
 	alloc_type = zone_idx(zones[0]);
 
+	for (i = 0; (z  = zones[i]) != NULL; i++) {
 	/* Go through the zonelist once, looking for a zone with enough free */
-	for (i = 0; (z = zones[i]) != NULL; i++) {
-
 		if (!zone_watermark_ok(z, order, z->pages_low,
-				alloc_type, 0, 0))
+				alloc_type, 0, 0)) {
 			continue;
+		}
 
 		if (!cpuset_zone_allowed(z))
 			continue;
@@ -1609,6 +1621,7 @@ void show_free_areas(void)
  */
 int __devinit build_zonelists_node(pg_data_t *pgdat, struct zonelist *zonelist, int j, int k)
 {
+	printk("%s() zonelist: %p\n", __func__, zonelist);
 	switch (k) {
 		struct zone *zone;
 	default:
@@ -2078,7 +2091,7 @@ static void __init alloc_node_mem_map(st
 	struct page *lmem_map;
 
 	if (!pgdat->node_spanned_pages) {
-		printk("%s: Crap, no node_spanned_pages??\n", __func__);
+		printk(KERN_CRIT "%s: Crap, no node_spanned_pages??\n", __func__);
 		while(1);
 	}
 	lmem_map = alloc_bootmem(pgdat->node_spanned_pages * sizeof(struct page));
diff -puN include/linux/mm.h~Z2-debug include/linux/mm.h
--- memhotplug/include/linux/mm.h~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/include/linux/mm.h	2004-12-10 13:53:25.000000000 -0800
@@ -445,9 +445,21 @@ static inline void set_page_zone(struct 
 extern struct page *mem_map;
 #endif
 
-static inline void *lowmem_page_address(struct page *page)
+static void *lowmem_page_address(struct page *page)
 {
-	return __va(page_to_pfn(page) << PAGE_SHIFT);
+	unsigned long paddr = page_to_pfn(page) << PAGE_SHIFT;
+	void *res;
+	/*if (bogus_paddr(paddr)) {
+		printk(KERN_ERR "%s(%p) bogus paddr: %08lx\n", __func__,
+				page, paddr);
+		return NULL;
+	}*/
+	if(0) lowmem_page_address(page);
+	res = __va(paddr);
+	if (!res)
+		printk(KERN_ERR "%s(%p) __va(%08lx) == NULL\n",
+				__func__, page, paddr);
+	return res;
 }
 
 #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
diff -puN include/asm-i386/page.h~Z2-debug include/asm-i386/page.h
diff -puN arch/i386/Kconfig~Z2-debug arch/i386/Kconfig
diff -puN mm/nonlinear.c~Z2-debug mm/nonlinear.c
--- memhotplug/mm/nonlinear.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/mm/nonlinear.c	2004-12-10 13:53:25.000000000 -0800
@@ -46,6 +46,8 @@ setup_memsections(void)
 {
 	int index;
 
+	printk(KERN_DEBUG "%s()\n", __func__);
+
 	for (index = 0; index < NR_SECTIONS; index++) {
 		mem_section[index].phys_section = INVALID_SECTION;
 		mem_section[index].mem_map = NULL;
@@ -64,17 +66,33 @@ alloc_memsections(unsigned long start_pf
 	unsigned int sect_count;
 	unsigned short sect_index;
 
+	printk(KERN_DEBUG "%s(%08lx, %08lx, %08lx)\n", __func__, start_pfn, start_phys_pfn, pfn_count);
+
 	sect_count = pfn_to_section_roundup(pfn_count);
 	sect_index = index = pfn_to_section(start_pfn);
 	limit = index + sect_count;
 	physid = pfn_to_section(start_phys_pfn);
-	for (; index < limit; index++, physid++)
+	for (; index < limit; index++, physid++) {
+		if (mem_section[index].phys_section != INVALID_SECTION) {
+			printk("%s() mem_section[%d].phys_section: %d\n",
+					__func__, index,
+					mem_section[index].phys_section);
+			BUG();
+		}
 		mem_section[index].phys_section = physid;
+		printk(KERN_DEBUG "set mem_section[%d].phys_section: %d\n", index, mem_section[index].phys_section);
+	}
 
 	index = pfn_to_section(start_phys_pfn);
 	limit = index + sect_count;
-	for (; index < limit; index++, sect_index++)
+	for (; index < limit; index++, sect_index++) {
+		if (phys_section[index] != INVALID_PHYS_SECTION) {
+			printk(KERN_DEBUG "phys_section[%d]: %d\n", index, phys_section[index]);
+			BUG();
+		}
 		phys_section[index] = sect_index;
+		printk(KERN_DEBUG "set phys_section[%d]: %d\n", index, phys_section[index]);
+	}
 }
 
 void
@@ -100,6 +118,7 @@ memmap_init(unsigned long num_pages, int
 {
 	unsigned long offset;
 
+	printk(KERN_DEBUG "nonlinear memmap_init(%ld, %d, %ld, %ld)\n", num_pages, nid, zone, start_pfn);
 	offset = section_offset_pfn(start_pfn);
 	while (num_pages) {
 		unsigned long npages;
@@ -127,7 +146,12 @@ pfn_to_page(unsigned long pfn)
 {
 	struct page *page;
 
-	BUG_ON(!mem_section[phys_section[pfn_to_section(pfn)]].mem_map);
+	if (!mem_section[phys_section[pfn_to_section(pfn)]].mem_map) {
+		printk(KERN_ERR "%s() pfn: %08lx phys_section: %d mem_section: %d has no mem_map\n",
+				__func__, pfn, pfn_to_section(pfn),
+				phys_section[pfn_to_section(pfn)]);
+		BUG();
+	}
 	page = &mem_section[phys_section[pfn_to_section(pfn)]].mem_map[section_offset_pfn(pfn)];
 	return page;
 }
@@ -135,6 +159,20 @@ pfn_to_page(unsigned long pfn)
 unsigned long
 page_to_pfn(struct page *page)
 {
+	unsigned int msection = page_section(page);
+	unsigned int psection = mem_section[page_section(page)].phys_section;
+	if ((mem_section[page_section(page)].phys_section == INVALID_SECTION) || 
+	    (phys_section[psection] != msection)) {
+		printk(KERN_ERR "%s(%p):\n", __func__, page);
+		printk(KERN_ERR "msection: %d\n", msection);
+		printk(KERN_ERR "psection: %d\n", psection);
+		printk(KERN_ERR "phys_section[%d]: %d\n", psection,
+				phys_section[psection]);
+		printk(KERN_ERR "mem_map: %p\n", mem_section[page_section(page)].mem_map);
+		printk(KERN_ERR "map diff: %d\n",
+				(page - mem_section[page_section(page)].mem_map));
+		BUG();
+	}
 	return section_to_pfn(mem_section[page_section(page)].phys_section) +
 		(page - mem_section[page_section(page)].mem_map);
 }
diff -puN mm/bootmem.c~Z2-debug mm/bootmem.c
diff -puN include/linux/rmap.h~Z2-debug include/linux/rmap.h
diff -puN include/linux/nonlinear.h~Z2-debug include/linux/nonlinear.h
--- memhotplug/include/linux/nonlinear.h~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/include/linux/nonlinear.h	2004-12-10 13:53:25.000000000 -0800
@@ -3,19 +3,21 @@
 
 struct page;
 
-#include <asm/bug.h>
-
-#ifndef CONFIG_NONLINEAR
-
 /*
  * For now, this keeps us from having to do this to each and
  * every arch.
  */
 #ifndef CONFIG_ARCH_HAS_BOOTPA
+#include <asm/page.h>
 #define __boot_pa(x)	__pa(x)
 #define __boot_va(x)	__va(x)
 #endif
 
+#include <asm/bug.h>
+#include <linux/kernel.h>
+
+#ifndef CONFIG_NONLINEAR
+
 static inline void setup_memsections(void) {}
 static inline void alloc_memsections(unsigned long start_pfn, unsigned long start_phys_pfn, unsigned long size) {}
 static inline void alloc_memmap(struct page *page, unsigned long start_pfn, unsigned long size) {}
@@ -91,7 +93,11 @@ __pa(const void *ptr_addr)
 	unsigned long addr = (unsigned long)ptr_addr;
 	unsigned long section = addr_to_section(__boot_pa(addr));
 
-	BUG_ON(mem_section[section].phys_section == INVALID_SECTION);
+	if(mem_section[section].phys_section == INVALID_SECTION) {
+		printk("%s(%p):\n", __func__, ptr_addr);
+		printk("\tmem_section[%ld]: INVALID\n", section);
+		BUG();
+	}
 	return section_to_addr(mem_section[section].phys_section) |
 		section_offset(addr);
 }
@@ -99,11 +105,23 @@ __pa(const void *ptr_addr)
 static inline void *
 __va(const unsigned long addr)
 {
-	BUG_ON(phys_section[addr_to_section(addr)] == INVALID_PHYS_SECTION);
+	if(phys_section[addr_to_section(addr)] == INVALID_PHYS_SECTION) {
+		printk(KERN_ERR "%s(%08lx) phys_section[%d] is invalid\n",
+				__func__, addr, addr_to_section(addr));
+		return NULL;
+	}
 	return __boot_va(section_to_addr(phys_section[addr_to_section(addr)]) |
 		         section_offset(addr));
 }
 
+static inline int bogus_paddr(const unsigned long addr)
+{
+	if(phys_section[addr_to_section(addr)] == INVALID_PHYS_SECTION)
+		return 1;
+
+	return 0;
+}
+
 extern struct page *pfn_to_page(unsigned long pfn);
 extern unsigned long page_to_pfn(struct page *page);
 
diff -puN include/linux/memory_hotplug.h~Z2-debug include/linux/memory_hotplug.h
diff -puN drivers/base/memory.c~Z2-debug drivers/base/memory.c
--- memhotplug/drivers/base/memory.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/drivers/base/memory.c	2004-12-10 13:53:25.000000000 -0800
@@ -63,6 +63,7 @@ register_memory(struct memory_block *mem
 
 	memory->sysdev.cls = &memory_sysdev_class;
 	memory->sysdev.id = section;
+	printk(KERN_DEBUG "register_memory() with section: %d\n", section);
 
 	error = sysdev_register(&memory->sysdev);
 
@@ -81,6 +82,8 @@ unregister_memory(struct memory_block *m
 	BUG_ON(memory->sysdev.cls != &memory_sysdev_class);
 	BUG_ON(memory->sysdev.id != section);
 
+	printk(KERN_DEBUG "%s(%p, %d, %p)\n", __func__, memory, section, root);
+
 	sysdev_unregister(&memory->sysdev);
 	if (root)
 		sysfs_remove_link(&root->sysdev.kobj, kobject_name(&memory->sysdev.kobj));
@@ -153,8 +156,10 @@ memory_block_action(struct memory_block 
 	printk(KERN_DEBUG "%s()\n"
 	       KERN_DEBUG "\tpsection: %ld\n"
 	       KERN_DEBUG "\tfirst_page: %p\n"
-	       KERN_DEBUG "\tphys_index: %08lx\n",
-		__func__, psection, first_page, mem->phys_index);
+	       KERN_DEBUG "\t last_page: %p\n"
+	       KERN_DEBUG "\tphys_index: %ld\n",
+		__func__, psection, first_page, first_page + PAGES_PER_SECTION -1,
+		mem->phys_index);
 	printk(KERN_DEBUG "\tphys_section[%2ld]: %d\n", psection, phys_section[psection]);
 	for (i = 0; i < PAGES_PER_SECTION; i++) {
 		if ((action == MEM_ONLINE) && !PageReserved(first_page)) {
@@ -167,6 +172,7 @@ memory_block_action(struct memory_block 
 
 	switch (action) {
 		case MEM_ONLINE:
+			printk(KERN_INFO "doing mem_online psection: %ld\n", psection);
 			start_pfn = page_to_pfn(first_page);
 			ret = online_pages(start_pfn, PAGES_PER_SECTION);
 			break;
@@ -233,6 +239,13 @@ store_mem_state(struct sys_device *dev, 
 	if (!capable(CAP_SYS_ADMIN))
 		return -EACCES;
 
+	/*
+	printk(KERN_DEBUG "%s(%p, \"%s\", %d\n)\n", __func__,
+			dev, buf, count);
+	printk(KERN_DEBUG "\tmem->phys_index: %ld\n", mem->phys_index);
+	printk(KERN_DEBUG "section: %d\n", section);
+	*/
+
 	if (mem_section[section].phys_section == INVALID_SECTION) {
 		printk("%s: Ummm.. this section (%d) is not currently mapped!\n",
 			__func__, section);
@@ -481,6 +494,7 @@ int register_new_memory(unsigned int sec
 	}
 
 	/* need some node info here and some sort of callback .... */
+	printk(KERN_INFO "register_new_memory(%d) phys_index: %d\n", section, phys_index);
 	return add_memory_block(0, section, phys_index, MEM_OFFLINE, 0);
 }
 
diff -puN arch/i386/mm/init.c~Z2-debug arch/i386/mm/init.c
--- memhotplug/arch/i386/mm/init.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/arch/i386/mm/init.c	2004-12-10 13:53:25.000000000 -0800
@@ -188,7 +188,7 @@ static inline int page_kills_ppro(unsign
 
 extern int is_available_memory(efi_memory_desc_t *);
 
-static inline int page_is_ram(unsigned long pagenr)
+int page_is_ram(unsigned long pagenr)
 {
 	int i;
 	unsigned long addr, end;
@@ -327,6 +327,8 @@ int add_one_highpage(struct page *page, 
 
 void online_page(struct page *page)
 {
+	if (!page_is_ram(page_to_pfn(page)))
+		return;
 	ClearPageReserved(page);
 	add_one_highpage(page, page_to_pfn(page), 0);
 }
@@ -344,6 +346,8 @@ int add_memory(u64 start, u64 size, unsi
 	unsigned long start_pfn = start >> PAGE_SHIFT;
 	unsigned long nr_pages = size >> PAGE_SHIFT;
 
+	printk(KERN_DEBUG "%s(%016Lx, %016Lx, %08lx)\n", __func__, start, size, attr);
+
 	return __add_pages(zone, start_pfn, nr_pages, attr);
 }
 
@@ -363,8 +367,10 @@ int remove_memory(u64 start, u64 size, u
 	 */
 	zone = page_zone(pfn_to_page(start_pfn));
 
-	printk("%s(): memory will be removed from "
-			"the %s zone\n", __func__, zone->name);
+	printk(KERN_DEBUG "%s(%016Lx, %016Lx, %ld):\n",
+			__func__, start, size, attr);
+	printk(KERN_DEBUG "\tmemory will be removed from a %s zone\n", 
+			zone->name);
 
 	/*
 	 * not handling removing memory ranges that
@@ -375,7 +381,7 @@ int remove_memory(u64 start, u64 size, u
 
 	/* make sure it is in highmem */
 	if (!is_highmem(zone)) {
-		printk("%s(): range to be removed must be in highmem!\n",
+		printk(KERN_WARNING "%s(): range to be removed must be in highmem!\n",
 			__func__);
 		goto not_highmem;
 	}
@@ -383,10 +389,10 @@ int remove_memory(u64 start, u64 size, u
 	return __remove_pages(zone, start_pfn, nr_pages, attr);
 
 overlap:
-	printk("%s(): memory range to be removed overlaps "
+	printk(KERN_WARNING "%s(): memory range to be removed overlaps "
 		"multiple zones!!!\n", __func__);
 not_highmem:
-	return -1;
+	return -EINVAL;
 }
 #endif
 
diff -puN mm/vmscan.c~Z2-debug mm/vmscan.c
diff -puN fs/sysfs/file.c~Z2-debug fs/sysfs/file.c
--- memhotplug/fs/sysfs/file.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/fs/sysfs/file.c	2004-12-10 13:53:25.000000000 -0800
@@ -377,7 +377,9 @@ int sysfs_add_file(struct dentry * dir, 
 
 int sysfs_create_file(struct kobject * kobj, const struct attribute * attr)
 {
-	BUG_ON(!kobj || !kobj->dentry || !attr);
+	BUG_ON(!kobj);
+	BUG_ON(!kobj->dentry);
+	BUG_ON(!attr);
 
 	return sysfs_add_file(kobj->dentry, attr, SYSFS_KOBJ_ATTR);
 
diff -puN include/asm-generic/bug.h~Z2-debug include/asm-generic/bug.h
diff -puN kernel/panic.c~Z2-debug kernel/panic.c
diff -puN mm/highmem.c~Z2-debug mm/highmem.c
--- memhotplug/mm/highmem.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/mm/highmem.c	2004-12-10 13:53:25.000000000 -0800
@@ -158,8 +158,10 @@ void fastcall *kmap_high(struct page *pa
 	 */
 	spin_lock(&kmap_lock);
 	vaddr = (unsigned long)page_address(page);
-	if (!vaddr)
+	if (!vaddr) {
+		printk(KERN_INFO "%s(%p) !vaddr\n", __func__, page);
 		vaddr = map_new_virtual(page);
+	}
 	pkmap_count[PKMAP_NR(vaddr)]++;
 	if (pkmap_count[PKMAP_NR(vaddr)] < 2)
 		BUG();
diff -puN include/linux/list.h~Z2-debug include/linux/list.h
diff -puN include/linux/mm_inline.h~Z2-debug include/linux/mm_inline.h
diff -puN include/linux/mmzone.h~Z2-debug include/linux/mmzone.h
diff -puN arch/i386/kernel/traps.c~Z2-debug arch/i386/kernel/traps.c
--- memhotplug/arch/i386/kernel/traps.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/arch/i386/kernel/traps.c	2004-12-10 13:53:25.000000000 -0800
@@ -385,7 +385,7 @@ void die(const char * str, struct pt_reg
 	if (in_interrupt())
 		panic("Fatal exception in interrupt");
 
-	if (panic_on_oops) {
+	if (1 || panic_on_oops) {
 		printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
 		set_current_state(TASK_UNINTERRUPTIBLE);
 		schedule_timeout(5 * HZ);
diff -puN mm/swap.c~Z2-debug mm/swap.c
diff -puN arch/i386/mm/pgtable.c~Z2-debug arch/i386/mm/pgtable.c
diff -puN arch/i386/kernel/setup.c~Z2-debug arch/i386/kernel/setup.c
diff -puN arch/i386/mm/pageattr.c~Z2-debug arch/i386/mm/pageattr.c
diff -puN arch/i386/mm/ioremap.c~Z2-debug arch/i386/mm/ioremap.c
diff -puN fs/dcache.c~Z2-debug fs/dcache.c
--- memhotplug/fs/dcache.c~Z2-debug	2004-12-10 13:53:25.000000000 -0800
+++ memhotplug-dave/fs/dcache.c	2004-12-10 13:53:25.000000000 -0800
@@ -1635,8 +1635,11 @@ extern void chrdev_init(void);
 
 void __init vfs_caches_init_early(void)
 {
+	printk("%s()\n", __func__);
 	dcache_init_early();
+	printk("%s() 2\n", __func__);
 	inode_init_early();
+	printk("%s() done\n", __func__);
 }
 
 void __init vfs_caches_init(unsigned long mempages)
diff -puN include/linux/slab.h~Z2-debug include/linux/slab.h
diff -puN mm/slab.c~Z2-debug mm/slab.c
diff -puN mm/rmap.c~Z2-debug mm/rmap.c
diff -puN drivers/scsi/aic7xxx/aic7xxx_osm.c~Z2-debug drivers/scsi/aic7xxx/aic7xxx_osm.c
diff -puN arch/i386/kernel/smpboot.c~Z2-debug arch/i386/kernel/smpboot.c
diff -puN include/linux/bootmem.h~Z2-debug include/linux/bootmem.h
diff -puN include/asm-i386/crash_dump.h~Z2-debug include/asm-i386/crash_dump.h
_
