|
@@ -685,8 +685,14 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|
|
|
|
|
case BOOKE_INTERRUPT_PROGRAM:
|
|
|
if (vcpu->arch.shared->msr & (MSR_PR | MSR_GS)) {
|
|
|
- /* Program traps generated by user-level software must be handled
|
|
|
- * by the guest kernel. */
|
|
|
+ /*
|
|
|
+ * Program traps generated by user-level software must
|
|
|
+ * be handled by the guest kernel.
|
|
|
+ *
|
|
|
+ * In GS mode, hypervisor privileged instructions trap
|
|
|
+ * on BOOKE_INTERRUPT_HV_PRIV, not here, so these are
|
|
|
+ * actual program interrupts, handled by the guest.
|
|
|
+ */
|
|
|
kvmppc_core_queue_program(vcpu, vcpu->arch.fault_esr);
|
|
|
r = RESUME_GUEST;
|
|
|
kvmppc_account_exit(vcpu, USR_PR_INST);
|