Merge tag 'kvm-s390-master-5.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD

KVM: s390: Fixes for interrupt delivery

Two bugs that might result in CPUs not woken up when interrupts are
pending.

+4 -2
+3 -2
arch/s390/kvm/interrupt.c
··· 3053 3053 int vcpu_idx, online_vcpus = atomic_read(&kvm->online_vcpus); 3054 3054 struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int; 3055 3055 struct kvm_vcpu *vcpu; 3056 + u8 vcpu_isc_mask; 3056 3057 3057 3058 for_each_set_bit(vcpu_idx, kvm->arch.idle_mask, online_vcpus) { 3058 3059 vcpu = kvm_get_vcpu(kvm, vcpu_idx); 3059 3060 if (psw_ioint_disabled(vcpu)) 3060 3061 continue; 3061 - deliverable_mask &= (u8)(vcpu->arch.sie_block->gcr[6] >> 24); 3062 - if (deliverable_mask) { 3062 + vcpu_isc_mask = (u8)(vcpu->arch.sie_block->gcr[6] >> 24); 3063 + if (deliverable_mask & vcpu_isc_mask) { 3063 3064 /* lately kicked but not yet running */ 3064 3065 if (test_and_set_bit(vcpu_idx, gi->kicked_mask)) 3065 3066 return;
+1
arch/s390/kvm/kvm-s390.c
··· 3363 3363 3364 3364 int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) 3365 3365 { 3366 + clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.gisa_int.kicked_mask); 3366 3367 return kvm_s390_vcpu_has_irq(vcpu, 0); 3367 3368 } 3368 3369