KVM: s390: Fix hang VCPU hang/loop regression
commit 785dbef407d8 ("KVM: s390: optimize round trip time in request
handling") introduced a regression. This regression was seen with
CPU hotplug in the guest and switching between 1 or 2 CPUs. This will
set/reset the IBS control via synced request.
Whenever we make a synced request, we first set the vcpu->requests
bit and then block the vcpu. The handler, on the other hand, unblocks
itself, processes vcpu->requests (by clearing them) and unblocks itself
Now, if the requester sleeps between setting of vcpu->requests and
blocking, the handler will clear the vcpu->requests bit and try to
unblock itself (although no bit is set). When the requester wakes up,
it blocks the VCPU and we have a blocked VCPU without requests.
Solution is to always unset the block bit.
Signed-off-by: Christian Borntraeger <firstname.lastname@example.org>
Reviewed-by: David Hildenbrand <email@example.com>
Fixes: 785dbef407d8 ("KVM: s390: optimize round trip time in request handling")
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 2078f92..f32f843 100644
@@ -1742,10 +1742,10 @@
static int kvm_s390_handle_requests(struct kvm_vcpu *vcpu)
- if (!vcpu->requests)
- return 0;
+ if (!vcpu->requests)
+ return 0;
* We use MMU_RELOAD just to re-arm the ipte notifier for the
* guest prefix page. gmap_ipte_notify will wait on the ptl lock.