qcacmn: Fix roam abort for 2nd sta connect
During wlan0 vdev0 roaming, before roam sync received, 2nd sta wlan1 vdev2 connect req came, disabled RSO of vdev0, so vdev0 roam aborted, and disconnected. To fix it, serialize roaming disable during connect too, don’t disable roaming of other connected sta until serialization allowed in wlan_serialization_activate_cmd ->cm_connect_active Change-Id: Ic2e626154b570a1691b8f3d684d21d8a107d09dc CRs-Fixed: 3510787
Этот коммит содержится в:

коммит произвёл
Rahul Choudhary

родитель
d055e87ea7
Коммит
a013c998bd
@@ -51,6 +51,7 @@
|
||||
* @WLAN_IF_MGR_EV_AP_CSA_START: Event to handle CSA start
|
||||
* @WLAN_IF_MGR_EV_AP_CSA_COMPLETE: Event to handle csa complete
|
||||
* @WLAN_IF_MGR_EV_STA_CSA_COMPLETE: Event to handle STA/P2P_CLI CSA completion
|
||||
* @WLAN_IF_MGR_EV_CONNECT_ACTIVE:Event to handle connect active request
|
||||
* @WLAN_IF_MGR_EV_MAX: Max event
|
||||
*/
|
||||
enum wlan_if_mgr_evt {
|
||||
@@ -74,7 +75,8 @@ enum wlan_if_mgr_evt {
|
||||
WLAN_IF_MGR_EV_AP_CSA_START = 17,
|
||||
WLAN_IF_MGR_EV_AP_CSA_COMPLETE = 18,
|
||||
WLAN_IF_MGR_EV_STA_CSA_COMPLETE = 19,
|
||||
WLAN_IF_MGR_EV_MAX = 20,
|
||||
WLAN_IF_MGR_EV_CONNECT_ACTIVE = 20,
|
||||
WLAN_IF_MGR_EV_MAX = 21,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -36,6 +36,21 @@
|
||||
QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev,
|
||||
struct if_mgr_event_data *event_data);
|
||||
|
||||
/**
|
||||
* if_mgr_connect_active() - connect active event handler
|
||||
* @vdev: vdev object
|
||||
* @event_data: Interface mgr event data
|
||||
*
|
||||
* Interface manager connect active event handler, disable roaming of other
|
||||
* sta.
|
||||
*
|
||||
* Context: It should run in thread context
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS if_mgr_connect_active(struct wlan_objmgr_vdev *vdev,
|
||||
struct if_mgr_event_data *event_data);
|
||||
|
||||
/**
|
||||
* if_mgr_connect_complete() - connect complete event handler
|
||||
* @vdev: vdev object
|
||||
|
@@ -53,6 +53,7 @@ const char *if_mgr_get_event_str(enum wlan_if_mgr_evt event)
|
||||
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_CSA_START);
|
||||
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_CSA_COMPLETE);
|
||||
CASE_RETURN_STRING(WLAN_IF_MGR_EV_STA_CSA_COMPLETE);
|
||||
CASE_RETURN_STRING(WLAN_IF_MGR_EV_CONNECT_ACTIVE);
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
@@ -166,6 +167,10 @@ QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
|
||||
case WLAN_IF_MGR_EV_STA_CSA_COMPLETE:
|
||||
status = if_mgr_sta_csa_complete(vdev, event_data);
|
||||
break;
|
||||
case WLAN_IF_MGR_EV_CONNECT_ACTIVE:
|
||||
status = if_mgr_connect_active(vdev, event_data);
|
||||
break;
|
||||
|
||||
default:
|
||||
status = if_mgr_deliver_mbss_event(vdev, event, event_data);
|
||||
}
|
||||
|
@@ -2112,12 +2112,20 @@ void cm_fill_vdev_crypto_params(struct cnx_mgr *cm_ctx,
|
||||
req->crypto.rsn_caps);
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
cm_if_mgr_inform_connect_active(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
return if_mgr_deliver_event(vdev, WLAN_IF_MGR_EV_CONNECT_ACTIVE, NULL);
|
||||
}
|
||||
|
||||
QDF_STATUS cm_connect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id)
|
||||
{
|
||||
struct cm_req *cm_req;
|
||||
QDF_STATUS status;
|
||||
struct wlan_cm_connect_req *req;
|
||||
|
||||
cm_if_mgr_inform_connect_active(cm_ctx->vdev);
|
||||
|
||||
cm_ctx->active_cm_id = *cm_id;
|
||||
cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id);
|
||||
if (!cm_req) {
|
||||
|
Ссылка в новой задаче
Block a user