wifi: wil6210: fix sparse warnings
authorKalle Valo <quic_kvalo@quicinc.com>
Wed, 20 Mar 2024 18:24:49 +0000 (20:24 +0200)
committerKalle Valo <quic_kvalo@quicinc.com>
Mon, 25 Mar 2024 10:50:42 +0000 (12:50 +0200)
Sparse warns:

drivers/net/wireless/ath/wil6210/fw.c: note: in included file (through drivers/net/wireless/ath/wil6210/wil6210.h):
drivers/net/wireless/ath/wil6210/fw.h:96:47: warning: array of flexible structures
drivers/net/wireless/ath/wil6210/cfg80211.c: note: in included file (through drivers/net/wireless/ath/wil6210/wil6210.h):
drivers/net/wireless/ath/wil6210/fw.h:96:47: warning: array of flexible structures

I decided to remove the combos field altogether and just do pointer arithmetic
instead. Not pretty but I didn't want to waste too much time on an orphaned
driver.

Compile tested only.

Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://msgid.link/20240320182449.3757215-5-kvalo@kernel.org
drivers/net/wireless/ath/wil6210/cfg80211.c
drivers/net/wireless/ath/wil6210/fw.h
drivers/net/wireless/ath/wil6210/fw_inc.c

index dbe4b3478f03ffbc923ef07b9a02a5cb9c4376bc..8993028709ecfb427d074dc5fd1f0fa7d53bf2b9 100644 (file)
@@ -2735,7 +2735,7 @@ int wil_cfg80211_iface_combinations_from_fw(
                return 0;
        }
 
-       combo = conc->combos;
+       combo = (const struct wil_fw_concurrency_combo *)(conc + 1);
        n_combos = le16_to_cpu(conc->n_combos);
        for (i = 0; i < n_combos; i++) {
                total_limits += combo->n_limits;
@@ -2751,7 +2751,7 @@ int wil_cfg80211_iface_combinations_from_fw(
                return -ENOMEM;
        iface_limit = (struct ieee80211_iface_limit *)(iface_combinations +
                                                       n_combos);
-       combo = conc->combos;
+       combo = (const struct wil_fw_concurrency_combo *)(conc + 1);
        for (i = 0; i < n_combos; i++) {
                iface_combinations[i].max_interfaces = combo->max_interfaces;
                iface_combinations[i].num_different_channels =
index aa1620e0d24fab17f44c7a5fec79370c098be03a..2079a90ec260d68143ffb8150f16745de1071edd 100644 (file)
@@ -93,7 +93,6 @@ struct wil_fw_record_concurrency { /* type == wil_fw_type_comment */
        /* number of concurrency combinations that follow */
        __le16 n_combos;
        /* keep last - combinations, variable size by n_combos */
-       struct wil_fw_concurrency_combo combos[];
 } __packed;
 
 /* brd file info encoded inside a comment record */
index fbc84c03406b627df5b33182d10df3f0352fde34..c3c0b289dcf3bc5add1d32adafcf6e6311ff63fc 100644 (file)
@@ -212,8 +212,8 @@ fw_handle_concurrency(struct wil6210_priv *wil, const void *data,
        }
 
        n_combos = le16_to_cpu(rec->n_combos);
-       remain = size - offsetof(struct wil_fw_record_concurrency, combos);
-       combo = rec->combos;
+       remain = size - sizeof(struct wil_fw_record_concurrency);
+       combo = (const struct wil_fw_concurrency_combo *)(rec + 1);
        for (i = 0; i < n_combos; i++) {
                if (remain < sizeof(*combo))
                        goto out_short;