Index: linux-2.6.18-mm3/arch/ia64/mm/init.c =================================================================== --- linux-2.6.18-mm3.orig/arch/ia64/mm/init.c 2006-10-09 22:03:33.929731832 -0700 +++ linux-2.6.18-mm3/arch/ia64/mm/init.c 2006-10-10 10:23:20.946754455 -0700 @@ -408,6 +408,9 @@ ia64_mmu_init (void *my_cpu_data) } #ifdef CONFIG_VIRTUAL_MEM_MAP + +EXPORT_SYMBOL(mem_map); + int vmemmap_find_next_valid_pfn(int node, int i) { unsigned long end_address, hole_next_pfn; Index: linux-2.6.18-mm3/include/asm-ia64/page.h =================================================================== --- linux-2.6.18-mm3.orig/include/asm-ia64/page.h 2006-10-09 23:19:13.410082887 -0700 +++ linux-2.6.18-mm3/include/asm-ia64/page.h 2006-10-09 23:52:13.718587781 -0700 @@ -106,9 +106,9 @@ extern int ia64_pfn_valid (unsigned long #endif #ifdef CONFIG_VIRTUAL_MEM_MAP -#define VMMAP ((struct page *)VIRTUAL_MEM_MAP) -#define page_to_pfn(page) ((unsigned long) (page - VMMAP)) -#define pfn_to_page(pfn) (VMMAP + (pfn)) +extern struct page mem_map[]; +#define page_to_pfn(page) ((unsigned long) (page - mem_map)) +#define pfn_to_page(pfn) (mem_map + (pfn)) #endif #if defined(CONFIG_FLATMEM) || defined(CONFIG_SPARSEMEM) Index: linux-2.6.18-mm3/arch/ia64/kernel/vmlinux.lds =================================================================== --- linux-2.6.18-mm3.orig/arch/ia64/kernel/vmlinux.lds 2006-10-09 23:48:46.420830837 -0700 +++ linux-2.6.18-mm3/arch/ia64/kernel/vmlinux.lds 2006-10-10 10:01:01.882892666 -0700 @@ -371,6 +371,22 @@ * page-out routines. */ /* + * Definitions to support various sizes of kernel pages + * that can be used to reduce TLB pressure. + * + * Supported lage page shifts and sizes are: + * + * 18(256k) 20(1M) 22(4M) 24(16M) 26(64M) 28(256M) 30(1GB) + */ + + + + + + + +/* Extract various things from a VKP address */ +/* * Identity-mapped regions use a large page size. We'll call such large pages * "granules". If you can think of a better name that's unambiguous, let me * know... @@ -430,7 +446,7 @@ SECTIONS v = (7<<(61)); /* this symbol is here to make debugging easier... */ phys_start = _start - (((5<<(61))+0x100000000) - (1 << 26)); - mem_map = 1; + mem_map = ((4<<(61)) + ((((20)-18) / 2 + 1) << ((((14 + ((14 -3))) + ((14 -3))) + ((14 -3))) + (14 -3) - 3))); code : { } :code . = ((5<<(61))+0x100000000);