|
@@ -236,10 +236,15 @@ static inline int kvm_s390_gisa_tac_ipm_gisc(struct kvm_s390_gisa *gisa, u32 gis
|
|
|
return test_and_clear_bit_inv(IPM_BIT_OFFSET + gisc, (unsigned long *) gisa);
|
|
|
}
|
|
|
|
|
|
-static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
|
|
|
+static inline unsigned long pending_irqs_no_gisa(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
return vcpu->kvm->arch.float_int.pending_irqs |
|
|
|
- vcpu->arch.local_int.pending_irqs |
|
|
|
+ vcpu->arch.local_int.pending_irqs;
|
|
|
+}
|
|
|
+
|
|
|
+static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
|
|
|
+{
|
|
|
+ return pending_irqs_no_gisa(vcpu) |
|
|
|
kvm_s390_gisa_get_ipm(vcpu->kvm->arch.gisa) << IRQ_PEND_IO_ISC_7;
|
|
|
}
|
|
|
|
|
@@ -337,7 +342,7 @@ static void __reset_intercept_indicators(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
- if (!(pending_irqs(vcpu) & IRQ_PEND_IO_MASK))
|
|
|
+ if (!(pending_irqs_no_gisa(vcpu) & IRQ_PEND_IO_MASK))
|
|
|
return;
|
|
|
else if (psw_ioint_disabled(vcpu))
|
|
|
kvm_s390_set_cpuflags(vcpu, CPUSTAT_IO_INT);
|