|
@@ -168,8 +168,9 @@ void kvmppc_book3s_queue_irqprio(struct kvm_vcpu *vcpu, unsigned int vec)
|
|
|
}
|
|
|
|
|
|
|
|
|
-void kvmppc_core_queue_program(struct kvm_vcpu *vcpu)
|
|
|
+void kvmppc_core_queue_program(struct kvm_vcpu *vcpu, ulong flags)
|
|
|
{
|
|
|
+ to_book3s(vcpu)->prog_flags = flags;
|
|
|
kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_PROGRAM);
|
|
|
}
|
|
|
|
|
@@ -198,6 +199,7 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
|
|
|
{
|
|
|
int deliver = 1;
|
|
|
int vec = 0;
|
|
|
+ ulong flags = 0ULL;
|
|
|
|
|
|
switch (priority) {
|
|
|
case BOOK3S_IRQPRIO_DECREMENTER:
|
|
@@ -231,6 +233,7 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
|
|
|
break;
|
|
|
case BOOK3S_IRQPRIO_PROGRAM:
|
|
|
vec = BOOK3S_INTERRUPT_PROGRAM;
|
|
|
+ flags = to_book3s(vcpu)->prog_flags;
|
|
|
break;
|
|
|
case BOOK3S_IRQPRIO_VSX:
|
|
|
vec = BOOK3S_INTERRUPT_VSX;
|
|
@@ -261,7 +264,7 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
|
|
|
#endif
|
|
|
|
|
|
if (deliver)
|
|
|
- kvmppc_inject_interrupt(vcpu, vec, 0ULL);
|
|
|
+ kvmppc_inject_interrupt(vcpu, vec, flags);
|
|
|
|
|
|
return deliver;
|
|
|
}
|