On Wed, Aug 23, 2023 at 02:41:40PM +0200, Michael Mueller wrote: ... > diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c > index 9bd0a873f3b1..73153bea6c24 100644 > --- a/arch/s390/kvm/interrupt.c > +++ b/arch/s390/kvm/interrupt.c > @@ -3205,8 +3205,10 @@ void kvm_s390_gisa_destroy(struct kvm *kvm) > if (gi->alert.mask) > KVM_EVENT(3, "vm 0x%pK has unexpected iam 0x%02x", > kvm, gi->alert.mask); > - while (gisa_in_alert_list(gi->origin)) > - cpu_relax(); > + while (gisa_in_alert_list(gi->origin)) { > + KVM_EVENT(3, "vm 0x%pK gisa in alert list during destroy", kvm); > + process_gib_alert_list(); process_gib_alert_list() has two nested loops and neither of them does cpu_relax(). I guess, those are needed instead of one you remove? > + } > hrtimer_cancel(&gi->timer); > gi->origin = NULL; > VM_EVENT(kvm, 3, "gisa 0x%pK destroyed", gisa);