Commit 483dcf538ea2ac86914bf7deef1d07f3b48d8878

Authored by pbrook
1 parent b362e5e0

Avoid redundant TLB flushes (Daniel Jacobowitz).


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2211 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 9 additions and 0 deletions
target-mips/op_helper.c
... ... @@ -572,8 +572,17 @@ static void invalidate_tlb (int idx)
572 572 {
573 573 tlb_t *tlb;
574 574 target_ulong addr;
  575 + uint8_t ASID;
  576 +
  577 + ASID = env->CP0_EntryHi & 0xFF;
575 578  
576 579 tlb = &env->tlb[idx];
  580 + /* The qemu TLB is flushed then the ASID changes, so no need to
  581 + flush these entries again. */
  582 + if (tlb->G == 0 && tlb->ASID != ASID) {
  583 + return;
  584 + }
  585 +
577 586 if (tlb->V0) {
578 587 tb_invalidate_page_range(tlb->PFN[0], tlb->end - tlb->VPN);
579 588 addr = tlb->VPN;
... ...