From: Dapeng Mi <[email protected]>

Add macros around helpers that changes VMCS bits to simplify vmx exec ctrl
bits clearing and setting.

No function change intended.

Suggested-by: Sean Christopherson <[email protected]>
Signed-off-by: Dapeng Mi <[email protected]>
Signed-off-by: Mingwei Zhang <[email protected]>
---
 arch/x86/kvm/vmx/vmx.c | 20 +++++++-------------
 arch/x86/kvm/vmx/vmx.h |  8 ++++++++
 2 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 9c4b3c2b1d65..ff66f17d6358 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -4471,19 +4471,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);
 }
diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h
index 8b111ce1087c..5c505af553c8 100644
--- a/arch/x86/kvm/vmx/vmx.h
+++ b/arch/x86/kvm/vmx/vmx.h
@@ -612,6 +612,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)
-- 
2.49.0.395.g12beb8f557-goog


Reply via email to