Index: linux-2.6.9/include/asm-sh64/pgtable.h
===================================================================
--- linux-2.6.9.orig/include/asm-sh64/pgtable.h	2004-10-21 12:01:24.000000000 -0700
+++ linux-2.6.9/include/asm-sh64/pgtable.h	2004-10-25 14:55:29.000000000 -0700
@@ -462,6 +462,7 @@
 
 extern void update_mmu_cache(struct vm_area_struct * vma,
 			     unsigned long address, pte_t pte);
+#define huge_update_mmu_cache update_mmu_cache
 
 /* Encode and decode a swap entry */
 #define __swp_type(x)			(((x).val & 3) + (((x).val >> 1) & 0x3c))
Index: linux-2.6.9/arch/sh64/mm/cache.c
===================================================================
--- linux-2.6.9.orig/arch/sh64/mm/cache.c	2004-10-25 15:02:58.000000000 -0700
+++ linux-2.6.9/arch/sh64/mm/cache.c	2004-10-25 15:03:16.000000000 -0700
@@ -990,7 +990,16 @@
 
 void flush_dcache_page(struct page *page)
 {
-	sh64_dcache_purge_phy_page(page_to_phys(page));
+	if (likely(!PageCompound))
+		sh64_dcache_purge_phy_page(page_to_phys(page));
+	else {
+		int nr;
+
+		page = page->private;
+		nr = 1 << page[1].index;
+		while (nr--)
+			sh64_dcache_purge_phy_page(page_to_phys(page++));
+	}		
 	wmb();
 }