Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: PPC: Provide functions for queueing up FP/VEC/VSX unavailable interrupts

This provides functions that can be used for generating interrupts
indicating that a given functional unit (floating point, vector, or
VSX) is unavailable. These functions will be used in instruction
emulation code.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>

+26
+3
arch/powerpc/include/asm/kvm_ppc.h
··· 132 132 extern int kvmppc_core_prepare_to_enter(struct kvm_vcpu *vcpu); 133 133 extern int kvmppc_core_pending_dec(struct kvm_vcpu *vcpu); 134 134 extern void kvmppc_core_queue_program(struct kvm_vcpu *vcpu, ulong flags); 135 + extern void kvmppc_core_queue_fpunavail(struct kvm_vcpu *vcpu); 136 + extern void kvmppc_core_queue_vec_unavail(struct kvm_vcpu *vcpu); 137 + extern void kvmppc_core_queue_vsx_unavail(struct kvm_vcpu *vcpu); 135 138 extern void kvmppc_core_queue_dec(struct kvm_vcpu *vcpu); 136 139 extern void kvmppc_core_dequeue_dec(struct kvm_vcpu *vcpu); 137 140 extern void kvmppc_core_queue_external(struct kvm_vcpu *vcpu,
+18
arch/powerpc/kvm/book3s.c
··· 197 197 } 198 198 EXPORT_SYMBOL_GPL(kvmppc_core_queue_program); 199 199 200 + void kvmppc_core_queue_fpunavail(struct kvm_vcpu *vcpu) 201 + { 202 + /* might as well deliver this straight away */ 203 + kvmppc_inject_interrupt(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, 0); 204 + } 205 + 206 + void kvmppc_core_queue_vec_unavail(struct kvm_vcpu *vcpu) 207 + { 208 + /* might as well deliver this straight away */ 209 + kvmppc_inject_interrupt(vcpu, BOOK3S_INTERRUPT_ALTIVEC, 0); 210 + } 211 + 212 + void kvmppc_core_queue_vsx_unavail(struct kvm_vcpu *vcpu) 213 + { 214 + /* might as well deliver this straight away */ 215 + kvmppc_inject_interrupt(vcpu, BOOK3S_INTERRUPT_VSX, 0); 216 + } 217 + 200 218 void kvmppc_core_queue_dec(struct kvm_vcpu *vcpu) 201 219 { 202 220 kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_DECREMENTER);
+5
arch/powerpc/kvm/booke.c
··· 300 300 kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_PROGRAM); 301 301 } 302 302 303 + void kvmppc_core_queue_fpunavail(struct kvm_vcpu *vcpu) 304 + { 305 + kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_FP_UNAVAIL); 306 + } 307 + 303 308 void kvmppc_core_queue_dec(struct kvm_vcpu *vcpu) 304 309 { 305 310 kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_DECREMENTER);