Implement the hsave MSR, that gives the VCPU a GPA to save the
old guest state in.
Signed-off-by: Alexander Graf <[EMAIL PROTECTED]>
---
arch/x86/kvm/kvm_svm.h | 1 +
arch/x86/kvm/svm.c | 7 +++++++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kvm/kvm_svm.h b/arch/x86/kvm/kvm_svm.h
index a3105a6..76e1f53 100644
--- a/arch/x86/kvm/kvm_svm.h
+++ b/arch/x86/kvm/kvm_svm.h
@@ -42,6 +42,7 @@ struct vcpu_svm {
u32 *msrpm;
+ u64 nested_hsave;
u32 hflags;
};
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 3c9774e..b440731 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -615,6 +615,7 @@ static void init_vmcb(struct vcpu_svm *svm)
}
force_new_asid(&svm->vcpu);
+ svm->nested_hsave = 0;
svm->hflags = HF_GIF_MASK;
}
@@ -1360,6 +1361,9 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, unsigned
ecx, u64 *data)
case MSR_IA32_LASTINTTOIP:
*data = svm->vmcb->save.last_excp_to;
break;
+ case MSR_VM_HSAVE_PA:
+ *data = svm->nested_hsave;
+ break;
default:
return kvm_get_msr_common(vcpu, ecx, data);
}
@@ -1454,6 +1458,9 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned
ecx, u64 data)
pr_unimpl(vcpu, "unimplemented perfctr wrmsr: 0x%x data
0x%llx\n", ecx, data);
break;
+ case MSR_VM_HSAVE_PA:
+ svm->nested_hsave = data;
+ break;
default:
return kvm_set_msr_common(vcpu, ecx, data);
}
--
1.5.6
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html