Skip to content

Commit 2bff2ed

Browse files
Dapeng Misean-jc
authored andcommitted
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>
1 parent 5a1a726 commit 2bff2ed

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

arch/x86/kvm/vmx/vmx.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4356,19 +4356,13 @@ void vmx_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
43564356

43574357
pin_controls_set(vmx, vmx_pin_based_exec_ctrl(vmx));
43584358

4359-
if (kvm_vcpu_apicv_active(vcpu)) {
4360-
secondary_exec_controls_setbit(vmx,
4361-
SECONDARY_EXEC_APIC_REGISTER_VIRT |
4362-
SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY);
4363-
if (enable_ipiv)
4364-
tertiary_exec_controls_setbit(vmx, TERTIARY_EXEC_IPI_VIRT);
4365-
} else {
4366-
secondary_exec_controls_clearbit(vmx,
4367-
SECONDARY_EXEC_APIC_REGISTER_VIRT |
4368-
SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY);
4369-
if (enable_ipiv)
4370-
tertiary_exec_controls_clearbit(vmx, TERTIARY_EXEC_IPI_VIRT);
4371-
}
4359+
secondary_exec_controls_changebit(vmx,
4360+
SECONDARY_EXEC_APIC_REGISTER_VIRT |
4361+
SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY,
4362+
kvm_vcpu_apicv_active(vcpu));
4363+
if (enable_ipiv)
4364+
tertiary_exec_controls_changebit(vmx, TERTIARY_EXEC_IPI_VIRT,
4365+
kvm_vcpu_apicv_active(vcpu));
43724366

43734367
vmx_update_msr_bitmap_x2apic(vcpu);
43744368
}

arch/x86/kvm/vmx/vmx.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,14 @@ static __always_inline void lname##_controls_clearbit(struct vcpu_vmx *vmx, u##b
608608
{ \
609609
BUILD_BUG_ON(!(val & (KVM_REQUIRED_VMX_##uname | KVM_OPTIONAL_VMX_##uname))); \
610610
lname##_controls_set(vmx, lname##_controls_get(vmx) & ~val); \
611+
} \
612+
static __always_inline void lname##_controls_changebit(struct vcpu_vmx *vmx, u##bits val, \
613+
bool set) \
614+
{ \
615+
if (set) \
616+
lname##_controls_setbit(vmx, val); \
617+
else \
618+
lname##_controls_clearbit(vmx, val); \
611619
}
612620
BUILD_CONTROLS_SHADOW(vm_entry, VM_ENTRY_CONTROLS, 32)
613621
BUILD_CONTROLS_SHADOW(vm_exit, VM_EXIT_CONTROLS, 32)

0 commit comments

Comments
 (0)