aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/book3s.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kvm/book3s.c')
-rw-r--r--arch/powerpc/kvm/book3s.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index 13173922b678..66b5924e1748 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -168,8 +168,9 @@ void kvmppc_book3s_queue_irqprio(struct kvm_vcpu *vcpu, unsigned int vec)
168} 168}
169 169
170 170
171void kvmppc_core_queue_program(struct kvm_vcpu *vcpu) 171void kvmppc_core_queue_program(struct kvm_vcpu *vcpu, ulong flags)
172{ 172{
173 to_book3s(vcpu)->prog_flags = flags;
173 kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_PROGRAM); 174 kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_PROGRAM);
174} 175}
175 176
@@ -198,6 +199,7 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
198{ 199{
199 int deliver = 1; 200 int deliver = 1;
200 int vec = 0; 201 int vec = 0;
202 ulong flags = 0ULL;
201 203
202 switch (priority) { 204 switch (priority) {
203 case BOOK3S_IRQPRIO_DECREMENTER: 205 case BOOK3S_IRQPRIO_DECREMENTER:
@@ -231,6 +233,7 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
231 break; 233 break;
232 case BOOK3S_IRQPRIO_PROGRAM: 234 case BOOK3S_IRQPRIO_PROGRAM:
233 vec = BOOK3S_INTERRUPT_PROGRAM; 235 vec = BOOK3S_INTERRUPT_PROGRAM;
236 flags = to_book3s(vcpu)->prog_flags;
234 break; 237 break;
235 case BOOK3S_IRQPRIO_VSX: 238 case BOOK3S_IRQPRIO_VSX:
236 vec = BOOK3S_INTERRUPT_VSX; 239 vec = BOOK3S_INTERRUPT_VSX;
@@ -261,7 +264,7 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
261#endif 264#endif
262 265
263 if (deliver) 266 if (deliver)
264 kvmppc_inject_interrupt(vcpu, vec, 0ULL); 267 kvmppc_inject_interrupt(vcpu, vec, flags);
265 268
266 return deliver; 269 return deliver;
267} 270}