• Arnd Bergmann's avatar
    carl9170: fix struct alignment conflict · ca9ad549
    Arnd Bergmann authored
    Multiple structures in the carl9170 driver have alignment
    impossible alignment constraints that gcc warns about when
    building with 'make W=1':
    
    drivers/net/wireless/ath/carl9170/fwcmd.h:243:2: warning: alignment 1 of 'union <anonymous>' is less than 4 [-Wpacked-not-aligned]
    drivers/net/wireless/ath/carl9170/wlan.h:373:1: warning: alignment 1 of 'struct ar9170_rx_frame_single' is less than 2 [-Wpacked-not-aligned]
    
    In the carl9170_cmd structure, multiple members that have an explicit
    alignment requirement of four bytes are added into a union with explicit
    byte alignment, but this in turn is part of a structure that also has
    four-byte alignment.
    
    In the wlan.h header, multiple structures contain a ieee80211_hdr member
    that is required to be two-byte aligned to avoid alignmnet faults when
    processing network headers, but all members are forced to be byte-aligned
    using the __packed tag at the end of the struct definition.
    
    In both cases, leaving out the packing does not change the internal
    layout of the structure but changes the alignment constraint of the
    structure itself.
    
    Change all affected structures to only apply packing where it does
    not violate the alignment requirement of the contained structure.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Acked-by: default avatarChristian Lamparter <chunkeey@gmail.com>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210204162926.3262598-1-arnd@kernel.org
    ca9ad549
fwcmd.h 8.58 KB