Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/x86/kvm/vmx/vmx_onhyperv.c
26489 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
3
#include "capabilities.h"
4
#include "vmx_onhyperv.h"
5
6
DEFINE_STATIC_KEY_FALSE(__kvm_is_using_evmcs);
7
8
/*
9
* KVM on Hyper-V always uses the latest known eVMCSv1 revision, the assumption
10
* is: in case a feature has corresponding fields in eVMCS described and it was
11
* exposed in VMX feature MSRs, KVM is free to use it. Warn if KVM meets a
12
* feature which has no corresponding eVMCS field, this likely means that KVM
13
* needs to be updated.
14
*/
15
#define evmcs_check_vmcs_conf(field, ctrl) \
16
do { \
17
typeof(vmcs_conf->field) unsupported; \
18
\
19
unsupported = vmcs_conf->field & ~EVMCS1_SUPPORTED_ ## ctrl; \
20
if (unsupported) { \
21
pr_warn_once(#field " unsupported with eVMCS: 0x%llx\n",\
22
(u64)unsupported); \
23
vmcs_conf->field &= EVMCS1_SUPPORTED_ ## ctrl; \
24
} \
25
} \
26
while (0)
27
28
void evmcs_sanitize_exec_ctrls(struct vmcs_config *vmcs_conf)
29
{
30
evmcs_check_vmcs_conf(cpu_based_exec_ctrl, EXEC_CTRL);
31
evmcs_check_vmcs_conf(pin_based_exec_ctrl, PINCTRL);
32
evmcs_check_vmcs_conf(cpu_based_2nd_exec_ctrl, 2NDEXEC);
33
evmcs_check_vmcs_conf(cpu_based_3rd_exec_ctrl, 3RDEXEC);
34
evmcs_check_vmcs_conf(vmentry_ctrl, VMENTRY_CTRL);
35
evmcs_check_vmcs_conf(vmexit_ctrl, VMEXIT_CTRL);
36
}
37
38