On Mon, Jan 13, 2020 at 07:32:28PM +0100, Borislav Petkov wrote:
On Fri, Dec 20, 2019 at 08:45:11PM -0800, Sean Christopherson wrote:
Define the VMCS execution control flags (consumed by KVM) using their associated VMX_FEATURE_* to provide a strong hint that new VMX features are expected to be added to VMX_FEATURE and considered for reporting via /proc/cpuinfo.
No functional change intended.
Signed-off-by: Sean Christopherson sean.j.christopherson@intel.com
arch/x86/include/asm/vmx.h | 105 +++++++++++++++++++------------------ 1 file changed, 55 insertions(+), 50 deletions(-)
diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h index 1835767aa335..9fbba31be825 100644 --- a/arch/x86/include/asm/vmx.h +++ b/arch/x86/include/asm/vmx.h @@ -15,67 +15,70 @@ #include <linux/bitops.h> #include <linux/types.h> #include <uapi/asm/vmx.h> +#include <asm/vmxfeatures.h>
+#define VMCS_CONTROL_BIT(x) BIT(VMX_FEATURE_##x & 0x1f) /*
- Definitions of Primary Processor-Based VM-Execution Controls.
*/ -#define CPU_BASED_VIRTUAL_INTR_PENDING 0x00000004 -#define CPU_BASED_USE_TSC_OFFSETING 0x00000008 -#define CPU_BASED_HLT_EXITING 0x00000080 -#define CPU_BASED_INVLPG_EXITING 0x00000200 -#define CPU_BASED_MWAIT_EXITING 0x00000400 -#define CPU_BASED_RDPMC_EXITING 0x00000800 -#define CPU_BASED_RDTSC_EXITING 0x00001000 -#define CPU_BASED_CR3_LOAD_EXITING 0x00008000 -#define CPU_BASED_CR3_STORE_EXITING 0x00010000 -#define CPU_BASED_CR8_LOAD_EXITING 0x00080000 -#define CPU_BASED_CR8_STORE_EXITING 0x00100000 -#define CPU_BASED_TPR_SHADOW 0x00200000 -#define CPU_BASED_VIRTUAL_NMI_PENDING 0x00400000 -#define CPU_BASED_MOV_DR_EXITING 0x00800000 -#define CPU_BASED_UNCOND_IO_EXITING 0x01000000 -#define CPU_BASED_USE_IO_BITMAPS 0x02000000 -#define CPU_BASED_MONITOR_TRAP_FLAG 0x08000000 -#define CPU_BASED_USE_MSR_BITMAPS 0x10000000 -#define CPU_BASED_MONITOR_EXITING 0x20000000 -#define CPU_BASED_PAUSE_EXITING 0x40000000 -#define CPU_BASED_ACTIVATE_SECONDARY_CONTROLS 0x80000000 +#define CPU_BASED_VIRTUAL_INTR_PENDING VMCS_CONTROL_BIT(VIRTUAL_INTR_PENDING) +#define CPU_BASED_USE_TSC_OFFSETING VMCS_CONTROL_BIT(TSC_OFFSETTING)
checkpatch correctly complains here:
WARNING: 'OFFSETING' may be misspelled - perhaps 'OFFSETTING'? #80: FILE: arch/x86/include/asm/vmx.h:26: +#define CPU_BASED_USE_TSC_OFFSETING VMCS_CONTROL_BIT(TSC_OFFSETTING)
and VMX_FEATURE_TSC_OFFSETTING is correct.
Should I fix it up to CPU_BASED_USE_TSC_OFFSETTING while applying?
No, the CPU_BASED_* defines are used by existing KVM code, i.e. you'd also have to touch a bunch of KVM code.
$ git grep CPU_BASED_USE_TSC_OFFSETING arch/x86/include/asm/vmx.h:#define CPU_BASED_USE_TSC_OFFSETING 0x00000008 arch/x86/kvm/vmx/nested.c: if (vmcs12->cpu_based_vm_exec_control & CPU_BASED_USE_TSC_OFFSETING) arch/x86/kvm/vmx/nested.c: if (vmcs12->cpu_based_vm_exec_control & CPU_BASED_USE_TSC_OFFSETING) arch/x86/kvm/vmx/nested.c: if (vmcs12->cpu_based_vm_exec_control & CPU_BASED_USE_TSC_OFFSETING) arch/x86/kvm/vmx/nested.c: CPU_BASED_VIRTUAL_NMI_PENDING | CPU_BASED_USE_TSC_OFFSETING | arch/x86/kvm/vmx/vmx.c: (vmcs12->cpu_based_vm_exec_control & CPU_BASED_USE_TSC_OFFSETING)) arch/x86/kvm/vmx/vmx.c: (vmcs12->cpu_based_vm_exec_control & CPU_BASED_USE_TSC_OFFSETING)) arch/x86/kvm/vmx/vmx.c: CPU_BASED_USE_TSC_OFFSETING | tools/testing/selftests/kvm/include/x86_64/vmx.h:#define CPU_BASED_USE_TSC_OFFSETING 0x00000008 tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c: control |= CPU_BASED_USE_MSR_BITMAPS | CPU_BASED_USE_TSC_OFFSETING;