Patch "KVM: s390: clear kicked_mask before sleeping again" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    KVM: s390: clear kicked_mask before sleeping again

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kvm-s390-clear-kicked_mask-before-sleeping-again.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 07739e5811cd6465ad6ded86e2487977af2494d5
Author: Halil Pasic <pasic@xxxxxxxxxxxxx>
Date:   Tue Oct 19 19:53:59 2021 +0200

    KVM: s390: clear kicked_mask before sleeping again
    
    [ Upstream commit 9b57e9d5010bbed7c0d9d445085840f7025e6f9a ]
    
    The idea behind kicked mask is that we should not re-kick a vcpu that
    is already in the "kick" process, i.e. that was kicked and is
    is about to be dispatched if certain conditions are met.
    
    The problem with the current implementation is, that it assumes the
    kicked vcpu is going to enter SIE shortly. But under certain
    circumstances, the vcpu we just kicked will be deemed non-runnable and
    will remain in wait state. This can happen, if the interrupt(s) this
    vcpu got kicked to deal with got already cleared (because the interrupts
    got delivered to another vcpu). In this case kvm_arch_vcpu_runnable()
    would return false, and the vcpu would remain in kvm_vcpu_block(),
    but this time with its kicked_mask bit set. So next time around we
    wouldn't kick the vcpu form __airqs_kick_single_vcpu(), but would assume
    that we just kicked it.
    
    Let us make sure the kicked_mask is cleared before we give up on
    re-dispatching the vcpu.
    
    Fixes: 9f30f6216378 ("KVM: s390: add gib_alert_irq_handler()")
    Reported-by: Matthew Rosato <mjrosato@xxxxxxxxxxxxx>
    Signed-off-by: Halil Pasic <pasic@xxxxxxxxxxxxx>
    Reviewed-by: Christian Borntraeger <borntraeger@xxxxxxxxxx>
    Reviewed-by: Michael Mueller <mimu@xxxxxxxxxxxxx>
    Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20211019175401.3757927-2-pasic@xxxxxxxxxxxxx
    Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 9ed2fee61229..b286818d8d54 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -3092,6 +3092,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
 
 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
 {
+	clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.gisa_int.kicked_mask);
 	return kvm_s390_vcpu_has_irq(vcpu, 0);
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux