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

Reply via email to