[PATCH] KVM: arm64: Disable TRBE Trace Buffer Unit when running in guest context
Leo Yan
leo.yan at arm.com
Tue Feb 17 11:01:21 PST 2026
On Tue, Feb 17, 2026 at 02:52:32PM +0000, Will Deacon wrote:
[...]
> > > It also looks like we can't rely on the dsb(nsh) in the vcpu_run()
> > > path if that needs to be before the write to TRBLIMITR_EL1.
> > >
> > > In which case, the host->guest something hideous like:
> > >
> > > isb();
> > > tsb_csync(); // Executes twice if ARM64_WORKAROUND_TSB_FLUSH_FAILURE!
> > > dsb(nsh); // I missed this in my patch
> > > write_sysreg_s(0, SYS_TRBLIMITR_EL1);
> > > if (2064142) {
> > > tsb_csync();
> > > dsb(nsh);
> > > }
> > > isb();
> >
> > As I_QXJZX suggests, the section K10.5.10 "Context switching" gives
> > the flow. I'd suggest the VM context switch is also aligned to the
> > description in S_VKHHY.
>
> I honestly have a hard time believing the sequence in S_VKHHY as the DSB
> seems to be in the wrong place which means the TSB CSYNC can float. It
> also isn't aligned with what the EL1 driver does...
Sorry for confusion. I am checking internally for the flow suggested
in S_VKHHY.
> > When switching from host to guest, we need to clear TRCPRGCTLR.EN to
> > zero. As the doc states "ETE trace compression logic is stateful,
> > and disabling the ETE resets this compression state".
> >
> > > and then the guest->host part is:
> > >
> > > write_sysreg_s(trblimitr_el1, SYS_TRBLIMITR_EL1);
> > > isb();
> > > if (2038923)
> > > isb();
> > >
> > > Does that look right to you?
> >
> > S_PKLXF gives the flow for switching in.
>
> Well, modulo errata, sure. I don't have access to the errata document so
> I was more interested in whether I got that right...
Please see the doc:
https://developer.arm.com/documentation/SDEN-1873351/1900/?lang=en
Thanks,
Leo
More information about the linux-arm-kernel
mailing list