On Thu, Feb 15, 2024, Paul Durrant wrote: > From: Paul Durrant <pdurrant@xxxxxxxxxx> > > As described in [1] compiling with CONFIG_PROVE_RAW_LOCK_NESTING shows that > kvm_xen_set_evtchn_fast() is blocking on pfncache locks in IRQ context. > There is only actually blocking with PREEMPT_RT because the locks will > turned into mutexes. There is no 'raw' version of rwlock_t that can be used > to avoid that, so use read_trylock() and treat failure to lock the same as > an invalid cache. > > [1] https://lore.kernel.org/lkml/99771ef3a4966a01fefd3adbb2ba9c3a75f97cf2.camel@xxxxxxxxxxxxx/T/#mbd06e5a04534ce9c0ee94bd8f1e8d942b2d45bd6 > > Signed-off-by: Paul Durrant <pdurrant@xxxxxxxxxx> > Reviewed-by: David Woodhouse <dwmw@xxxxxxxxxxxx> > --- > Cc: Sean Christopherson <seanjc@xxxxxxxxxx> > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: Borislav Petkov <bp@xxxxxxxxx> > Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> > Cc: "H. Peter Anvin" <hpa@xxxxxxxxx> > Cc: David Woodhouse <dwmw2@xxxxxxxxxxxxx> > Cc: x86@xxxxxxxxxx > > v13: > - Patch title change. > > v11: > - Amended the commit comment. > > v10: > - New in this version. > --- > arch/x86/kvm/xen.c | 30 ++++++++++++++++++++---------- > 1 file changed, 20 insertions(+), 10 deletions(-) > > diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c > index 59073642c078..8650141b266e 100644 > --- a/arch/x86/kvm/xen.c > +++ b/arch/x86/kvm/xen.c > @@ -1678,10 +1678,13 @@ static int set_shinfo_evtchn_pending(struct kvm_vcpu *vcpu, u32 port) > unsigned long flags; > int rc = -EWOULDBLOCK; > > - read_lock_irqsave(&gpc->lock, flags); > - if (!kvm_gpc_check(gpc, PAGE_SIZE)) > + local_irq_save(flags); > + if (!read_trylock(&gpc->lock)) > goto out; I am not comfortable applying this patch. As shown by the need for the next patch to optimize unrelated invalidations, switching to read_trylock() is more subtle than it seems at first glance. Specifically, there are no fairness guarantees. I am not dead set against this change, but I don't want to put my SoB on what I consider to be a hack. I've zero objections if you can convince Paolo to take this directly, i.e. this isn't a NAK. I just don't want to take it through my tree.