[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] 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#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |