[prev in list] [next in list] [prev in thread] [next in thread]
List: bochs-cvs
Subject: [Bochs-cvs] [14318] trunk/bochs/cpu
From: sshwarts--- via Bochs-cvs <bochs-cvs () lists ! sourceforge ! net>
Date: 2021-07-23 9:30:18
Message-ID: 1627032618.534319.19528 () sfp-scm-3 ! v30 ! lw ! sourceforge ! com
[Download RAW message or body]
Revision: 14318
Author: sshwarts
Date: 2021-07-23 09:30:17 +0000 (Fri, 23 Jul 2021)
Log Message:
-----------
more robust handling of SVM VMCB host ptr
Modified Paths:
--------------
trunk/bochs/cpu/cpu.h
trunk/bochs/cpu/init.cc
trunk/bochs/cpu/svm.cc
Modified: trunk/bochs/cpu/cpu.h
===================================================================
--- trunk/bochs/cpu/cpu.h 2021-07-23 08:06:58 UTC (rev 14317)
+++ trunk/bochs/cpu/cpu.h 2021-07-23 09:30:17 UTC (rev 14318)
@@ -5084,6 +5084,7 @@
#endif
#if BX_SUPPORT_SVM
+ BX_SMF void set_VMCBPTR(Bit64u vmcbptr);
BX_SMF void SvmEnterSaveHostState(SVM_HOST_STATE *host);
BX_SMF bool SvmEnterLoadCheckControls(SVM_CONTROLS *ctrls);
BX_SMF bool SvmEnterLoadCheckGuestState(void);
Modified: trunk/bochs/cpu/init.cc
===================================================================
--- trunk/bochs/cpu/init.cc 2021-07-23 08:06:58 UTC (rev 14317)
+++ trunk/bochs/cpu/init.cc 2021-07-23 09:30:17 UTC (rev 14318)
@@ -657,6 +657,10 @@
set_VMCSPTR(BX_CPU_THIS_PTR vmcsptr);
#endif
+#if BX_SUPPORT_SVM
+ set_VMCBPTR(BX_CPU_THIS_PTR vmcbptr);
+#endif
+
#if BX_SUPPORT_PKEYS
set_PKeys(BX_CPU_THIS_PTR pkru, BX_CPU_THIS_PTR pkrs);
#endif
@@ -1056,14 +1060,10 @@
#endif
#if BX_SUPPORT_SVM
+ set_VMCBPTR(0);
BX_CPU_THIS_PTR in_svm_guest = 0;
BX_CPU_THIS_PTR svm_gif = 1;
- BX_CPU_THIS_PTR vmcbptr = 0;
- BX_CPU_THIS_PTR vmcbhostptr = 0;
-#if BX_SUPPORT_MEMTYPE
- BX_CPU_THIS_PTR vmcb_memtype = BX_MEMTYPE_UC;
#endif
-#endif
#if BX_SUPPORT_VMX || BX_SUPPORT_SVM
BX_CPU_THIS_PTR in_event = 0;
Modified: trunk/bochs/cpu/svm.cc
===================================================================
--- trunk/bochs/cpu/svm.cc 2021-07-23 08:06:58 UTC (rev 14317)
+++ trunk/bochs/cpu/svm.cc 2021-07-23 09:30:17 UTC (rev 14318)
@@ -32,6 +32,24 @@
extern const char *segname[];
+void BX_CPU_C::set_VMCBPTR(Bit64u vmcbptr)
+{
+ BX_CPU_THIS_PTR vmcbptr = vmcbptr;
+
+ if (vmcbptr != 0) {
+ BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(vmcbptr, BX_WRITE);
+#if BX_SUPPORT_MEMTYPE
+ BX_CPU_THIS_PTR vmcb_memtype = resolve_memtype(BX_CPU_THIS_PTR vmcbptr);
+#endif
+ }
+ else {
+ BX_CPU_THIS_PTR vmcbhostptr = 0;
+#if BX_SUPPORT_MEMTYPE
+ BX_CPU_THIS_PTR vmcb_memtype = BX_MEMTYPE_UC;
+#endif
+ }
+}
+
// When loading segment bases from the VMCB or the host save area
// (on VMRUN or #VMEXIT), segment bases are canonicalized (i.e.
// sign-extended from the highest implemented address bit to bit 63)
@@ -986,11 +1004,7 @@
BX_ERROR(("VMRUN: invalid or not page aligned VMCB physical address !"));
exception(BX_GP_EXCEPTION, 0);
}
- BX_CPU_THIS_PTR vmcbptr = pAddr;
- BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(pAddr, BX_WRITE);
-#if BX_SUPPORT_MEMTYPE
- BX_CPU_THIS_PTR vmcb_memtype = resolve_memtype(BX_CPU_THIS_PTR vmcbptr);
-#endif
+ set_VMCBPTR(pAddr);
BX_DEBUG(("VMRUN VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
@@ -1060,8 +1074,7 @@
BX_ERROR(("VMLOAD: invalid or not page aligned VMCB physical address !"));
exception(BX_GP_EXCEPTION, 0);
}
- BX_CPU_THIS_PTR vmcbptr = pAddr;
- BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(pAddr, BX_WRITE);
+ set_VMCBPTR(pAddr);
BX_DEBUG(("VMLOAD VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
@@ -1111,8 +1124,7 @@
BX_ERROR(("VMSAVE: invalid or not page aligned VMCB physical address !"));
exception(BX_GP_EXCEPTION, 0);
}
- BX_CPU_THIS_PTR vmcbptr = pAddr;
- BX_CPU_THIS_PTR vmcbhostptr = BX_CPU_THIS_PTR getHostMemAddr(pAddr, BX_WRITE);
+ set_VMCBPTR(pAddr);
BX_DEBUG(("VMSAVE VMCB ptr: 0x" FMT_ADDRX64, BX_CPU_THIS_PTR vmcbptr));
_______________________________________________
Bochs-cvs mailing list
Bochs-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bochs-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic