Re: [PATCH 4/9] target/mips: drop hidden TLB shadowing for tlbwr

Kirill A. Korinsky <[email protected]>
Newsgroups org.nongnu.qemu-devel
Message-ID <[email protected]>
Hi Philippe,

Sorry for the very long reply.

I had some time to actually test it under stress to be sure.

On Tue, 28 Jul 2026 10:25:32 +0200,
Philippe Mathieu-Daudé <[email protected]> wrote:
> 
> Hi Kirill,
> 
> On 13/7/26 13:16, Kirill A. Korinsky wrote:
> > tlbwr replaces a random architectural TLB entry. Once that happens, the
> > evicted entry must stop translating guest virtual addresses.
> > 
> > The current helper keeps the evicted entry in QEMU-only extra TLB state.
> > That makes the old mapping survive until some later operation discards
> > the extra entries. A guest can observe this directly by writing through
> > a TLB mapping, replacing that entry with tlbwr, and writing through the
> > old virtual address again.
> > 
> > Invalidate the replaced entry instead of shadowing it. This keeps the
> > translated TLB state aligned with the architectural TLB contents.
> > 
> > Signed-off-by: Kirill A. Korinsky <[email protected]>
> > ---
> >   target/mips/tcg/system/tlb_helper.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/target/mips/tcg/system/tlb_helper.c b/target/mips/tcg/system/tlb_helper.c
> > index 9772df5d6c..4c0a25e622 100644
> > --- a/target/mips/tcg/system/tlb_helper.c
> > +++ b/target/mips/tcg/system/tlb_helper.c
> > @@ -165,7 +165,7 @@ static void r4k_helper_tlbwr(CPUMIPSState *env)
> >   {
> >       int r = cpu_mips_get_random(env);
> >   -    r4k_invalidate_tlb(env, r, 1);
> > +    r4k_invalidate_tlb(env, r, 0);
> >       r4k_fill_tlb(env, r);
> >   }
> 
> This comes from commit 814b9a47490 ("MIPS TLB performance
> improvements, by Daniel Jacobowitz."), 20 years ago and is the
> single use of @use_extra. Should we remove it altogether,
> along with the @tlb_in_use index and r4k_mips_tlb_flush_extra,
> indeed reverting that commit?

No, I don't think that this code shall be reverted.

After weeks of testing I very confident that the issue is missed event ring
handling which I've posted here:
https://marc.info/?l=qemu-devel&m=178449808743198&w=2

With only this patch and octeon machine series, the VM survives different
stress tests, which includes a few bulds of gcc with 16 CPU for weeks.

And USB was used as the only disk.

No deadlock or missed interrupts were observed so far.

-- 
wbr, Kirill
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.