diff -ru redhat/BUILD/linux/arch/ia64/kernel/setup.c lfoo/arch/ia64/kernel/setup.c --- redhat/BUILD/linux/arch/ia64/kernel/setup.c Tue May 30 16:32:59 2000 +++ lfoo/arch/ia64/kernel/setup.c Tue May 30 16:36:18 2000 @@ -26,6 +26,9 @@ #include #include #include +#ifdef CONFIG_BLK_DEV_RAM +#include +#endif #include #include @@ -125,11 +128,24 @@ * change APIs, they'd do things for the better. Grumble... */ bootmap_start = PAGE_ALIGN(__pa(&_end)); + if (ia64_boot_param.initrd_size) { + bootmap_start = PAGE_ALIGN(bootmap_start+ia64_boot_param.initrd_size); + } bootmap_size = init_bootmem(bootmap_start >> PAGE_SHIFT, max_pfn); efi_memmap_walk(free_available_memory, 0); reserve_bootmem(bootmap_start, bootmap_size); +#ifdef CONFIG_BLK_DEV_INITRD + initrd_start = ia64_boot_param.initrd_start; + if (initrd_start) { + initrd_end = initrd_start+ia64_boot_param.initrd_size; + printk("Initial ramdisk at: 0x%p (%lu bytes)\n", + (void *) initrd_start, ia64_boot_param.initrd_size); + reserve_bootmem(virt_to_phys(initrd_start), + ia64_boot_param.initrd_size); + } +#endif #if 0 /* XXX fix me */ init_mm.start_code = (unsigned long) &_stext; diff -ru redhat/BUILD/linux/arch/ia64/mm/init.c lfoo/arch/ia64/mm/init.c --- redhat/BUILD/linux/arch/ia64/mm/init.c Tue May 30 16:32:59 2000 +++ lfoo/arch/ia64/mm/init.c Wed May 24 22:05:11 2000 @@ -179,6 +180,19 @@ } printk ("Freeing unused kernel memory: %ldkB freed\n", (&__init_end - &__init_begin) >> 10); +} + +void +free_initrd_mem(unsigned long start, unsigned long end) +{ + if (start < end) + printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); + for (; start < end; start += PAGE_SIZE) { + clear_bit(PG_reserved, &mem_map[MAP_NR(start)].flags); + set_page_count(&mem_map[MAP_NR(start)], 1); + free_page(start); + ++totalram_pages; + } } void diff -ru redhat/BUILD/linux/include/asm-ia64/system.h lfoo/include/asm-ia64/system.h --- redhat/BUILD/linux/include/asm-ia64/system.h Tue May 30 16:33:01 2000 +++ lfoo/include/asm-ia64/system.h Thu May 25 16:47:59 2000 @@ -54,6 +54,8 @@ __u16 num_pci_vectors; /* number of ACPI derived PCI IRQ's*/ __u64 pci_vectors; /* physical address of PCI data (pci_vector_struct)*/ __u64 fpswa; /* physical address of the the fpswa interface */ + __u64 initrd_start; + __u64 initrd_size; } ia64_boot_param; extern inline void