]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
wifi: iwlegacy: Avoid multiple -Wflex-array-member-not-at-end warnings
authorGustavo A. R. Silva <gustavoars@kernel.org>
Mon, 16 Feb 2026 09:25:14 +0000 (18:25 +0900)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 2 Mar 2026 08:22:30 +0000 (09:22 +0100)
commitabf37167e78f87c131a1de22ba1bd1cdc81a131f
treed81c5669e5c29abfe70e80179fa62001a5af3b96
parent6a584e336cefb230e2d981a464f4d85562eb750c
wifi: iwlegacy: Avoid multiple -Wflex-array-member-not-at-end warnings

-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.

Move the conflicting declarations (which in a couple of cases happen
to be in a union, so the entire unions are moved) to the end of the
corresponding structures, struct il_frame, and struct il3945_frame.

Notice that `struct il_tx_beacon_cmd`, `struct il4965_tx_resp`, and
`struct il3945_tx_beacon_cmd` are flexible structures, this is
structures that contain a flexible-array member.

The case for struct il4965_beacon_notif is different. Since this
structure is defined by hardware, we create the new `struct
il4965_tx_resp_hdr` type. We then use this newly created type to
replace the object type causing trouble in struct il4965_beacon_notif,
namely `struct il4965_tx_resp`.

Also, once -fms-extensions is enabled, we can use transparent struct
members in struct il4965_tx_resp.

Notice that the newly created type does not contain the flex-array
member `agg_status`, which is the object causing the -Wfamnae warnings.
This object is currently in a union along with `__le32 status`, so
anything using struct il4965_beacon_notif needs to have its own view
of `status`. To preserve the memory layout, we therefore add member
`__le32 beacon_tx_status` to struct il4965_beacon_notif.

After these changes, the size of struct il4965_beacon_notif along
with its member's offsets remain the same, hence the memory layout
doesn't change:

Before changes:
struct il4965_beacon_notif {
struct il4965_tx_resp      beacon_notify_hdr;    /*     0    24 */
__le32                     low_tsf;              /*    24     4 */
__le32                     high_tsf;             /*    28     4 */
__le32                     ibss_mgr_status;      /*    32     4 */

/* size: 36, cachelines: 1, members: 4 */
/* last cacheline: 36 bytes */
};

After changes:
struct il4965_beacon_notif {
struct il4965_tx_resp_hdr  beacon_notify_hdr;    /*     0    20 */
__le32                     beacon_tx_status;     /*    20     4 */
__le32                     low_tsf;              /*    24     4 */
__le32                     high_tsf;             /*    28     4 */
__le32                     ibss_mgr_status;      /*    32     4 */

/* size: 36, cachelines: 1, members: 5 */
/* last cacheline: 36 bytes */
};

Lastly, adjust the rest of the code, accordingly.

With these changes fix the following warnings:

11 drivers/net/wireless/intel/iwlegacy/common.h:526:11: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
11 drivers/net/wireless/intel/iwlegacy/commands.h:2667:31: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
4 drivers/net/wireless/intel/iwlegacy/3945.h:131:11: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
Link: https://patch.msgid.link/aZLienEatf9KC6Rx@kspp
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlegacy/3945.h
drivers/net/wireless/intel/iwlegacy/4965-mac.c
drivers/net/wireless/intel/iwlegacy/commands.h
drivers/net/wireless/intel/iwlegacy/common.h