|
@@ -612,6 +612,12 @@ static void kvmppc_fill_pt_regs(struct pt_regs *regs)
|
|
|
regs->link = lr;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * For interrupts needed to be handled by host interrupt handlers,
|
|
|
+ * corresponding host handler are called from here in similar way
|
|
|
+ * (but not exact) as they are called from low level handler
|
|
|
+ * (such as from arch/powerpc/kernel/head_fsl_booke.S).
|
|
|
+ */
|
|
|
static void kvmppc_restart_interrupt(struct kvm_vcpu *vcpu,
|
|
|
unsigned int exit_nr)
|
|
|
{
|
|
@@ -639,6 +645,17 @@ static void kvmppc_restart_interrupt(struct kvm_vcpu *vcpu,
|
|
|
kvmppc_fill_pt_regs(®s);
|
|
|
performance_monitor_exception(®s);
|
|
|
break;
|
|
|
+ case BOOKE_INTERRUPT_WATCHDOG:
|
|
|
+ kvmppc_fill_pt_regs(®s);
|
|
|
+#ifdef CONFIG_BOOKE_WDT
|
|
|
+ WatchdogException(®s);
|
|
|
+#else
|
|
|
+ unknown_exception(®s);
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+ case BOOKE_INTERRUPT_CRITICAL:
|
|
|
+ unknown_exception(®s);
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -683,6 +700,10 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|
|
r = RESUME_GUEST;
|
|
|
break;
|
|
|
|
|
|
+ case BOOKE_INTERRUPT_WATCHDOG:
|
|
|
+ r = RESUME_GUEST;
|
|
|
+ break;
|
|
|
+
|
|
|
case BOOKE_INTERRUPT_DOORBELL:
|
|
|
kvmppc_account_exit(vcpu, DBELL_EXITS);
|
|
|
r = RESUME_GUEST;
|