Index: linux-2.6.9/arch/ia64/mm/init.c =================================================================== --- linux-2.6.9.orig/arch/ia64/mm/init.c 2004-10-21 12:01:21.000000000 -0700 +++ linux-2.6.9/arch/ia64/mm/init.c 2004-10-25 15:32:35.000000000 -0700 @@ -95,6 +95,26 @@ set_bit(PG_arch_1, &page->flags); /* mark page as clean */ } +void +huge_update_mmu_cache (struct vm_area_struct *vma, unsigned long vaddr, pte_t pte) +{ + unsigned long addr; + struct page *page; + + if (!pte_exec(pte)) + return; /* not an executable page... */ + + page = pte_page(pte); + /* don't use VADDR: it may not be mapped on this CPU (or may have just been flushed): */ + addr = (unsigned long) page_address(page); + + if (test_bit(PG_arch_1, &page->flags)) + return; /* i-cache is already coherent with d-cache */ + + flush_icache_range(addr, addr + HPAGE_SIZE); + set_bit(PG_arch_1, &page->flags); /* mark page as clean */ +} + inline void ia64_set_rbs_bot (void) { Index: linux-2.6.9/include/asm-ia64/pgtable.h =================================================================== --- linux-2.6.9.orig/include/asm-ia64/pgtable.h 2004-10-21 12:01:24.000000000 -0700 +++ linux-2.6.9/include/asm-ia64/pgtable.h 2004-10-25 15:31:39.000000000 -0700 @@ -481,7 +481,8 @@ * information. However, we use this routine to take care of any (delayed) i-cache * flushing that may be necessary. */ -extern void update_mmu_cache (struct vm_area_struct *vma, unsigned long vaddr, pte_t pte); +extern void update_mmu_cache(struct vm_area_struct *vma, unsigned long vaddr, pte_t pte); +extern void huge_update_mmu_cache(struct vm_area_struct *vma, unsigned long vaddr, pte_t pte); #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS /*