2024-05-13 10:35:38

by Miri Korenblit

[permalink] [raw]
Subject: [PATCH 0/7] wifi: iwlwifi: bugfixes for fixes tree 13-05-24

Hi,

Resending the fixes of the latest patchset as a fixes patchset,
these patches needs to go to the fixes tree.

Thanks,
Miri

Ayala Beker (1):
wifi: iwlwifi: mvm: properly set 6 GHz channel direct probe option

Benjamin Berg (1):
wifi: iwlwifi: mvm: remove stale STA link data during restart

Emmanuel Grumbach (1):
wifi: iwlwifi: mvm: don't read past the mfuart notifcation

Ilan Peer (1):
wifi: iwlwifi: mvm: Fix scan abort handling with HW rfkill

Johannes Berg (1):
wifi: iwlwifi: mvm: handle BA session teardown in RF-kill

Miri Korenblit (1):
wifi: iwlwifi: mvm: check n_ssids before accessing the ssids

Yedidya Benshimol (1):
wifi: iwlwifi: mvm: Handle BIGTK cipher in kek_kck cmd

drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 13 ++++++-
drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 10 -----
.../net/wireless/intel/iwlwifi/mvm/mac80211.c | 39 ++++++++++++++++++-
.../net/wireless/intel/iwlwifi/mvm/mld-sta.c | 13 ++++---
drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 12 ++++--
drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 12 ++++--
drivers/net/wireless/intel/iwlwifi/mvm/sta.h | 5 +++
7 files changed, 77 insertions(+), 27 deletions(-)

--
2.34.1



2024-05-13 10:35:49

by Miri Korenblit

[permalink] [raw]
Subject: [PATCH 3/7] wifi: iwlwifi: mvm: handle BA session teardown in RF-kill

From: Johannes Berg <[email protected]>

When entering RF-kill, mac80211 tears down BA sessions, but
due to RF-kill the commands aren't sent to the device. As a
result, there can be frames pending on the reorder buffer or
perhaps even received while doing so, leading to warnings.

Avoid the warnings by doing the BA session teardown normally
even in RF-kill, which also requires queue sync.

Signed-off-by: Johannes Berg <[email protected]>
Signed-off-by: Miri Korenblit <[email protected]>
---
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c | 3 ++-
drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 12 ++++++++----
3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 290670310ae8..70b769eb5861 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -6129,7 +6129,7 @@ void iwl_mvm_sync_rx_queues_internal(struct iwl_mvm *mvm,
.len[0] = sizeof(cmd),
.data[1] = data,
.len[1] = size,
- .flags = sync ? 0 : CMD_ASYNC,
+ .flags = CMD_SEND_IN_RFKILL | (sync ? 0 : CMD_ASYNC),
};
int ret;

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
index 0fcbc400caef..b98256edb52e 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
@@ -1009,7 +1009,8 @@ static int iwl_mvm_mld_update_sta_baids(struct iwl_mvm *mvm,

cmd.modify.tid = cpu_to_le32(data->tid);

- ret = iwl_mvm_send_cmd_pdu(mvm, cmd_id, 0, sizeof(cmd), &cmd);
+ ret = iwl_mvm_send_cmd_pdu(mvm, cmd_id, CMD_SEND_IN_RFKILL,
+ sizeof(cmd), &cmd);
data->sta_mask = new_sta_mask;
if (ret)
return ret;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
index 491c449fd431..908d0bc474da 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
@@ -2836,7 +2836,12 @@ static int iwl_mvm_fw_baid_op_cmd(struct iwl_mvm *mvm,
.action = start ? cpu_to_le32(IWL_RX_BAID_ACTION_ADD) :
cpu_to_le32(IWL_RX_BAID_ACTION_REMOVE),
};
- u32 cmd_id = WIDE_ID(DATA_PATH_GROUP, RX_BAID_ALLOCATION_CONFIG_CMD);
+ struct iwl_host_cmd hcmd = {
+ .id = WIDE_ID(DATA_PATH_GROUP, RX_BAID_ALLOCATION_CONFIG_CMD),
+ .flags = CMD_SEND_IN_RFKILL,
+ .len[0] = sizeof(cmd),
+ .data[0] = &cmd,
+ };
int ret;

BUILD_BUG_ON(sizeof(struct iwl_rx_baid_cfg_resp) != sizeof(baid));
@@ -2848,7 +2853,7 @@ static int iwl_mvm_fw_baid_op_cmd(struct iwl_mvm *mvm,
cmd.alloc.ssn = cpu_to_le16(ssn);
cmd.alloc.win_size = cpu_to_le16(buf_size);
baid = -EIO;
- } else if (iwl_fw_lookup_cmd_ver(mvm->fw, cmd_id, 1) == 1) {
+ } else if (iwl_fw_lookup_cmd_ver(mvm->fw, hcmd.id, 1) == 1) {
cmd.remove_v1.baid = cpu_to_le32(baid);
BUILD_BUG_ON(sizeof(cmd.remove_v1) > sizeof(cmd.remove));
} else {
@@ -2857,8 +2862,7 @@ static int iwl_mvm_fw_baid_op_cmd(struct iwl_mvm *mvm,
cmd.remove.tid = cpu_to_le32(tid);
}

- ret = iwl_mvm_send_cmd_pdu_status(mvm, cmd_id, sizeof(cmd),
- &cmd, &baid);
+ ret = iwl_mvm_send_cmd_status(mvm, &hcmd, &baid);
if (ret)
return ret;

--
2.34.1


2024-05-13 10:35:53

by Miri Korenblit

[permalink] [raw]
Subject: [PATCH 4/7] wifi: iwlwifi: mvm: properly set 6 GHz channel direct probe option

From: Ayala Beker <[email protected]>

Ensure that the 6 GHz channel is configured with a valid direct BSSID,
avoiding any invalid or multicast BSSID addresses.

Signed-off-by: Ayala Beker <[email protected]>
Reviewed-by: Ilan Peer <[email protected]>
Signed-off-by: Miri Korenblit <[email protected]>
---
drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
index 11559563ae38..85d8cbe6d248 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
@@ -1717,7 +1717,10 @@ iwl_mvm_umac_scan_fill_6g_chan_list(struct iwl_mvm *mvm,
break;
}

- if (k == idex_b && idex_b < SCAN_BSSID_MAX_SIZE) {
+ if (k == idex_b && idex_b < SCAN_BSSID_MAX_SIZE &&
+ !WARN_ONCE(!is_valid_ether_addr(scan_6ghz_params[j].bssid),
+ "scan: invalid BSSID at index %u, index_b=%u\n",
+ j, idex_b)) {
memcpy(&pp->bssid_array[idex_b++],
scan_6ghz_params[j].bssid, ETH_ALEN);
}
--
2.34.1