


---

 include/linux/nonlinear.h                    |    0 
 memhotplug-dave/arch/i386/kernel/acpi/boot.c |    4 ++--
 memhotplug-dave/arch/i386/kernel/apic.c      |    2 +-
 memhotplug-dave/arch/i386/kernel/efi.c       |    4 ++--
 memhotplug-dave/arch/i386/kernel/setup.c     |   24 ++++++++++++++++++++----
 memhotplug-dave/arch/i386/kernel/smpboot.c   |    2 +-
 memhotplug-dave/arch/i386/mm/init.c          |    6 +-----
 memhotplug-dave/arch/i386/mm/pgtable.c       |    3 +++
 memhotplug-dave/include/asm-i386/io.h        |    6 ++++--
 memhotplug-dave/include/asm-i386/processor.h |    2 +-
 10 files changed, 35 insertions(+), 18 deletions(-)

diff -puN arch/i386/kernel/acpi/boot.c~F1-nonlinear-i386-more arch/i386/kernel/acpi/boot.c
--- memhotplug/arch/i386/kernel/acpi/boot.c~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/arch/i386/kernel/acpi/boot.c	Thu Aug  5 09:41:11 2004
@@ -606,9 +606,9 @@ acpi_find_rsdp (void)
 
 	if (efi_enabled) {
 		if (efi.acpi20)
-			return __pa(efi.acpi20);
+			return __boot_pa(efi.acpi20);
 		else if (efi.acpi)
-			return __pa(efi.acpi);
+			return __boot_pa(efi.acpi);
 	}
 	/*
 	 * Scan memory looking for the RSDP signature. First search EBDA (low
diff -puN arch/i386/kernel/apic.c~F1-nonlinear-i386-more arch/i386/kernel/apic.c
--- memhotplug/arch/i386/kernel/apic.c~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/arch/i386/kernel/apic.c	Thu Aug  5 09:41:11 2004
@@ -749,7 +749,7 @@ void __init init_apic_mappings(void)
 	 */
 	if (!smp_found_config && detect_init_APIC()) {
 		apic_phys = (unsigned long) alloc_bootmem_pages(PAGE_SIZE);
-		apic_phys = __pa(apic_phys);
+		apic_phys = __boot_pa(apic_phys);
 	} else
 		apic_phys = mp_lapic_addr;
 
diff -puN arch/i386/kernel/doublefault.c~F1-nonlinear-i386-more arch/i386/kernel/doublefault.c
diff -puN arch/i386/kernel/efi.c~F1-nonlinear-i386-more arch/i386/kernel/efi.c
--- memhotplug/arch/i386/kernel/efi.c~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/arch/i386/kernel/efi.c	Thu Aug  5 09:41:11 2004
@@ -102,9 +102,9 @@ static void efi_call_phys_prelog(void)
 	 */
 	local_flush_tlb();
 
-	cpu_gdt_descr[0].address = __pa(cpu_gdt_descr[0].address);
+	cpu_gdt_descr[0].address = __boot_pa(cpu_gdt_descr[0].address);
 	__asm__ __volatile__("lgdt %0":"=m"
-			    (*(struct Xgt_desc_struct *) __pa(&cpu_gdt_descr[0])));
+			    (*(struct Xgt_desc_struct *) __boot_pa(&cpu_gdt_descr[0])));
 }
 
 static void efi_call_phys_epilog(void)
diff -puN arch/i386/kernel/setup.c~F1-nonlinear-i386-more arch/i386/kernel/setup.c
--- memhotplug/arch/i386/kernel/setup.c~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/arch/i386/kernel/setup.c	Thu Aug  5 09:41:11 2004
@@ -119,6 +119,7 @@ unsigned char aux_device_present;
 extern void early_cpu_init(void);
 extern void dmi_scan_machine(void);
 extern void generic_apic_probe(char *);
+extern void zone_sizes_init(void);
 extern int root_mountflags;
 
 unsigned long saved_videomode;
@@ -1015,6 +1016,11 @@ static unsigned long __init setup_memory
 
 	find_max_pfn();
 
+#ifdef CONFIG_NONLINEAR
+	setup_memsections();
+	alloc_memsections(0, 0, max_pfn);
+#endif
+
 	max_low_pfn = find_max_low_pfn();
 
 #ifdef CONFIG_HIGHMEM
@@ -1285,6 +1291,9 @@ static char * __init machine_specific_me
 void __init setup_arch(char **cmdline_p)
 {
 	unsigned long max_low_pfn;
+#ifdef CONFIG_NONLINEAR
+	struct page *lmem_map;
+#endif
 
 	memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
 	pre_setup_arch_hook();
@@ -1339,10 +1348,10 @@ void __init setup_arch(char **cmdline_p)
 	init_mm.end_data = (unsigned long) _edata;
 	init_mm.brk = init_pg_tables_end + PAGE_OFFSET;
 
-	code_resource.start = virt_to_phys(_text);
-	code_resource.end = virt_to_phys(_etext)-1;
-	data_resource.start = virt_to_phys(_etext);
-	data_resource.end = virt_to_phys(_edata)-1;
+	code_resource.start = __boot_pa(_text);
+	code_resource.end = __boot_pa(_etext)-1;
+	data_resource.start = __boot_pa(_etext);
+	data_resource.end = __boot_pa(_edata)-1;
 
 	parse_cmdline_early(cmdline_p);
 
@@ -1357,6 +1366,13 @@ void __init setup_arch(char **cmdline_p)
 	smp_alloc_memory(); /* AP processor realmode stacks in low memory*/
 #endif
 	paging_init();
+
+#ifdef CONFIG_NONLINEAR
+	lmem_map = alloc_bootmem(max_pfn * sizeof(struct page));
+	alloc_memmap(lmem_map, 0, max_pfn);
+#endif
+
+	zone_sizes_init();
 
 #ifdef CONFIG_EARLY_PRINTK
 	{
diff -puN arch/i386/kernel/smpboot.c~F1-nonlinear-i386-more arch/i386/kernel/smpboot.c
--- memhotplug/arch/i386/kernel/smpboot.c~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/arch/i386/kernel/smpboot.c	Thu Aug  5 09:41:11 2004
@@ -117,7 +117,7 @@ void __init smp_alloc_memory(void)
 	 * Has to be in very low memory so we can execute
 	 * real-mode AP code.
 	 */
-	if (__pa(trampoline_base) >= 0x9F000)
+	if (__boot_pa(trampoline_base) >= 0x9F000)
 		BUG();
 	/*
 	 * Make the SMP trampoline executable:
diff -puN arch/i386/mm/init.c~F1-nonlinear-i386-more arch/i386/mm/init.c
--- memhotplug/arch/i386/mm/init.c~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/arch/i386/mm/init.c	Thu Aug  5 09:41:11 2004
@@ -426,8 +426,6 @@ void __init zone_sizes_init(void)
 	}
 	free_area_init(zones_size);	
 }
-#else
-extern void zone_sizes_init(void);
 #endif /* !CONFIG_DISCONTIGMEM */
 
 static int disable_nx __initdata = 0;
@@ -586,11 +584,9 @@ void __init mem_init(void)
 	int tmp;
 	int bad_ppro;
 
-#ifndef CONFIG_NONLINEAR
-#ifndef CONFIG_DISCONTIGMEM
+#ifdef CONFIG_ARCH_HAS_MEM_MAP
 	if (!mem_map)
 		BUG();
-#endif
 #endif
 	
 	bad_ppro = ppro_with_ram_bug();
diff -puN arch/i386/mm/pgtable.c~F1-nonlinear-i386-more arch/i386/mm/pgtable.c
--- memhotplug/arch/i386/mm/pgtable.c~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/arch/i386/mm/pgtable.c	Thu Aug  5 09:41:11 2004
@@ -22,6 +22,9 @@
 #include <asm/tlb.h>
 #include <asm/tlbflush.h>
 
+#ifdef CONFIG_NONLINEAR
+void show_mem(void){}
+#else
 void show_mem(void)
 {
 	int total = 0, reserved = 0;
diff -puN arch/ppc64/kernel/prom.c~F1-nonlinear-i386-more arch/ppc64/kernel/prom.c
diff -puN arch/ppc64/mm/init.c~F1-nonlinear-i386-more arch/ppc64/mm/init.c
diff -puN include/asm-i386/io.h~F1-nonlinear-i386-more include/asm-i386/io.h
--- memhotplug/include/asm-i386/io.h~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/include/asm-i386/io.h	Thu Aug  5 09:41:11 2004
@@ -2,6 +2,8 @@
 #define _ASM_IO_H
 
 #include <linux/config.h>
+#include <asm/page.h>
+#include <linux/nonlinear.h>
 
 /*
  * This file contains the definitions for the x86 IO instructions
@@ -60,7 +62,7 @@
  
 static inline unsigned long virt_to_phys(volatile void * address)
 {
-	return __pa(address);
+	return __pa((unsigned long)address);
 }
 
 /**
@@ -78,7 +80,7 @@ static inline unsigned long virt_to_phys
 
 static inline void * phys_to_virt(unsigned long address)
 {
-	return __va(address);
+	return (void *)__va((unsigned long)address);
 }
 
 /*
diff -puN include/asm-i386/nonlinear.h~F1-nonlinear-i386-more include/asm-i386/nonlinear.h
diff -puN include/asm-i386/page.h~F1-nonlinear-i386-more include/asm-i386/page.h
diff -puN include/asm-i386/processor.h~F1-nonlinear-i386-more include/asm-i386/processor.h
--- memhotplug/include/asm-i386/processor.h~F1-nonlinear-i386-more	Thu Aug  5 09:41:11 2004
+++ memhotplug-dave/include/asm-i386/processor.h	Thu Aug  5 09:41:11 2004
@@ -181,7 +181,7 @@ static inline unsigned int cpuid_edx(uns
 }
 
 #define load_cr3(pgdir) \
-	asm volatile("movl %0,%%cr3": :"r" (__pa(pgdir)))
+	asm volatile("movl %0,%%cr3": :"r" (__boot_pa(pgdir)))
 
 
 /*
diff -puN include/linux/mm.h~F1-nonlinear-i386-more include/linux/mm.h
diff -puN include/linux/mmzone.h~F1-nonlinear-i386-more include/linux/mmzone.h
diff -puN include/linux/nonlinear.h~F1-nonlinear-i386-more include/linux/nonlinear.h

_
