From: Peng Hao <flyingpeng@xxxxxxxxxxx> srcu read side in critical section may sleep, so it should precede the read lock, while other paths such as kvm_xen_set_evtchn_fast execute srcu_read_lock before acquiring the read lock. Signed-off-by: Peng Hao <flyingpeng@xxxxxxxxxxx> --- arch/x86/kvm/xen.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c index 280cb5dc7341..fa6e54b13afb 100644 --- a/arch/x86/kvm/xen.c +++ b/arch/x86/kvm/xen.c @@ -965,8 +965,8 @@ static bool wait_pending_event(struct kvm_vcpu *vcpu, int nr_ports, bool ret = true; int idx, i; - read_lock_irqsave(&gpc->lock, flags); idx = srcu_read_lock(&kvm->srcu); + read_lock_irqsave(&gpc->lock, flags); if (!kvm_gfn_to_pfn_cache_check(kvm, gpc, gpc->gpa, PAGE_SIZE)) goto out_rcu; @@ -987,9 +987,8 @@ static bool wait_pending_event(struct kvm_vcpu *vcpu, int nr_ports, } out_rcu: - srcu_read_unlock(&kvm->srcu, idx); read_unlock_irqrestore(&gpc->lock, flags); - + srcu_read_unlock(&kvm->srcu, idx); return ret; } -- 2.27.0