From 232fc23bed97f92b939d5b2802a481c1dea5991b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andreas=20F=C3=A4rber?= Date: Sat, 5 May 2012 01:14:41 +0200 Subject: [PATCH] target-i386: Pass X86CPU to do_cpu_{init,sipi}() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Allows to use cpu_reset() in place of cpu_state_reset(). Signed-off-by: Andreas Färber Reviewed-by: Igor Mammedov --- cpu-exec.c | 4 ++-- target-i386/cpu.h | 4 ++-- target-i386/helper.c | 13 ++++++++----- target-i386/kvm.c | 6 ++++-- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cpu-exec.c b/cpu-exec.c index 0344cd5..fbb39cb 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -287,11 +287,11 @@ int cpu_exec(CPUArchState *env) #if defined(TARGET_I386) if (interrupt_request & CPU_INTERRUPT_INIT) { svm_check_intercept(env, SVM_EXIT_INIT); - do_cpu_init(env); + do_cpu_init(x86_env_get_cpu(env)); env->exception_index = EXCP_HALTED; cpu_loop_exit(env); } else if (interrupt_request & CPU_INTERRUPT_SIPI) { - do_cpu_sipi(env); + do_cpu_sipi(x86_env_get_cpu(env)); } else if (env->hflags2 & HF2_GIF_MASK) { if ((interrupt_request & CPU_INTERRUPT_SMI) && !(env->hflags & HF_SMM_MASK)) { diff --git a/target-i386/cpu.h b/target-i386/cpu.h index 2460f63..aeff20b 100644 --- a/target-i386/cpu.h +++ b/target-i386/cpu.h @@ -1053,8 +1053,8 @@ static inline void cpu_get_tb_cpu_state(CPUX86State *env, target_ulong *pc, (env->eflags & (IOPL_MASK | TF_MASK | RF_MASK | VM_MASK)); } -void do_cpu_init(CPUX86State *env); -void do_cpu_sipi(CPUX86State *env); +void do_cpu_init(X86CPU *cpu); +void do_cpu_sipi(X86CPU *cpu); #define MCE_INJECT_BROADCAST 1 #define MCE_INJECT_UNCOND_AO 2 diff --git a/target-i386/helper.c b/target-i386/helper.c index 3421be2..e182025 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -1187,27 +1187,30 @@ CPUX86State *cpu_x86_init(const char *cpu_model) } #if !defined(CONFIG_USER_ONLY) -void do_cpu_init(CPUX86State *env) +void do_cpu_init(X86CPU *cpu) { + CPUX86State *env = &cpu->env; int sipi = env->interrupt_request & CPU_INTERRUPT_SIPI; uint64_t pat = env->pat; - cpu_state_reset(env); + cpu_reset(CPU(cpu)); env->interrupt_request = sipi; env->pat = pat; apic_init_reset(env->apic_state); env->halted = !cpu_is_bsp(env); } -void do_cpu_sipi(CPUX86State *env) +void do_cpu_sipi(X86CPU *cpu) { + CPUX86State *env = &cpu->env; + apic_sipi(env->apic_state); } #else -void do_cpu_init(CPUX86State *env) +void do_cpu_init(X86CPU *cpu) { } -void do_cpu_sipi(CPUX86State *env) +void do_cpu_sipi(X86CPU *cpu) { } #endif diff --git a/target-i386/kvm.c b/target-i386/kvm.c index e74a9e4..0d0d8f6 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -1698,6 +1698,8 @@ void kvm_arch_post_run(CPUX86State *env, struct kvm_run *run) int kvm_arch_process_async_events(CPUX86State *env) { + X86CPU *cpu = x86_env_get_cpu(env); + if (env->interrupt_request & CPU_INTERRUPT_MCE) { /* We must not raise CPU_INTERRUPT_MCE if it's not supported. */ assert(env->mcg_cap); @@ -1732,11 +1734,11 @@ int kvm_arch_process_async_events(CPUX86State *env) } if (env->interrupt_request & CPU_INTERRUPT_INIT) { kvm_cpu_synchronize_state(env); - do_cpu_init(env); + do_cpu_init(cpu); } if (env->interrupt_request & CPU_INTERRUPT_SIPI) { kvm_cpu_synchronize_state(env); - do_cpu_sipi(env); + do_cpu_sipi(cpu); } if (env->interrupt_request & CPU_INTERRUPT_TPR) { env->interrupt_request &= ~CPU_INTERRUPT_TPR; -- 2.7.4