@@ -16,12 +16,12 @@ int kvm_arch_qemu_create_context(void)
return 0;
}
-void kvm_arch_load_regs(CPUState *env, int level)
+void kvm_arch_put_registers(CPUState *env, int level)
{
}
-void kvm_arch_save_regs(CPUState *env)
+void kvm_arch_get_registers(CPUState *env)
{
}
@@ -474,73 +474,6 @@ int kvm_arch_qemu_create_context(void)
return 0;
}
-#define XSAVE_CWD_RIP 2
-#define XSAVE_CWD_RDP 4
-#define XSAVE_MXCSR 6
-#define XSAVE_ST_SPACE 8
-#define XSAVE_XMM_SPACE 40
-#define XSAVE_XSTATE_BV 128
-#define XSAVE_YMMH_SPACE 144
-
-void kvm_arch_load_regs(CPUState *env, int level)
-{
- int rc;
-
- assert(kvm_cpu_is_stopped(env) || qemu_cpu_is_self(env));
-
- kvm_getput_regs(env, 1);
-
- kvm_put_xsave(env);
- kvm_put_xcrs(env);
-
- kvm_put_sregs(env);
-
- rc = kvm_put_msrs(env, level);
- if (rc < 0) {
- perror("kvm__msrs FAILED");
- }
-
- if (level >= KVM_PUT_RESET_STATE) {
- kvm_put_mp_state(env);
- kvm_load_lapic(env);
- }
- if (level == KVM_PUT_FULL_STATE) {
- if (env->kvm_vcpu_update_vapic) {
- kvm_tpr_enable_vapic(env);
- }
- }
-
- kvm_put_vcpu_events(env, level);
- kvm_put_debugregs(env);
-
- /* must be last */
- kvm_guest_debug_workarounds(env);
-}
-
-void kvm_arch_save_regs(CPUState *env)
-{
- int rc;
-
- assert(kvm_cpu_is_stopped(env) || qemu_cpu_is_self(env));
-
- kvm_getput_regs(env, 0);
-
- kvm_get_xsave(env);
- kvm_get_xcrs(env);
-
- kvm_get_sregs(env);
-
- rc = kvm_get_msrs(env);
- if (rc < 0) {
- perror("kvm_get_msrs FAILED");
- }
-
- kvm_get_mp_state(env);
- kvm_save_lapic(env);
- kvm_get_vcpu_events(env);
- kvm_get_debugregs(env);
-}
-
static int _kvm_arch_init_vcpu(CPUState *env)
{
kvm_arch_reset_vcpu(env);
@@ -483,7 +483,7 @@ int kvm_run(CPUState *env)
again:
if (env->kvm_vcpu_dirty) {
- kvm_arch_load_regs(env, KVM_PUT_RUNTIME_STATE);
+ kvm_arch_put_registers(env, KVM_PUT_RUNTIME_STATE);
env->kvm_vcpu_dirty = 0;
}
push_nmi(kvm);
@@ -1102,7 +1102,7 @@ static void do_kvm_cpu_synchronize_state(void *_env)
CPUState *env = _env;
if (!env->kvm_vcpu_dirty) {
- kvm_arch_save_regs(env);
+ kvm_arch_get_registers(env);
env->kvm_vcpu_dirty = 1;
}
}
@@ -1116,13 +1116,13 @@ void kvm_cpu_synchronize_state(CPUState *env)
void kvm_cpu_synchronize_post_reset(CPUState *env)
{
- kvm_arch_load_regs(env, KVM_PUT_RESET_STATE);
+ kvm_arch_put_registers(env, KVM_PUT_RESET_STATE);
env->kvm_vcpu_dirty = 0;
}
void kvm_cpu_synchronize_post_init(CPUState *env)
{
- kvm_arch_load_regs(env, KVM_PUT_FULL_STATE);
+ kvm_arch_put_registers(env, KVM_PUT_FULL_STATE);
env->kvm_vcpu_dirty = 0;
}
@@ -657,8 +657,6 @@ int kvm_qemu_destroy_memory_alias(uint64_t phys_start);
int kvm_arch_qemu_create_context(void);
-void kvm_arch_save_regs(CPUState *env);
-void kvm_arch_load_regs(CPUState *env, int level);
int kvm_arch_has_work(CPUState *env);
void kvm_arch_process_irqchip_events(CPUState *env);
int kvm_arch_try_push_interrupts(void *opaque);
@@ -331,7 +331,6 @@ int kvm_arch_on_sigbus(int code, void *addr)
return 0;
}
-#ifdef OBSOLETE_KVM_IMPL
static int kvm_inject_mce_oldstyle(CPUState *env)
{
#ifdef KVM_CAP_MCE
@@ -363,7 +362,6 @@ static int kvm_inject_mce_oldstyle(CPUState *env)
#endif /* KVM_CAP_MCE */
return 0;
}
-#endif
static void cpu_update_state(void *opaque, int running, int reason)
{
@@ -1454,7 +1452,6 @@ static int kvm_get_debugregs(CPUState *env)
return 0;
}
-#ifdef OBSOLETE_KVM_IMPL
int kvm_arch_put_registers(CPUState *env, int level)
{
int ret;
@@ -1491,6 +1488,8 @@ int kvm_arch_put_registers(CPUState *env, int level)
if (ret < 0) {
return ret;
}
+
+ kvm_load_lapic(env);
}
ret = kvm_put_vcpu_events(env, level);
if (ret < 0) {
@@ -1500,6 +1499,11 @@ int kvm_arch_put_registers(CPUState *env, int level)
if (ret < 0) {
return ret;
}
+ if (level == KVM_PUT_FULL_STATE) {
+ if (env->kvm_vcpu_update_vapic) {
+ kvm_tpr_enable_vapic(env);
+ }
+ }
/* must be last */
ret = kvm_guest_debug_workarounds(env);
if (ret < 0) {
@@ -1538,6 +1542,7 @@ int kvm_arch_get_registers(CPUState *env)
if (ret < 0) {
return ret;
}
+ kvm_save_lapic(env);
ret = kvm_get_vcpu_events(env);
if (ret < 0) {
return ret;
@@ -1549,6 +1554,7 @@ int kvm_arch_get_registers(CPUState *env)
return 0;
}
+#ifdef OBSOLETE_KVM_IMPL
void kvm_arch_pre_run(CPUState *env, struct kvm_run *run)
{
int ret;