[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] x86/gen-cpuid: Avoid violations of Misra rule 1.3



commit da55d9dc919752e092e591a74ab54c2f7d5adfab
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Aug 2 13:44:30 2023 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Aug 2 16:25:24 2023 +0100

    x86/gen-cpuid: Avoid violations of Misra rule 1.3
    
    Add the script to the X86 section in ./MAINTAINERS.
    
    Structures or unions without any named members aren't liked by Misra
    (nor the C standard). Avoid emitting such for leaves without any known
    bits.
    
    The placeholders are affected similarly, but are only visible to MISRA in 
the
    middle of a patch series adding a new leaf.  The absence of a name was
    intentional as these defines need to not duplicate names.
    
    As that's not deemed acceptable any more, move placeholder processing into 
the
    main loop and append the the word number to generate unique names.
    
      $ diff cpuid-autogen-{before,after}.h
      @@ -1034,7 +1034,7 @@
           bool intel_psfd:1, ipred_ctrl:1, rrsba_ctrl:1, ddp_ctrl:1,     ...
    
       #define CPUID_BITFIELD_14 \
      -    bool :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1,   ...
      +    uint32_t _placeholder_14
    
       #define CPUID_BITFIELD_15 \
           bool :1, :1, :1, :1, avx_vnni_int8:1, avx_ne_convert:1, :1,    ...
      @@ -1043,19 +1043,19 @@
           bool rdcl_no:1, eibrs:1, rsba:1, skip_l1dfl:1, intel_ssb_no:1, ...
    
       #define CPUID_BITFIELD_17 \
      -    bool :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1,   ...
      +    uint32_t _placeholder_17
    
       #define CPUID_BITFIELD_18 \
      -    uint32_t :32 /* placeholder */
      +    uint32_t _placeholder_18
    
       #define CPUID_BITFIELD_19 \
      -    uint32_t :32 /* placeholder */
      +    uint32_t _placeholder_19
    
       #define CPUID_BITFIELD_20 \
      -    uint32_t :32 /* placeholder */
      +    uint32_t _placeholder_20
    
       #define CPUID_BITFIELD_21 \
      -    uint32_t :32 /* placeholder */
      +    uint32_t _placeholder_21
    
       #endif /* __XEN_X86__FEATURESET_DATA__ */
    
    No functional change.
    
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 MAINTAINERS            |  1 +
 xen/tools/gen-cpuid.py | 11 ++++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index d8a02a6c19..a0805d35cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -601,6 +601,7 @@ F:  xen/arch/x86/
 F:     xen/include/public/arch-x86/
 F:     xen/include/xen/lib/x86
 F:     xen/lib/x86
+F:     xen/tools/gen-cpuid.py
 F:     tools/firmware/hvmloader/
 F:     tools/firmware/rombios/
 F:     tools/firmware/vgabios/
diff --git a/xen/tools/gen-cpuid.py b/xen/tools/gen-cpuid.py
index 72cf11654b..4a1ca58905 100755
--- a/xen/tools/gen-cpuid.py
+++ b/xen/tools/gen-cpuid.py
@@ -363,8 +363,8 @@ def crunch_numbers(state):
     state.deep_features = deps.keys()
     state.nr_deep_deps = len(state.deep_deps.keys())
 
-    # Calculate the bitfield name declarations
-    for word in range(state.nr_entries):
+    # Calculate the bitfield name declarations.  Leave 4 placeholders on the 
end
+    for word in range(state.nr_entries + 4):
 
         names = []
         for bit in range(32):
@@ -382,7 +382,10 @@ def crunch_numbers(state):
 
             names.append(name.lower())
 
-        state.bitfields.append("bool " + ":1, ".join(names) + ":1")
+        if any(names):
+            state.bitfields.append("bool " + ":1, ".join(names) + ":1")
+        else:
+            state.bitfields.append("uint32_t _placeholder_%u" % (word, ))
 
 
 def write_results(state):
@@ -464,8 +467,6 @@ def write_results(state):
 
 """)
 
-    state.bitfields += ["uint32_t :32 /* placeholder */"] * 4
-
     for idx, text in enumerate(state.bitfields):
         state.output.write(
             "#define CPUID_BITFIELD_%d \\\n    %s\n\n"
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.