Re: [PATCH v3 04/10] qemu-kvm: Clean up mpstate synchronization

Marcelo Tosatti
2010-02-24T23:28:22Z

On Wed, Feb 24, 2010 at 03:17:52PM +0100, Jan Kiszka wrote:
> Push mpstate reading/writing into kvm_arch_load/save_regs and, on x86,
> properly synchronize with halted in the accessor functions.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>

> @@ -1290,6 +1318,7 @@ int kvm_arch_init_vcpu(CPUState *cenv)
> #ifdef KVM_EXIT_TPR_ACCESS
> kvm_tpr_vcpu_start(cenv);
> #endif
> + kvm_reset_mpstate(cenv);
> return 0;
> }
>
> @@ -1363,15 +1392,10 @@ void kvm_arch_cpu_reset(CPUState *env)
> {
> kvm_arch_reset_vcpu(env);
> kvm_put_vcpu_events(env);
> - if (!cpu_is_bsp(env)) {
> - if (kvm_irqchip_in_kernel()) {
> -#ifdef KVM_CAP_MP_STATE
> - kvm_reset_mpstate(env);
> -#endif
> - } else {
> - env->interrupt_request &= ~CPU_INTERRUPT_HARD;
> - env->halted = 1;
> - }
> + kvm_reset_mpstate(env);
> + if (!cpu_is_bsp(env) && !kvm_irqchip_in_kernel()) {
> + env->interrupt_request &= ~CPU_INTERRUPT_HARD;
> + env->halted = 1;
> }
> }

Why are these two needed? Now that initialization of mp_state
happens via synchronize_state(init/reset) -> arch_load_regs?