mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
KVM: VMX: Add helpers to toggle/change a bit in VMCS execution controls
Expand the VMCS controls builder macros to generate helpers to change a bit to the desired value, and use the new helpers when toggling APICv related controls. No functional change intended. Suggested-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> Signed-off-by: Mingwei Zhang <mizhang@google.com> [sean: rewrite changelog] Tested-by: Xudong Hao <xudong.hao@intel.com> Link: https://lore.kernel.org/r/20250806195706.1650976-27-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
5a1a726e68
commit
2bff2edf69
|
|
@ -4356,19 +4356,13 @@ void vmx_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
|
|||
|
||||
pin_controls_set(vmx, vmx_pin_based_exec_ctrl(vmx));
|
||||
|
||||
if (kvm_vcpu_apicv_active(vcpu)) {
|
||||
secondary_exec_controls_setbit(vmx,
|
||||
SECONDARY_EXEC_APIC_REGISTER_VIRT |
|
||||
SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY);
|
||||
if (enable_ipiv)
|
||||
tertiary_exec_controls_setbit(vmx, TERTIARY_EXEC_IPI_VIRT);
|
||||
} else {
|
||||
secondary_exec_controls_clearbit(vmx,
|
||||
SECONDARY_EXEC_APIC_REGISTER_VIRT |
|
||||
SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY);
|
||||
if (enable_ipiv)
|
||||
tertiary_exec_controls_clearbit(vmx, TERTIARY_EXEC_IPI_VIRT);
|
||||
}
|
||||
secondary_exec_controls_changebit(vmx,
|
||||
SECONDARY_EXEC_APIC_REGISTER_VIRT |
|
||||
SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY,
|
||||
kvm_vcpu_apicv_active(vcpu));
|
||||
if (enable_ipiv)
|
||||
tertiary_exec_controls_changebit(vmx, TERTIARY_EXEC_IPI_VIRT,
|
||||
kvm_vcpu_apicv_active(vcpu));
|
||||
|
||||
vmx_update_msr_bitmap_x2apic(vcpu);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -608,6 +608,14 @@ static __always_inline void lname##_controls_clearbit(struct vcpu_vmx *vmx, u##b
|
|||
{ \
|
||||
BUILD_BUG_ON(!(val & (KVM_REQUIRED_VMX_##uname | KVM_OPTIONAL_VMX_##uname))); \
|
||||
lname##_controls_set(vmx, lname##_controls_get(vmx) & ~val); \
|
||||
} \
|
||||
static __always_inline void lname##_controls_changebit(struct vcpu_vmx *vmx, u##bits val, \
|
||||
bool set) \
|
||||
{ \
|
||||
if (set) \
|
||||
lname##_controls_setbit(vmx, val); \
|
||||
else \
|
||||
lname##_controls_clearbit(vmx, val); \
|
||||
}
|
||||
BUILD_CONTROLS_SHADOW(vm_entry, VM_ENTRY_CONTROLS, 32)
|
||||
BUILD_CONTROLS_SHADOW(vm_exit, VM_EXIT_CONTROLS, 32)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user