Skip to content

Commit 4b2caef

Browse files
committed
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.
2 parents 8228c77 + 0e9ff65 commit 4b2caef

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

arch/s390/kvm/interrupt.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3053,13 +3053,14 @@ static void __airqs_kick_single_vcpu(struct kvm *kvm, u8 deliverable_mask)
30533053
int vcpu_idx, online_vcpus = atomic_read(&kvm->online_vcpus);
30543054
struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;
30553055
struct kvm_vcpu *vcpu;
3056+
u8 vcpu_isc_mask;
30563057

30573058
for_each_set_bit(vcpu_idx, kvm->arch.idle_mask, online_vcpus) {
30583059
vcpu = kvm_get_vcpu(kvm, vcpu_idx);
30593060
if (psw_ioint_disabled(vcpu))
30603061
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) {
30633064
/* lately kicked but not yet running */
30643065
if (test_and_set_bit(vcpu_idx, gi->kicked_mask))
30653066
return;

arch/s390/kvm/kvm-s390.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3363,6 +3363,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
33633363

33643364
int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
33653365
{
3366+
clear_bit(vcpu->vcpu_idx, vcpu->kvm->arch.gisa_int.kicked_mask);
33663367
return kvm_s390_vcpu_has_irq(vcpu, 0);
33673368
}
33683369

0 commit comments

Comments
 (0)