summaryrefslogtreecommitdiffstats
path: root/arch/mips/mm/r5432.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/mm/r5432.c')
-rw-r--r--arch/mips/mm/r5432.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/mips/mm/r5432.c b/arch/mips/mm/r5432.c
index 0229d0a44..80fa8deef 100644
--- a/arch/mips/mm/r5432.c
+++ b/arch/mips/mm/r5432.c
@@ -459,17 +459,21 @@ static void r5432_flush_page_to_ram_d32(struct page *page)
static void
r5432_flush_icache_range(unsigned long start, unsigned long end)
{
- flush_cache_all();
+ r5432_flush_cache_all_d32i32();
}
+/*
+ * Ok, this seriously sucks. We use them to flush a user page but don't
+ * know the virtual address, so we have to blast away the whole icache
+ * which is significantly more expensive than the real thing.
+ */
static void
r5432_flush_icache_page_i32(struct vm_area_struct *vma, struct page *page)
{
if (!(vma->vm_flags & VM_EXEC))
return;
- address = KSEG0 + (address & PAGE_MASK & (dcache_size - 1));
- blast_icache32_page_indexed(address);
+ r5432_flush_cache_all_d32i32();
}
/*
@@ -835,8 +839,9 @@ void __init ld_mmu_r5432(void)
_clear_page = r5432_clear_page_d32;
_copy_page = r5432_copy_page_d32;
- _flush_page_to_ram = r5432_flush_page_to_ram_d32;
_flush_cache_all = r5432_flush_cache_all_d32i32;
+ ___flush_cache_all = r5432_flush_cache_all_d32i32;
+ _flush_page_to_ram = r5432_flush_page_to_ram_d32;
_flush_cache_mm = r5432_flush_cache_mm_d32i32;
_flush_cache_range = r5432_flush_cache_range_d32i32;
_flush_cache_page = r5432_flush_cache_page_d32i32;
@@ -848,7 +853,7 @@ void __init ld_mmu_r5432(void)
_flush_cache_sigtramp = r5432_flush_cache_sigtramp;
_flush_icache_range = r5432_flush_icache_range; /* Ouch */
- flush_cache_all();
+ __flush_cache_all();
write_32bit_cp0_register(CP0_WIRED, 0);
/*