aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm
diff options
context:
space:
mode:
authorDavid Hildenbrand <dahi@linux.vnet.ibm.com>2015-09-28 08:27:51 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-10-13 09:50:33 -0400
commit5f94c58ed0a6db016528d8555f1b655ad354f7bb (patch)
treeccb8596eb3a88cefa4285bf882dbc1a05275f2e7 /arch/s390/kvm
parentfee0e0fdb2b9c221a3621bede722aa9f9c9f0d39 (diff)
KVM: s390: set interception requests for all floating irqs
No need to separate pending and floating irqs when setting interception requests. Let's do it for all equally. Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Diffstat (limited to 'arch/s390/kvm')
-rw-r--r--arch/s390/kvm/interrupt.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index 1058240b3db3..4f05520efbae 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -107,14 +107,10 @@ static inline u8 int_word_to_isc(u32 int_word)
107 return (int_word & 0x38000000) >> 27; 107 return (int_word & 0x38000000) >> 27;
108} 108}
109 109
110static inline unsigned long pending_floating_irqs(struct kvm_vcpu *vcpu) 110static inline unsigned long pending_irqs(struct kvm_vcpu *vcpu)
111{ 111{
112 return vcpu->kvm->arch.float_int.pending_irqs; 112 return vcpu->kvm->arch.float_int.pending_irqs |
113} 113 vcpu->arch.local_int.pending_irqs;
114
115static inline unsigned long pending_local_irqs(struct kvm_vcpu *vcpu)
116{
117 return vcpu->arch.local_int.pending_irqs;
118} 114}
119 115
120static unsigned long disable_iscs(struct kvm_vcpu *vcpu, 116static unsigned long disable_iscs(struct kvm_vcpu *vcpu,
@@ -133,8 +129,7 @@ static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu)
133{ 129{
134 unsigned long active_mask; 130 unsigned long active_mask;
135 131
136 active_mask = pending_local_irqs(vcpu); 132 active_mask = pending_irqs(vcpu);
137 active_mask |= pending_floating_irqs(vcpu);
138 if (!active_mask) 133 if (!active_mask)
139 return 0; 134 return 0;
140 135
@@ -202,7 +197,7 @@ static void __set_cpuflag(struct kvm_vcpu *vcpu, u32 flag)
202 197
203static void set_intercept_indicators_io(struct kvm_vcpu *vcpu) 198static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
204{ 199{
205 if (!(pending_floating_irqs(vcpu) & IRQ_PEND_IO_MASK)) 200 if (!(pending_irqs(vcpu) & IRQ_PEND_IO_MASK))
206 return; 201 return;
207 else if (psw_ioint_disabled(vcpu)) 202 else if (psw_ioint_disabled(vcpu))
208 __set_cpuflag(vcpu, CPUSTAT_IO_INT); 203 __set_cpuflag(vcpu, CPUSTAT_IO_INT);
@@ -212,7 +207,7 @@ static void set_intercept_indicators_io(struct kvm_vcpu *vcpu)
212 207
213static void set_intercept_indicators_ext(struct kvm_vcpu *vcpu) 208static void set_intercept_indicators_ext(struct kvm_vcpu *vcpu)
214{ 209{
215 if (!(pending_local_irqs(vcpu) & IRQ_PEND_EXT_MASK)) 210 if (!(pending_irqs(vcpu) & IRQ_PEND_EXT_MASK))
216 return; 211 return;
217 if (psw_extint_disabled(vcpu)) 212 if (psw_extint_disabled(vcpu))
218 __set_cpuflag(vcpu, CPUSTAT_EXT_INT); 213 __set_cpuflag(vcpu, CPUSTAT_EXT_INT);
@@ -222,7 +217,7 @@ static void set_intercept_indicators_ext(struct kvm_vcpu *vcpu)
222 217
223static void set_intercept_indicators_mchk(struct kvm_vcpu *vcpu) 218static void set_intercept_indicators_mchk(struct kvm_vcpu *vcpu)
224{ 219{
225 if (!(pending_local_irqs(vcpu) & IRQ_PEND_MCHK_MASK)) 220 if (!(pending_irqs(vcpu) & IRQ_PEND_MCHK_MASK))
226 return; 221 return;
227 if (psw_mchk_disabled(vcpu)) 222 if (psw_mchk_disabled(vcpu))
228 vcpu->arch.sie_block->ictl |= ICTL_LPSW; 223 vcpu->arch.sie_block->ictl |= ICTL_LPSW;