qcacld-3.0: Defer SB disconnect if link switch in progress
Link switch request received on assoc VDEV(V0) and to process it MLO manager will change this to link VDEV and another VDEV(V1) to assoc VDEV. If AP sends deauth while link switch is in progress then it will gets serialized first on partner VDEV (V0 - which is the VDEV on which link switch is in progress) and then on assoc VDEV(V1). Upon link switch completion MLO manager will restore the VDEV flags to original state and disconnect queued to serialization will be activated and it first processes assoc VDEV(V0) as when it is queued to serialization flags are not restored. As part of disconnect complete on assoc VDEV(V0) kernel is notified and this leads to framework sending set MAC address. Though assoc VDEV(V0) is disconnected, partner VDEV (V1) is still not in INIT state. So sending set MAC address while in non-INIT state will lead to FW assert. Defer any SB disconnects while link switch in progress, MLO manager will queue these disconnects when link switch is completed and flags are properly restored so that assoc VDEV is not serialized first. Change-Id: Idd8afbdc74177eda429256b4761512e0d1caa949 CRs-Fixed: 3601964
This commit is contained in:
committed by
Rahul Choudhary
parent
f3e27022c3
commit
46288c20e1
@@ -36,6 +36,7 @@
|
||||
#include "wlan_mlo_mgr_roam.h"
|
||||
#include "wlan_t2lm_api.h"
|
||||
#include "wlan_mlo_link_force.h"
|
||||
#include <wlan_mlo_mgr_public_api.h>
|
||||
|
||||
static void cm_abort_connect_request_timers(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
@@ -326,9 +327,15 @@ QDF_STATUS cm_send_sb_disconnect_req(struct scheduler_msg *msg)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = mlo_disconnect(vdev, ind->disconnect_param.source,
|
||||
ind->disconnect_param.reason_code,
|
||||
&ind->disconnect_param.bssid);
|
||||
status = wlan_mlo_mgr_link_switch_defer_disconnect_req(vdev,
|
||||
ind->disconnect_param.source,
|
||||
ind->disconnect_param.reason_code);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
status = mlo_disconnect(vdev, ind->disconnect_param.source,
|
||||
ind->disconnect_param.reason_code,
|
||||
&ind->disconnect_param.bssid);
|
||||
}
|
||||
|
||||
qdf_mem_free(ind);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
|
||||
|
||||
|
Reference in New Issue
Block a user