|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN PATCH v4 1/4] x86/vmx: address violations of MISRA C:2012 Rule 7.2
On Thu, 24 Aug 2023, Nicola Vetrini wrote:
> On 26/07/2023 13:03, Simone Ballarin wrote:
> > From: Gianluca Luparini <gianluca.luparini@xxxxxxxxxxx>
> >
> > The xen sources contains violations of MISRA C:2012 Rule 7.2 whose
> > headline states:
> > "A 'u' or 'U' suffix shall be applied to all integer constants
> > that are represented in an unsigned type".
> >
> > Add the 'U' suffix to integers literals with unsigned type.
> >
> > For the sake of uniformity, the following changes are made:
> > - add the 'U' suffix to macros near
> > 'CPU_BASED_ACTIVATE_SECONDARY_CONTROLS' and
> > 'SECONDARY_EXEC_NOTIFY_VM_EXITING' macros in 'vmcs.h'
> > - add the 'U' suffix to macros near 'INTR_INFO_VALID_MASK'
> > macro in 'vmx.h'
> >
> > Signed-off-by: Gianluca Luparini <gianluca.luparini@xxxxxxxxxxx>
> > Signed-off-by: Simone Ballarin <simone.ballarin@xxxxxxxxxxx>
> > Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> > Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
> > ---
> > Changes in v4:
> > - change commit headline
> >
> > Changes in v3:
> > - change 'Signed-off-by' ordering
> > - change commit message
> > - remove unnecessary changes in 'vvmx.c'
> > - add 'uint32_t' casts in 'vvmx.c'
> > - add missing 'U' in 'vmcs.h' macros
> > - change macro to '(1u << 31)' in 'vmx.h'
> > - remove unnecessary changes to 'vmx.h'
> >
> > Changes in v2:
> > - minor change to commit title
> > - change commit message
> > - remove unnecessary changes in 'vpmu_intel.c' and 'vmx.h'
> > - add 'ULL' suffix in 'vpmu_intel.c'
> > - add zero-padding to constants in 'vmx.h'
> > - add missing 'U' in 'vmx.h'
> > ---
> > xen/arch/x86/cpu/vpmu_intel.c | 2 +-
> > xen/arch/x86/hvm/vmx/vmcs.c | 6 +-
> > xen/arch/x86/hvm/vmx/vvmx.c | 8 +--
> > xen/arch/x86/include/asm/hvm/vmx/vmcs.h | 84 ++++++++++++-------------
> > xen/arch/x86/include/asm/hvm/vmx/vmx.h | 16 ++---
> > 5 files changed, 58 insertions(+), 58 deletions(-)
> >
> > diff --git a/xen/arch/x86/cpu/vpmu_intel.c b/xen/arch/x86/cpu/vpmu_intel.c
> > index fa5b40c65c..6330c89b47 100644
> > --- a/xen/arch/x86/cpu/vpmu_intel.c
> > +++ b/xen/arch/x86/cpu/vpmu_intel.c
> > @@ -945,7 +945,7 @@ const struct arch_vpmu_ops *__init core2_vpmu_init(void)
> > fixed_counters_mask = ~((1ull << core2_get_bitwidth_fix_count()) - 1);
> > global_ctrl_mask = ~((((1ULL << fixed_pmc_cnt) - 1) << 32) |
> > ((1ULL << arch_pmc_cnt) - 1));
> > - global_ovf_ctrl_mask = ~(0xC000000000000000 |
> > + global_ovf_ctrl_mask = ~(0xC000000000000000ULL |
> > (((1ULL << fixed_pmc_cnt) - 1) << 32) |
> > ((1ULL << arch_pmc_cnt) - 1));
> > if ( version > 2 )
> > diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
> > index 13719cc923..6cefb88aec 100644
> > --- a/xen/arch/x86/hvm/vmx/vmcs.c
> > +++ b/xen/arch/x86/hvm/vmx/vmcs.c
> > @@ -911,7 +911,7 @@ void vmx_clear_msr_intercept(struct vcpu *v,
> > unsigned int msr,
> > if ( type & VMX_MSR_W )
> > clear_bit(msr, msr_bitmap->write_low);
> > }
> > - else if ( (msr >= 0xc0000000) && (msr <= 0xc0001fff) )
> > + else if ( (msr >= 0xc0000000U) && (msr <= 0xc0001fffU) )
> > {
> > msr &= 0x1fff;
> > if ( type & VMX_MSR_R )
> > @@ -939,7 +939,7 @@ void vmx_set_msr_intercept(struct vcpu *v, unsigned int
> > msr,
> > if ( type & VMX_MSR_W )
> > set_bit(msr, msr_bitmap->write_low);
> > }
> > - else if ( (msr >= 0xc0000000) && (msr <= 0xc0001fff) )
> > + else if ( (msr >= 0xc0000000U) && (msr <= 0xc0001fffU) )
> > {
> > msr &= 0x1fff;
> > if ( type & VMX_MSR_R )
> > @@ -957,7 +957,7 @@ bool vmx_msr_is_intercepted(struct vmx_msr_bitmap
> > *msr_bitmap,
> > if ( msr <= 0x1fff )
> > return test_bit(msr, is_write ? msr_bitmap->write_low
> > : msr_bitmap->read_low);
> > - else if ( (msr >= 0xc0000000) && (msr <= 0xc0001fff) )
> > + else if ( (msr >= 0xc0000000U) && (msr <= 0xc0001fffU) )
> > return test_bit(msr & 0x1fff, is_write ? msr_bitmap->write_high
> > : msr_bitmap->read_high);
> > else
> > diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c
> > index 16b0ef82b6..b7be424afb 100644
> > --- a/xen/arch/x86/hvm/vmx/vvmx.c
> > +++ b/xen/arch/x86/hvm/vmx/vvmx.c
> > @@ -263,7 +263,7 @@ uint64_t get_vvmcs_virtual(void *vvmcs, uint32_t
> > vmcs_encoding)
> > res >>= 32;
> > break;
> > case VVMCS_WIDTH_32:
> > - res &= 0xffffffff;
> > + res = (uint32_t)res;
> > break;
> > case VVMCS_WIDTH_NATURAL:
> > default:
> > @@ -315,14 +315,14 @@ void set_vvmcs_virtual(void *vvmcs, uint32_t
> > vmcs_encoding, uint64_t val)
> > case VVMCS_WIDTH_64:
> > if ( enc.access_type )
> > {
> > - res &= 0xffffffff;
> > + res = (uint32_t)res;
> > res |= val << 32;
> > }
> > else
> > res = val;
> > break;
> > case VVMCS_WIDTH_32:
> > - res = val & 0xffffffff;
> > + res = (uint32_t)val;
> > break;
> > case VVMCS_WIDTH_NATURAL:
> > default:
> > @@ -2306,7 +2306,7 @@ int nvmx_msr_read_intercept(unsigned int msr,
> > u64 *msr_content)
> > break;
> > case MSR_IA32_VMX_CR0_FIXED1:
> > /* allow 0-settings for all bits */
> > - data = 0xffffffff;
> > + data = 0xffffffffU;
> > break;
> > case MSR_IA32_VMX_CR4_FIXED0:
> > /* VMXE bit must be 1 in VMX operation */
> > diff --git a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h
> > b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h
> > index d07fcb2bc9..e056643993 100644
> > --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h
> > +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h
> > @@ -187,27 +187,27 @@ bool_t __must_check vmx_vmcs_try_enter(struct vcpu
> > *v);
> > void vmx_vmcs_exit(struct vcpu *v);
> > void vmx_vmcs_reload(struct vcpu *v);
> >
> > -#define CPU_BASED_VIRTUAL_INTR_PENDING 0x00000004
> > -#define CPU_BASED_USE_TSC_OFFSETING 0x00000008
> > -#define CPU_BASED_HLT_EXITING 0x00000080
> > -#define CPU_BASED_INVLPG_EXITING 0x00000200
> > -#define CPU_BASED_MWAIT_EXITING 0x00000400
> > -#define CPU_BASED_RDPMC_EXITING 0x00000800
> > -#define CPU_BASED_RDTSC_EXITING 0x00001000
> > -#define CPU_BASED_CR3_LOAD_EXITING 0x00008000
> > -#define CPU_BASED_CR3_STORE_EXITING 0x00010000
> > -#define CPU_BASED_CR8_LOAD_EXITING 0x00080000
> > -#define CPU_BASED_CR8_STORE_EXITING 0x00100000
> > -#define CPU_BASED_TPR_SHADOW 0x00200000
> > -#define CPU_BASED_VIRTUAL_NMI_PENDING 0x00400000
> > -#define CPU_BASED_MOV_DR_EXITING 0x00800000
> > -#define CPU_BASED_UNCOND_IO_EXITING 0x01000000
> > -#define CPU_BASED_ACTIVATE_IO_BITMAP 0x02000000
> > -#define CPU_BASED_MONITOR_TRAP_FLAG 0x08000000
> > -#define CPU_BASED_ACTIVATE_MSR_BITMAP 0x10000000
> > -#define CPU_BASED_MONITOR_EXITING 0x20000000
> > -#define CPU_BASED_PAUSE_EXITING 0x40000000
> > -#define CPU_BASED_ACTIVATE_SECONDARY_CONTROLS 0x80000000
> > +#define CPU_BASED_VIRTUAL_INTR_PENDING 0x00000004U
> > +#define CPU_BASED_USE_TSC_OFFSETING 0x00000008U
> > +#define CPU_BASED_HLT_EXITING 0x00000080U
> > +#define CPU_BASED_INVLPG_EXITING 0x00000200U
> > +#define CPU_BASED_MWAIT_EXITING 0x00000400U
> > +#define CPU_BASED_RDPMC_EXITING 0x00000800U
> > +#define CPU_BASED_RDTSC_EXITING 0x00001000U
> > +#define CPU_BASED_CR3_LOAD_EXITING 0x00008000U
> > +#define CPU_BASED_CR3_STORE_EXITING 0x00010000U
> > +#define CPU_BASED_CR8_LOAD_EXITING 0x00080000U
> > +#define CPU_BASED_CR8_STORE_EXITING 0x00100000U
> > +#define CPU_BASED_TPR_SHADOW 0x00200000U
> > +#define CPU_BASED_VIRTUAL_NMI_PENDING 0x00400000U
> > +#define CPU_BASED_MOV_DR_EXITING 0x00800000U
> > +#define CPU_BASED_UNCOND_IO_EXITING 0x01000000U
> > +#define CPU_BASED_ACTIVATE_IO_BITMAP 0x02000000U
> > +#define CPU_BASED_MONITOR_TRAP_FLAG 0x08000000U
> > +#define CPU_BASED_ACTIVATE_MSR_BITMAP 0x10000000U
> > +#define CPU_BASED_MONITOR_EXITING 0x20000000U
> > +#define CPU_BASED_PAUSE_EXITING 0x40000000U
> > +#define CPU_BASED_ACTIVATE_SECONDARY_CONTROLS 0x80000000U
> > extern u32 vmx_cpu_based_exec_control;
> >
> > #define PIN_BASED_EXT_INTR_MASK 0x00000001
> > @@ -238,26 +238,26 @@ extern u32 vmx_vmexit_control;
> > #define VM_ENTRY_LOAD_BNDCFGS 0x00010000
> > extern u32 vmx_vmentry_control;
> >
> > -#define SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES 0x00000001
> > -#define SECONDARY_EXEC_ENABLE_EPT 0x00000002
> > -#define SECONDARY_EXEC_DESCRIPTOR_TABLE_EXITING 0x00000004
> > -#define SECONDARY_EXEC_ENABLE_RDTSCP 0x00000008
> > -#define SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE 0x00000010
> > -#define SECONDARY_EXEC_ENABLE_VPID 0x00000020
> > -#define SECONDARY_EXEC_WBINVD_EXITING 0x00000040
> > -#define SECONDARY_EXEC_UNRESTRICTED_GUEST 0x00000080
> > -#define SECONDARY_EXEC_APIC_REGISTER_VIRT 0x00000100
> > -#define SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY 0x00000200
> > -#define SECONDARY_EXEC_PAUSE_LOOP_EXITING 0x00000400
> > -#define SECONDARY_EXEC_ENABLE_INVPCID 0x00001000
> > -#define SECONDARY_EXEC_ENABLE_VM_FUNCTIONS 0x00002000
> > -#define SECONDARY_EXEC_ENABLE_VMCS_SHADOWING 0x00004000
> > -#define SECONDARY_EXEC_ENABLE_PML 0x00020000
> > -#define SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS 0x00040000
> > -#define SECONDARY_EXEC_XSAVES 0x00100000
> > -#define SECONDARY_EXEC_TSC_SCALING 0x02000000
> > -#define SECONDARY_EXEC_BUS_LOCK_DETECTION 0x40000000
> > -#define SECONDARY_EXEC_NOTIFY_VM_EXITING 0x80000000
> > +#define SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES 0x00000001U
> > +#define SECONDARY_EXEC_ENABLE_EPT 0x00000002U
> > +#define SECONDARY_EXEC_DESCRIPTOR_TABLE_EXITING 0x00000004U
> > +#define SECONDARY_EXEC_ENABLE_RDTSCP 0x00000008U
> > +#define SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE 0x00000010U
> > +#define SECONDARY_EXEC_ENABLE_VPID 0x00000020U
> > +#define SECONDARY_EXEC_WBINVD_EXITING 0x00000040U
> > +#define SECONDARY_EXEC_UNRESTRICTED_GUEST 0x00000080U
> > +#define SECONDARY_EXEC_APIC_REGISTER_VIRT 0x00000100U
> > +#define SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY 0x00000200U
> > +#define SECONDARY_EXEC_PAUSE_LOOP_EXITING 0x00000400U
> > +#define SECONDARY_EXEC_ENABLE_INVPCID 0x00001000U
> > +#define SECONDARY_EXEC_ENABLE_VM_FUNCTIONS 0x00002000U
> > +#define SECONDARY_EXEC_ENABLE_VMCS_SHADOWING 0x00004000U
> > +#define SECONDARY_EXEC_ENABLE_PML 0x00020000U
> > +#define SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS 0x00040000U
> > +#define SECONDARY_EXEC_XSAVES 0x00100000U
> > +#define SECONDARY_EXEC_TSC_SCALING 0x02000000U
> > +#define SECONDARY_EXEC_BUS_LOCK_DETECTION 0x40000000U
> > +#define SECONDARY_EXEC_NOTIFY_VM_EXITING 0x80000000U
> > extern u32 vmx_secondary_exec_control;
> >
> > #define VMX_EPT_EXEC_ONLY_SUPPORTED 0x00000001
> > @@ -346,7 +346,7 @@ extern u64 vmx_ept_vpid_cap;
> > #define cpu_has_vmx_notify_vm_exiting \
> > (vmx_secondary_exec_control & SECONDARY_EXEC_NOTIFY_VM_EXITING)
> >
> > -#define VMCS_RID_TYPE_MASK 0x80000000
> > +#define VMCS_RID_TYPE_MASK 0x80000000U
> >
> > /* GUEST_INTERRUPTIBILITY_INFO flags. */
> > #define VMX_INTR_SHADOW_STI 0x00000001
> > diff --git a/xen/arch/x86/include/asm/hvm/vmx/vmx.h
> > b/xen/arch/x86/include/asm/hvm/vmx/vmx.h
> > index c84acc221d..d4b335a2bc 100644
> > --- a/xen/arch/x86/include/asm/hvm/vmx/vmx.h
> > +++ b/xen/arch/x86/include/asm/hvm/vmx/vmx.h
> > @@ -137,7 +137,7 @@ static inline void pi_clear_sn(struct pi_desc *pi_desc)
> > /*
> > * Exit Reasons
> > */
> > -#define VMX_EXIT_REASONS_FAILED_VMENTRY 0x80000000
> > +#define VMX_EXIT_REASONS_FAILED_VMENTRY (1u << 31)
> > #define VMX_EXIT_REASONS_BUS_LOCK (1u << 26)
> >
> > #define EXIT_REASON_EXCEPTION_NMI 0
> > @@ -209,12 +209,12 @@ static inline void pi_clear_sn(struct pi_desc
> > *pi_desc)
> > * Note INTR_INFO_NMI_UNBLOCKED_BY_IRET is also used with Exit
> > Qualification
> > * field for EPT violations, PML full and SPP-related event vmexits.
> > */
> > -#define INTR_INFO_VECTOR_MASK 0xff /* 7:0 */
> > -#define INTR_INFO_INTR_TYPE_MASK 0x700 /* 10:8 */
> > -#define INTR_INFO_DELIVER_CODE_MASK 0x800 /* 11 */
> > -#define INTR_INFO_NMI_UNBLOCKED_BY_IRET 0x1000 /* 12 */
> > -#define INTR_INFO_VALID_MASK 0x80000000 /* 31 */
> > -#define INTR_INFO_RESVD_BITS_MASK 0x7ffff000
> > +#define INTR_INFO_VECTOR_MASK 0x000000ffU /* 7:0 */
> > +#define INTR_INFO_INTR_TYPE_MASK 0x00000700U /* 10:8 */
> > +#define INTR_INFO_DELIVER_CODE_MASK 0x00000800U /* 11 */
> > +#define INTR_INFO_NMI_UNBLOCKED_BY_IRET 0x00001000U /* 12 */
> > +#define INTR_INFO_VALID_MASK 0x80000000U /* 31 */
> > +#define INTR_INFO_RESVD_BITS_MASK 0x7ffff000U
> >
> > /*
> > * Exit Qualifications for NOTIFY VM EXIT
> > @@ -607,7 +607,7 @@ static inline void vmx_pi_hooks_assign(struct domain *d)
> > {}
> > static inline void vmx_pi_hooks_deassign(struct domain *d) {}
> > #endif
> >
> > -#define APIC_INVALID_DEST 0xffffffff
> > +#define APIC_INVALID_DEST 0xffffffffU
> >
> > /* EPT violation qualifications definitions */
> > typedef union ept_qual {
>
> I checked that this patch still applies cleanly on the current staging branch.
> Can this get an ack from the VT-X maintainer(s)?
Jan having acked this patch already, and the VT-X maintainers being not
always fast in reviews, I imagine Jan will commit the patch on his own
in a few days if nobody speaks up.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |