Commit 601cfa7b authored by Leonid Yegoshin's avatar Leonid Yegoshin Committed by Ralf Baechle

MIPS: mm: Use the TLBINVF instruction to flush the VTLB

The TLBINVF instruction can be used to flush the entire VTLB.
This eliminates the need for the TLBWI loop and improves performance.
Reviewed-by: default avatarPaul Burton <paul.burton@imgtec.com>
Signed-off-by: default avatarLeonid Yegoshin <Leonid.Yegoshin@imgtec.com>
Signed-off-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/6138/
parent 198bb4ce
...@@ -83,6 +83,11 @@ void local_flush_tlb_all(void) ...@@ -83,6 +83,11 @@ void local_flush_tlb_all(void)
entry = read_c0_wired(); entry = read_c0_wired();
/* Blast 'em all away. */ /* Blast 'em all away. */
if (cpu_has_tlbinv && current_cpu_data.tlbsize) {
write_c0_index(0);
mtc0_tlbw_hazard();
tlbinvf(); /* invalidate VTLB */
} else {
while (entry < current_cpu_data.tlbsize) { while (entry < current_cpu_data.tlbsize) {
/* Make sure all entries differ. */ /* Make sure all entries differ. */
write_c0_entryhi(UNIQUE_ENTRYHI(entry)); write_c0_entryhi(UNIQUE_ENTRYHI(entry));
...@@ -91,6 +96,7 @@ void local_flush_tlb_all(void) ...@@ -91,6 +96,7 @@ void local_flush_tlb_all(void)
tlb_write_indexed(); tlb_write_indexed();
entry++; entry++;
} }
}
tlbw_use_hazard(); tlbw_use_hazard();
write_c0_entryhi(old_ctx); write_c0_entryhi(old_ctx);
flush_itlb(); flush_itlb();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment