mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-13 05:15:16 +07:00
wcn36xx: don't delete invalid bss indices
The firmware code cannot cope with requests to remove BSS indices that have not previously been added. This primarily happens when the device is suspended and then resumed. ieee80211_reconfig() then calls into wcn36xx_bss_info_changed() with an empty bssid and BSS_CHANGED_BSSID set, which subsequently leads to a firmware crash: [ 43.647928] qcom-wcnss-pil a204000.wcnss: fatal error received: halMsg.c:4964:halMsg_DelBss: Invalid BSSIndex 0 [ 43.647959] remoteproc remoteproc0: crash detected in a204000.wcnss: type fatal error To fix this, set bss_index to WCN36XX_HAL_BSS_INVALID_IDX for all bss that have not been configured in the firmware, and don't call into the firmware with invalid indices. Signed-off-by: Daniel Mack <daniel@zonque.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
271f1e65ff
commit
2edfcf2b30
@ -953,6 +953,7 @@ static int wcn36xx_add_interface(struct ieee80211_hw *hw,
|
||||
|
||||
mutex_lock(&wcn->conf_mutex);
|
||||
|
||||
vif_priv->bss_index = WCN36XX_HAL_BSS_INVALID_IDX;
|
||||
list_add(&vif_priv->list, &wcn->vif_list);
|
||||
wcn36xx_smd_add_sta_self(wcn, vif);
|
||||
|
||||
|
@ -1446,6 +1446,10 @@ int wcn36xx_smd_delete_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif)
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&wcn->hal_mutex);
|
||||
|
||||
if (vif_priv->bss_index == WCN36XX_HAL_BSS_INVALID_IDX)
|
||||
goto out;
|
||||
|
||||
INIT_HAL_MSG(msg_body, WCN36XX_HAL_DELETE_BSS_REQ);
|
||||
|
||||
msg_body.bss_index = vif_priv->bss_index;
|
||||
@ -1464,6 +1468,8 @@ int wcn36xx_smd_delete_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif)
|
||||
wcn36xx_err("hal_delete_bss response failed err=%d\n", ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
vif_priv->bss_index = WCN36XX_HAL_BSS_INVALID_IDX;
|
||||
out:
|
||||
mutex_unlock(&wcn->hal_mutex);
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user