|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/svm: Don't use vmcb->tlb_control as if it is a boolean
commit fcd06227f83643194f8018f8dd37adce57763a61
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Tue Feb 12 18:37:04 2019 +0000
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Tue Apr 14 15:56:52 2020 +0100
x86/svm: Don't use vmcb->tlb_control as if it is a boolean
svm_asid_handle_vmrun() treats tlb_control as if it were boolean, but this
has
been superseded by new additions to the SVM spec.
Introduce an enum containing all legal values, and update
svm_asid_handle_vmrun() to use appropriate constants.
While adjusting this, take the opportunity to fix up two coding style
issues,
and trim the include list.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/hvm/svm/asid.c | 15 +++++++--------
xen/include/asm-x86/hvm/svm/vmcb.h | 13 ++++++++++++-
2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/xen/arch/x86/hvm/svm/asid.c b/xen/arch/x86/hvm/svm/asid.c
index e554e25213..9be90058c7 100644
--- a/xen/arch/x86/hvm/svm/asid.c
+++ b/xen/arch/x86/hvm/svm/asid.c
@@ -15,12 +15,9 @@
* this program; If not, see <http://www.gnu.org/licenses/>.
*/
-#include <xen/init.h>
-#include <xen/lib.h>
-#include <xen/perfc.h>
-#include <asm/hvm/svm/asid.h>
#include <asm/amd.h>
#include <asm/hvm/nestedhvm.h>
+#include <asm/hvm/svm/asid.h>
void svm_asid_init(const struct cpuinfo_x86 *c)
{
@@ -44,19 +41,21 @@ void svm_asid_handle_vmrun(void)
struct hvm_vcpu_asid *p_asid =
nestedhvm_vcpu_in_guestmode(curr)
? &vcpu_nestedhvm(curr).nv_n2asid : &curr->arch.hvm.n1asid;
- bool_t need_flush = hvm_asid_handle_vmenter(p_asid);
+ bool need_flush = hvm_asid_handle_vmenter(p_asid);
/* ASID 0 indicates that ASIDs are disabled. */
if ( p_asid->asid == 0 )
{
vmcb_set_guest_asid(vmcb, 1);
- vmcb->tlb_control = 1;
+ /* TODO: investigate using TLB_CTRL_FLUSH_ASID here instead. */
+ vmcb->tlb_control = TLB_CTRL_FLUSH_ALL;
return;
}
- if (vmcb_get_guest_asid(vmcb) != p_asid->asid)
+ if ( vmcb_get_guest_asid(vmcb) != p_asid->asid )
vmcb_set_guest_asid(vmcb, p_asid->asid);
- vmcb->tlb_control = need_flush;
+
+ vmcb->tlb_control = need_flush ? TLB_CTRL_FLUSH_ALL : TLB_CTRL_NO_FLUSH;
}
/*
diff --git a/xen/include/asm-x86/hvm/svm/vmcb.h
b/xen/include/asm-x86/hvm/svm/vmcb.h
index e5ed38369e..c2e1972feb 100644
--- a/xen/include/asm-x86/hvm/svm/vmcb.h
+++ b/xen/include/asm-x86/hvm/svm/vmcb.h
@@ -302,6 +302,17 @@ enum VMEXIT_EXITCODE
VMEXIT_INVALID = -1
};
+enum
+{
+ /* Available on all SVM-capable hardware. */
+ TLB_CTRL_NO_FLUSH = 0,
+ TLB_CTRL_FLUSH_ALL = 1,
+
+ /* Available with the FlushByASID feature. */
+ TLB_CTRL_FLUSH_ASID = 3,
+ TLB_CTRL_FLUSH_ASID_NONGLOBAL = 7,
+};
+
typedef union
{
struct
@@ -419,7 +430,7 @@ struct vmcb_struct {
u64 _msrpm_base_pa; /* offset 0x48 - cleanbit 1 */
u64 _tsc_offset; /* offset 0x50 - cleanbit 0 */
u32 _guest_asid; /* offset 0x58 - cleanbit 2 */
- u8 tlb_control; /* offset 0x5C */
+ u8 tlb_control; /* offset 0x5C - TLB_CTRL_* */
u8 res07[3];
vintr_t _vintr; /* offset 0x60 - cleanbit 3 */
intstat_t int_stat; /* offset 0x68 */
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |