diff options
author | Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> | 2013-08-13 14:22:14 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-08-13 14:22:14 +0200 |
commit | 85fc517ec3055e8e8d9c9e36e15a81e630237252 (patch) | |
tree | 9b268fb99f72f77824deb9e5573329fc06d441c8 /xen/include/asm-x86 | |
parent | 73f18583dd824f0e49f65149ef603600ce31b8ee (diff) | |
download | xen-85fc517ec3055e8e8d9c9e36e15a81e630237252.tar.gz xen-85fc517ec3055e8e8d9c9e36e15a81e630237252.tar.bz2 xen-85fc517ec3055e8e8d9c9e36e15a81e630237252.zip |
x86/AMD: Fix nested svm crash due to assertion in __virt_to_maddr
Fix assertion in __virt_to_maddr when starting nested SVM guest
in debug mode. Investigation has shown that svm_vmsave/svm_vmload
make use of __pa() with invalid address.
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Reviewed-by: Tim Deegan <tim@xen.org>
Diffstat (limited to 'xen/include/asm-x86')
-rw-r--r-- | xen/include/asm-x86/hvm/svm/svm.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/xen/include/asm-x86/hvm/svm/svm.h b/xen/include/asm-x86/hvm/svm/svm.h index 64e7e25bf4..1ffe6d67dc 100644 --- a/xen/include/asm-x86/hvm/svm/svm.h +++ b/xen/include/asm-x86/hvm/svm/svm.h @@ -41,18 +41,21 @@ #define SVM_REG_R14 (14) #define SVM_REG_R15 (15) -static inline void svm_vmload(void *vmcb) +#define svm_vmload(x) svm_vmload_pa(__pa(x)) +#define svm_vmsave(x) svm_vmsave_pa(__pa(x)) + +static inline void svm_vmload_pa(paddr_t vmcb) { asm volatile ( ".byte 0x0f,0x01,0xda" /* vmload */ - : : "a" (__pa(vmcb)) : "memory" ); + : : "a" (vmcb) : "memory" ); } -static inline void svm_vmsave(void *vmcb) +static inline void svm_vmsave_pa(paddr_t vmcb) { asm volatile ( ".byte 0x0f,0x01,0xdb" /* vmsave */ - : : "a" (__pa(vmcb)) : "memory" ); + : : "a" (vmcb) : "memory" ); } static inline void svm_invlpga(unsigned long vaddr, uint32_t asid) |