|
@@ -335,6 +335,18 @@ int cpu_exec(CPUArchState *env)
|
|
|
cpu_loop_exit(cpu);
|
|
|
}
|
|
|
#endif
|
|
|
+#if defined(TARGET_I386)
|
|
|
+ if (interrupt_request & CPU_INTERRUPT_INIT) {
|
|
|
+ cpu_svm_check_intercept_param(env, SVM_EXIT_INIT, 0);
|
|
|
+ do_cpu_init(x86_cpu);
|
|
|
+ cpu->exception_index = EXCP_HALTED;
|
|
|
+ cpu_loop_exit(cpu);
|
|
|
+ }
|
|
|
+#else
|
|
|
+ if (interrupt_request & CPU_INTERRUPT_RESET) {
|
|
|
+ cpu_reset(cpu);
|
|
|
+ }
|
|
|
+#endif
|
|
|
#if defined(TARGET_I386)
|
|
|
#if !defined(CONFIG_USER_ONLY)
|
|
|
if (interrupt_request & CPU_INTERRUPT_POLL) {
|
|
@@ -342,13 +354,7 @@ int cpu_exec(CPUArchState *env)
|
|
|
apic_poll_irq(x86_cpu->apic_state);
|
|
|
}
|
|
|
#endif
|
|
|
- if (interrupt_request & CPU_INTERRUPT_INIT) {
|
|
|
- cpu_svm_check_intercept_param(env, SVM_EXIT_INIT,
|
|
|
- 0);
|
|
|
- do_cpu_init(x86_cpu);
|
|
|
- cpu->exception_index = EXCP_HALTED;
|
|
|
- cpu_loop_exit(cpu);
|
|
|
- } else if (interrupt_request & CPU_INTERRUPT_SIPI) {
|
|
|
+ if (interrupt_request & CPU_INTERRUPT_SIPI) {
|
|
|
do_cpu_sipi(x86_cpu);
|
|
|
} else if (env->hflags2 & HF2_GIF_MASK) {
|
|
|
if ((interrupt_request & CPU_INTERRUPT_SMI) &&
|
|
@@ -405,9 +411,6 @@ int cpu_exec(CPUArchState *env)
|
|
|
}
|
|
|
}
|
|
|
#elif defined(TARGET_PPC)
|
|
|
- if ((interrupt_request & CPU_INTERRUPT_RESET)) {
|
|
|
- cpu_reset(cpu);
|
|
|
- }
|
|
|
if (interrupt_request & CPU_INTERRUPT_HARD) {
|
|
|
ppc_hw_interrupt(env);
|
|
|
if (env->pending_interrupts == 0) {
|