Message ID | 20240117151238.93323-3-npiggin@gmail.com |
---|---|
State | New |
Headers | show |
Series | [1/6] target/ppc: Fix 440 tlbwe TLB invalidation gaps | expand |
On 1/17/24 16:12, Nicholas Piggin wrote: > BookE software TLB is implemented by flushing old translations from the > relevant TCG TLB whenever software TLB entries change. This means a new > software TLB entry should not have any corresponding cached TCG TLB > translations, so there is nothing to flush. The exception is multiple > software TLBs that cover the same address and address space, but that > is a programming error and results in undefined behaviour, and flushing > does not give an obviously better outcome in that case either. > > Remove the unnecessary flush of a newly written software TLB entry. > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Acked-by: Cédric Le Goater <clg@kaod.org> Thanks, C. > --- > target/ppc/mmu_helper.c | 7 ------- > 1 file changed, 7 deletions(-) > > diff --git a/target/ppc/mmu_helper.c b/target/ppc/mmu_helper.c > index 949ae87f4f..68632bf54e 100644 > --- a/target/ppc/mmu_helper.c > +++ b/target/ppc/mmu_helper.c > @@ -808,13 +808,6 @@ void helper_4xx_tlbwe_hi(CPUPPCState *env, target_ulong entry, > tlb->prot & PAGE_WRITE ? 'w' : '-', > tlb->prot & PAGE_EXEC ? 'x' : '-', > tlb->prot & PAGE_VALID ? 'v' : '-', (int)tlb->PID); > - /* Invalidate new TLB (if valid) */ > - if (tlb->prot & PAGE_VALID) { > - qemu_log_mask(CPU_LOG_MMU, "%s: invalidate TLB %d start " > - TARGET_FMT_lx " end " TARGET_FMT_lx "\n", __func__, > - (int)entry, tlb->EPN, tlb->EPN + tlb->size); > - ppcemb_tlb_flush(cs, tlb); > - } > } > > void helper_4xx_tlbwe_lo(CPUPPCState *env, target_ulong entry,
diff --git a/target/ppc/mmu_helper.c b/target/ppc/mmu_helper.c index 949ae87f4f..68632bf54e 100644 --- a/target/ppc/mmu_helper.c +++ b/target/ppc/mmu_helper.c @@ -808,13 +808,6 @@ void helper_4xx_tlbwe_hi(CPUPPCState *env, target_ulong entry, tlb->prot & PAGE_WRITE ? 'w' : '-', tlb->prot & PAGE_EXEC ? 'x' : '-', tlb->prot & PAGE_VALID ? 'v' : '-', (int)tlb->PID); - /* Invalidate new TLB (if valid) */ - if (tlb->prot & PAGE_VALID) { - qemu_log_mask(CPU_LOG_MMU, "%s: invalidate TLB %d start " - TARGET_FMT_lx " end " TARGET_FMT_lx "\n", __func__, - (int)entry, tlb->EPN, tlb->EPN + tlb->size); - ppcemb_tlb_flush(cs, tlb); - } } void helper_4xx_tlbwe_lo(CPUPPCState *env, target_ulong entry,
BookE software TLB is implemented by flushing old translations from the relevant TCG TLB whenever software TLB entries change. This means a new software TLB entry should not have any corresponding cached TCG TLB translations, so there is nothing to flush. The exception is multiple software TLBs that cover the same address and address space, but that is a programming error and results in undefined behaviour, and flushing does not give an obviously better outcome in that case either. Remove the unnecessary flush of a newly written software TLB entry. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- target/ppc/mmu_helper.c | 7 ------- 1 file changed, 7 deletions(-)