• Gustavo A. R. Silva's avatar
    nfp: Avoid -Wflex-array-member-not-at-end warnings · d88cabfd
    Gustavo A. R. Silva authored
    -Wflex-array-member-not-at-end is coming in GCC-14, and we are getting
    ready to enable it globally.
    
    There is currently an object (`tl`), at the beginning of multiple
    structures, that contains a flexible structure (`struct nfp_dump_tl`),
    for example:
    
    struct nfp_dumpspec_csr {
            struct nfp_dump_tl tl;
    
            ...
    
            __be32 register_width;  /* in bits */
    };
    
    So, in order to avoid ending up with flexible-array members in the
    middle of multiple other structs, we use the `struct_group_tagged()`
    helper to separate the flexible array from the rest of the members
    in the flexible structure:
    
    struct nfp_dump_tl {
    	struct_group_tagged(nfp_dump_tl_hdr, hdr,
    
    	... the rest of members
    
    	);
            char data[];
    };
    
    With the change described above, we now declare objects of the type of
    the tagged struct, in this case `struct nfp_dump_tl_hdr`, without
    embedding flexible arrays in the middle of another struct:
    
    struct nfp_dumpspec_csr {
            struct nfp_dump_tl_hdr tl;
    
    	...
    
            __be32 register_width;  /* in bits */
    };
    
    Also, use `container_of()` whenever we need to retrieve a pointer to
    the flexible structure, through which we can access the flexible
    array if needed.
    
    So, with these changes, fix 33 of the following warnings:
    drivers/net/ethernet/netronome/nfp/nfp_net_debugdump.c:58:28: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    drivers/net/ethernet/netronome/nfp/nfp_net_debugdump.c:64:28: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    drivers/net/ethernet/netronome/nfp/nfp_net_debugdump.c:70:28: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    drivers/net/ethernet/netronome/nfp/nfp_net_debugdump.c:78:28: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    drivers/net/ethernet/netronome/nfp/nfp_net_debugdump.c:87:28: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    drivers/net/ethernet/netronome/nfp/nfp_net_debugdump.c:92:28: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    
    Link: https://github.com/KSPP/linux/issues/202Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/ZgYWlkxdrrieDYIu@neatSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    d88cabfd
nfp_net_debugdump.c 19.4 KB