@@ -190,7 +190,7 @@ static void rtas_start_cpu(sPAPREnvironment *spapr,
/* This will make sure qemu state is up to date with kvm, and
* mark it dirty so our changes get flushed back before the
* new cpu enters */
- kvm_cpu_synchronize_state(env);
+ kvm_cpu_synchronize_state(env, KVM_REGSYNC_FULL_STATE);
env->msr = (1ULL << MSR_SF) | (1ULL << MSR_ME);
env->nip = start;
@@ -229,7 +229,7 @@ struct kvm_cpu_syncstate_args {
int regmap;
};
-void kvm_cpu_synchronize_state(CPUArchState *env);
+void kvm_cpu_synchronize_state(CPUArchState *env, int regmap);
void kvm_cpu_synchronize_post_reset(CPUArchState *env);
void kvm_cpu_synchronize_post_init(CPUArchState *env);
@@ -238,7 +238,7 @@ void kvm_cpu_synchronize_post_init(CPUArchState *env);
static inline void cpu_synchronize_state(CPUArchState *env)
{
if (kvm_enabled()) {
- kvm_cpu_synchronize_state(env);
+ kvm_cpu_synchronize_state(env, KVM_REGSYNC_FULL_STATE);
}
}
@@ -1502,13 +1502,13 @@ static void do_kvm_cpu_synchronize_state(void *arg)
}
}
-void kvm_cpu_synchronize_state(CPUArchState *env)
+void kvm_cpu_synchronize_state(CPUArchState *env, int regmap)
{
CPUState *cpu = ENV_GET_CPU(env);
struct kvm_cpu_syncstate_args args;
args.cpu = cpu;
- args.regmap = KVM_REGSYNC_FULL_STATE;
+ args.regmap = regmap;
if (args.regmap & ~cpu->kvm_vcpu_dirty) {
run_on_cpu(cpu, do_kvm_cpu_synchronize_state, &args);
@@ -38,7 +38,7 @@ void kvm_flush_coalesced_mmio_buffer(void)
{
}
-void kvm_cpu_synchronize_state(CPUArchState *env)
+void kvm_cpu_synchronize_state(CPUArchState *env, int regmap)
{
}
@@ -1812,7 +1812,7 @@ int kvm_arch_process_async_events(CPUState *cs)
env->interrupt_request &= ~CPU_INTERRUPT_MCE;
- kvm_cpu_synchronize_state(env);
+ kvm_cpu_synchronize_state(env, KVM_REGSYNC_FULL_STATE);
if (env->exception_injected == EXCP08_DBLE) {
/* this means triple fault */
@@ -1843,16 +1843,16 @@ int kvm_arch_process_async_events(CPUState *cs)
env->halted = 0;
}
if (env->interrupt_request & CPU_INTERRUPT_INIT) {
- kvm_cpu_synchronize_state(env);
+ kvm_cpu_synchronize_state(env, KVM_REGSYNC_FULL_STATE);
do_cpu_init(cpu);
}
if (env->interrupt_request & CPU_INTERRUPT_SIPI) {
- kvm_cpu_synchronize_state(env);
+ kvm_cpu_synchronize_state(env, KVM_REGSYNC_FULL_STATE);
do_cpu_sipi(cpu);
}
if (env->interrupt_request & CPU_INTERRUPT_TPR) {
env->interrupt_request &= ~CPU_INTERRUPT_TPR;
- kvm_cpu_synchronize_state(env);
+ kvm_cpu_synchronize_state(env, KVM_REGSYNC_FULL_STATE);
apic_handle_tpr_access_report(env->apic_state, env->eip,
env->tpr_access_type);
}
@@ -2138,7 +2138,7 @@ bool kvm_arch_stop_on_emulation_error(CPUState *cs)
X86CPU *cpu = X86_CPU(cs);
CPUX86State *env = &cpu->env;
- kvm_cpu_synchronize_state(env);
+ kvm_cpu_synchronize_state(env, KVM_REGSYNC_FULL_STATE);
return !(env->cr[0] & CR0_PE_MASK) ||
((env->segs[R_CS].selector & 3) != 3);
}