mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
KVM/x86: Stop using 32-bit MSR interfaces
The 32-bit MSR interfaces rdmsr(), wrmsr() and rdmsr_safe() are planned to be removed. Use the related 64-bit variants instead. No change in functionality intended. Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Kiryl Shutsemau <kas@kernel.org> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Rick Edgecombe <rick.p.edgecombe@intel.com> Cc: Sean Christopherson <seanjc@google.com> Cc: kvm@vger.kernel.org Link: https://patch.msgid.link/20260629060526.3638272-10-jgross@suse.com
This commit is contained in:
parent
a415e35205
commit
1620ddc0dc
|
|
@ -2676,13 +2676,13 @@ static bool cpu_has_sgx(void)
|
|||
|
||||
static int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt, u32 msr, u32 *result)
|
||||
{
|
||||
u32 vmx_msr_low, vmx_msr_high;
|
||||
struct msr vmx_msr;
|
||||
u32 ctl = ctl_min | ctl_opt;
|
||||
|
||||
rdmsr(msr, vmx_msr_low, vmx_msr_high);
|
||||
rdmsrq(msr, vmx_msr.q);
|
||||
|
||||
ctl &= vmx_msr_high; /* bit == 0 in high word ==> must be zero */
|
||||
ctl |= vmx_msr_low; /* bit == 1 in low word ==> must be one */
|
||||
ctl &= vmx_msr.h; /* bit == 0 in high word ==> must be zero */
|
||||
ctl |= vmx_msr.l; /* bit == 1 in low word ==> must be one */
|
||||
|
||||
/* Ensure minimum (required) set of control bits are supported. */
|
||||
if (ctl_min & ~ctl)
|
||||
|
|
@ -2738,6 +2738,7 @@ static int setup_vmcs_config(struct vmcs_config *vmcs_conf,
|
|||
u64 _cpu_based_3rd_exec_control = 0;
|
||||
u32 _vmexit_control = 0;
|
||||
u32 _vmentry_control = 0;
|
||||
struct msr val;
|
||||
u64 basic_msr;
|
||||
u64 misc_msr;
|
||||
|
||||
|
|
@ -2787,8 +2788,9 @@ static int setup_vmcs_config(struct vmcs_config *vmcs_conf,
|
|||
SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
|
||||
SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY);
|
||||
|
||||
rdmsr_safe(MSR_IA32_VMX_EPT_VPID_CAP,
|
||||
&vmx_cap->ept, &vmx_cap->vpid);
|
||||
rdmsrq_safe(MSR_IA32_VMX_EPT_VPID_CAP, &val.q);
|
||||
vmx_cap->ept = val.l;
|
||||
vmx_cap->vpid = val.h;
|
||||
|
||||
if (!(_cpu_based_2nd_exec_control & SECONDARY_EXEC_ENABLE_EPT) &&
|
||||
vmx_cap->ept) {
|
||||
|
|
@ -4435,7 +4437,7 @@ void vmx_deliver_interrupt(struct kvm_lapic *apic, int delivery_mode,
|
|||
*/
|
||||
void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
|
||||
{
|
||||
u32 low32, high32;
|
||||
struct msr val;
|
||||
unsigned long tmpl;
|
||||
unsigned long cr0, cr3, cr4;
|
||||
|
||||
|
|
@ -4476,8 +4478,8 @@ void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
|
|||
|
||||
vmcs_writel(HOST_RIP, (unsigned long)vmx_vmexit); /* 22.2.5 */
|
||||
|
||||
rdmsr(MSR_IA32_SYSENTER_CS, low32, high32);
|
||||
vmcs_write32(HOST_IA32_SYSENTER_CS, low32);
|
||||
rdmsrq(MSR_IA32_SYSENTER_CS, val.q);
|
||||
vmcs_write32(HOST_IA32_SYSENTER_CS, val.l);
|
||||
|
||||
/*
|
||||
* SYSENTER is used for 32-bit system calls on either 32-bit or
|
||||
|
|
@ -4492,8 +4494,8 @@ void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
|
|||
vmcs_writel(HOST_IA32_SYSENTER_EIP, tmpl); /* 22.2.3 */
|
||||
|
||||
if (vmcs_config.vmexit_ctrl & VM_EXIT_LOAD_IA32_PAT) {
|
||||
rdmsr(MSR_IA32_CR_PAT, low32, high32);
|
||||
vmcs_write64(HOST_IA32_PAT, low32 | ((u64) high32 << 32));
|
||||
rdmsrq(MSR_IA32_CR_PAT, val.q);
|
||||
vmcs_write64(HOST_IA32_PAT, val.q);
|
||||
}
|
||||
|
||||
if (cpu_has_load_ia32_efer())
|
||||
|
|
|
|||
|
|
@ -7633,9 +7633,9 @@ static void kvm_probe_feature_msr(u32 msr_index)
|
|||
|
||||
static void kvm_probe_msr_to_save(u32 msr_index)
|
||||
{
|
||||
u32 dummy[2];
|
||||
u64 dummy;
|
||||
|
||||
if (rdmsr_safe(msr_index, &dummy[0], &dummy[1]))
|
||||
if (rdmsrq_safe(msr_index, &dummy))
|
||||
return;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1430,6 +1430,7 @@ static __init int record_keyid_partitioning(u32 *tdx_keyid_start,
|
|||
u32 *nr_tdx_keyids)
|
||||
{
|
||||
u32 _nr_mktme_keyids, _tdx_keyid_start, _nr_tdx_keyids;
|
||||
struct msr val;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
|
|
@ -1437,8 +1438,9 @@ static __init int record_keyid_partitioning(u32 *tdx_keyid_start,
|
|||
* Bit [31:0]: Number of MKTME KeyIDs.
|
||||
* Bit [63:32]: Number of TDX private KeyIDs.
|
||||
*/
|
||||
ret = rdmsr_safe(MSR_IA32_MKTME_KEYID_PARTITIONING, &_nr_mktme_keyids,
|
||||
&_nr_tdx_keyids);
|
||||
ret = rdmsrq_safe(MSR_IA32_MKTME_KEYID_PARTITIONING, &val.q);
|
||||
_nr_mktme_keyids = val.l;
|
||||
_nr_tdx_keyids = val.h;
|
||||
if (ret || !_nr_tdx_keyids)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user