Skip to content

Commit ed3905b

Browse files
robert-hoobonzini
authored andcommitted
KVM: VMX: Extend BUILD_CONTROLS_SHADOW macro to support 64-bit variation
The Tertiary VM-Exec Control, different from previous control fields, is 64 bit. So extend BUILD_CONTROLS_SHADOW() by adding a 'bit' parameter, to support both 32 bit and 64 bit fields' auxiliary functions building. Suggested-by: Sean Christopherson <[email protected]> Reviewed-by: Maxim Levitsky <[email protected]> Reviewed-by: Sean Christopherson <[email protected]> Signed-off-by: Robert Hoo <[email protected]> Signed-off-by: Zeng Guang <[email protected]> Message-Id: <[email protected]> Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 465932d commit ed3905b

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

arch/x86/kvm/vmx/vmx.h

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -456,35 +456,35 @@ static inline u8 vmx_get_rvi(void)
456456
return vmcs_read16(GUEST_INTR_STATUS) & 0xff;
457457
}
458458

459-
#define BUILD_CONTROLS_SHADOW(lname, uname) \
460-
static inline void lname##_controls_set(struct vcpu_vmx *vmx, u32 val) \
461-
{ \
462-
if (vmx->loaded_vmcs->controls_shadow.lname != val) { \
463-
vmcs_write32(uname, val); \
464-
vmx->loaded_vmcs->controls_shadow.lname = val; \
465-
} \
466-
} \
467-
static inline u32 __##lname##_controls_get(struct loaded_vmcs *vmcs) \
468-
{ \
469-
return vmcs->controls_shadow.lname; \
470-
} \
471-
static inline u32 lname##_controls_get(struct vcpu_vmx *vmx) \
472-
{ \
473-
return __##lname##_controls_get(vmx->loaded_vmcs); \
474-
} \
475-
static inline void lname##_controls_setbit(struct vcpu_vmx *vmx, u32 val) \
476-
{ \
477-
lname##_controls_set(vmx, lname##_controls_get(vmx) | val); \
478-
} \
479-
static inline void lname##_controls_clearbit(struct vcpu_vmx *vmx, u32 val) \
480-
{ \
481-
lname##_controls_set(vmx, lname##_controls_get(vmx) & ~val); \
459+
#define BUILD_CONTROLS_SHADOW(lname, uname, bits) \
460+
static inline void lname##_controls_set(struct vcpu_vmx *vmx, u##bits val) \
461+
{ \
462+
if (vmx->loaded_vmcs->controls_shadow.lname != val) { \
463+
vmcs_write##bits(uname, val); \
464+
vmx->loaded_vmcs->controls_shadow.lname = val; \
465+
} \
466+
} \
467+
static inline u##bits __##lname##_controls_get(struct loaded_vmcs *vmcs) \
468+
{ \
469+
return vmcs->controls_shadow.lname; \
470+
} \
471+
static inline u##bits lname##_controls_get(struct vcpu_vmx *vmx) \
472+
{ \
473+
return __##lname##_controls_get(vmx->loaded_vmcs); \
474+
} \
475+
static inline void lname##_controls_setbit(struct vcpu_vmx *vmx, u##bits val) \
476+
{ \
477+
lname##_controls_set(vmx, lname##_controls_get(vmx) | val); \
478+
} \
479+
static inline void lname##_controls_clearbit(struct vcpu_vmx *vmx, u##bits val) \
480+
{ \
481+
lname##_controls_set(vmx, lname##_controls_get(vmx) & ~val); \
482482
}
483-
BUILD_CONTROLS_SHADOW(vm_entry, VM_ENTRY_CONTROLS)
484-
BUILD_CONTROLS_SHADOW(vm_exit, VM_EXIT_CONTROLS)
485-
BUILD_CONTROLS_SHADOW(pin, PIN_BASED_VM_EXEC_CONTROL)
486-
BUILD_CONTROLS_SHADOW(exec, CPU_BASED_VM_EXEC_CONTROL)
487-
BUILD_CONTROLS_SHADOW(secondary_exec, SECONDARY_VM_EXEC_CONTROL)
483+
BUILD_CONTROLS_SHADOW(vm_entry, VM_ENTRY_CONTROLS, 32)
484+
BUILD_CONTROLS_SHADOW(vm_exit, VM_EXIT_CONTROLS, 32)
485+
BUILD_CONTROLS_SHADOW(pin, PIN_BASED_VM_EXEC_CONTROL, 32)
486+
BUILD_CONTROLS_SHADOW(exec, CPU_BASED_VM_EXEC_CONTROL, 32)
487+
BUILD_CONTROLS_SHADOW(secondary_exec, SECONDARY_VM_EXEC_CONTROL, 32)
488488

489489
/*
490490
* VMX_REGS_LAZY_LOAD_SET - The set of registers that will be updated in the

0 commit comments

Comments
 (0)