On Thu, Feb 15, 2024, Paul Durrant wrote:
From: Paul Durrant pdurrant@amazon.com
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@...
Signed-off-by: Paul Durrant pdurrant@amazon.com Reviewed-by: David Woodhouse dwmw@amazon.co.uk
Cc: Sean Christopherson seanjc@google.com Cc: Paolo Bonzini pbonzini@redhat.com Cc: Thomas Gleixner tglx@linutronix.de Cc: Ingo Molnar mingo@redhat.com Cc: Borislav Petkov bp@alien8.de Cc: Dave Hansen dave.hansen@linux.intel.com Cc: "H. Peter Anvin" hpa@zytor.com Cc: David Woodhouse dwmw2@infradead.org Cc: x86@kernel.org
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.