aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm/kvm-s390.h
diff options
context:
space:
mode:
authorDavid Hildenbrand <dahi@linux.vnet.ibm.com>2014-11-20 07:49:32 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-10-13 09:50:34 -0400
commit66933b78e3204057bfc26343afcd0d463c0e8e55 (patch)
tree8d25fc3ce831d7cea11af5d8e73f7ebc94eec258 /arch/s390/kvm/kvm-s390.h
parent4d32ad6becf0baf09f38707f0aff42c0f4367a99 (diff)
KVM: s390: simplify in-kernel program irq injection
The main reason to keep program injection in kernel separated until now was that we were able to do some checking, if really only the owning thread injects program interrupts (via waitqueue_active(li->wq)). This BUG_ON was never triggered and the chances of really hitting it, if another thread injected a program irq to another vcpu, were very small. Let's drop this check and turn kvm_s390_inject_program_int() and kvm_s390_inject_prog_irq() into simple inline functions that makes use of kvm_s390_inject_vcpu(). __must_check can be dropped as they are implicitely given by kvm_s390_inject_vcpu(), to avoid ugly long function prototypes. Reviewed-by: Jens Freimann <jfrei@linux.vnet.ibm.com> Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com> 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/kvm-s390.h')
-rw-r--r--arch/s390/kvm/kvm-s390.h24
1 files changed, 20 insertions, 4 deletions
diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
index c446aabf60d3..3a368d2a6114 100644
--- a/arch/s390/kvm/kvm-s390.h
+++ b/arch/s390/kvm/kvm-s390.h
@@ -175,6 +175,7 @@ static inline int kvm_s390_user_cpu_state_ctrl(struct kvm *kvm)
175 return kvm->arch.user_cpu_state_ctrl != 0; 175 return kvm->arch.user_cpu_state_ctrl != 0;
176} 176}
177 177
178/* implemented in interrupt.c */
178int kvm_s390_handle_wait(struct kvm_vcpu *vcpu); 179int kvm_s390_handle_wait(struct kvm_vcpu *vcpu);
179void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu); 180void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu);
180enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer); 181enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer);
@@ -185,7 +186,25 @@ int __must_check kvm_s390_inject_vm(struct kvm *kvm,
185 struct kvm_s390_interrupt *s390int); 186 struct kvm_s390_interrupt *s390int);
186int __must_check kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu, 187int __must_check kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu,
187 struct kvm_s390_irq *irq); 188 struct kvm_s390_irq *irq);
188int __must_check kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code); 189static inline int kvm_s390_inject_prog_irq(struct kvm_vcpu *vcpu,
190 struct kvm_s390_pgm_info *pgm_info)
191{
192 struct kvm_s390_irq irq = {
193 .type = KVM_S390_PROGRAM_INT,
194 .u.pgm = *pgm_info,
195 };
196
197 return kvm_s390_inject_vcpu(vcpu, &irq);
198}
199static inline int kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code)
200{
201 struct kvm_s390_irq irq = {
202 .type = KVM_S390_PROGRAM_INT,
203 .u.pgm.code = code,
204 };
205
206 return kvm_s390_inject_vcpu(vcpu, &irq);
207}
189struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm, 208struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
190 u64 isc_mask, u32 schid); 209 u64 isc_mask, u32 schid);
191int kvm_s390_reinject_io_int(struct kvm *kvm, 210int kvm_s390_reinject_io_int(struct kvm *kvm,
@@ -231,9 +250,6 @@ extern unsigned long kvm_s390_fac_list_mask[];
231 250
232/* implemented in diag.c */ 251/* implemented in diag.c */
233int kvm_s390_handle_diag(struct kvm_vcpu *vcpu); 252int kvm_s390_handle_diag(struct kvm_vcpu *vcpu);
234/* implemented in interrupt.c */
235int kvm_s390_inject_prog_irq(struct kvm_vcpu *vcpu,
236 struct kvm_s390_pgm_info *pgm_info);
237 253
238static inline void kvm_s390_vcpu_block_all(struct kvm *kvm) 254static inline void kvm_s390_vcpu_block_all(struct kvm *kvm)
239{ 255{