qcacld-3.0: Prevent RSO stop sent after vdev down
When roam invoke from user space fails, internal disconnection is triggered from csr. This queues disassociate command to lim and then RSO command is also posted to lim. When disassociate get processed, vdev down is sent, pe session is deleted and roam offload flag at wma is cleared. When RSO stop is received at wma, the roam offload flag is cleared and wma returns failure without sending RSO command. So in STA+STA scenario, after disconnection on 1st sta, roaming will be enabled on 2nd sta, but since RSO stop was not sent on 1st sta, firmware will assert as btm offload is not disabled at the 1st STA. Disable roaming first, followed by vdev stop/vdev down to firmware. Change-Id: I3f2f873cf50536b6f31bc0113ff737d6d95a520d CRs-Fixed: 2672573
This commit is contained in:

کامیت شده توسط
nshrivas

والد
5811526f4a
کامیت
9851bcda03
@@ -6538,10 +6538,9 @@ QDF_STATUS sme_stop_roaming(mac_handle_t mac_handle, uint8_t session_id,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (reason == REASON_DRIVER_DISABLED && requestor) {
|
||||
mlme_set_operations_bitmap(mac_ctx->psoc, session_id, requestor,
|
||||
false);
|
||||
}
|
||||
if (reason == REASON_DRIVER_DISABLED && requestor)
|
||||
mlme_set_operations_bitmap(mac_ctx->psoc, session_id,
|
||||
requestor, false);
|
||||
|
||||
status = csr_post_roam_state_change(mac_ctx, session_id,
|
||||
ROAM_RSO_STOPPED,
|
||||
|
@@ -9305,6 +9305,20 @@ QDF_STATUS csr_roam_disconnect_internal(struct mac_context *mac, uint32_t sessio
|
||||
return status;
|
||||
}
|
||||
|
||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
static void
|
||||
csr_disable_roaming_offload(struct mac_context *mac_ctx, uint32_t vdev_id)
|
||||
{
|
||||
sme_stop_roaming(MAC_HANDLE(mac_ctx), vdev_id,
|
||||
REASON_DRIVER_DISABLED,
|
||||
RSO_INVALID_REQUESTOR);
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
csr_disable_roaming_offload(struct mac_context *mac_ctx, uint32_t session_id)
|
||||
{}
|
||||
#endif
|
||||
|
||||
QDF_STATUS csr_roam_disconnect(struct mac_context *mac_ctx, uint32_t session_id,
|
||||
eCsrRoamDisconnectReason reason,
|
||||
tSirMacReasonCodes mac_reason)
|
||||
@@ -9317,7 +9331,10 @@ QDF_STATUS csr_roam_disconnect(struct mac_context *mac_ctx, uint32_t session_id,
|
||||
}
|
||||
|
||||
session->discon_in_progress = true;
|
||||
|
||||
csr_roam_cancel_roaming(mac_ctx, session_id);
|
||||
csr_disable_roaming_offload(mac_ctx, session_id);
|
||||
|
||||
csr_roam_remove_duplicate_command(mac_ctx, session_id, NULL,
|
||||
eCsrForcedDisassoc);
|
||||
|
||||
@@ -21701,13 +21718,14 @@ static QDF_STATUS csr_process_roam_sync_callback(struct mac_context *mac_ctx,
|
||||
case SIR_ROAMING_INVOKE_FAIL:
|
||||
sme_debug("Roaming triggered failed source %d nud behaviour %d",
|
||||
vdev_roam_params->source, mac_ctx->nud_fail_behaviour);
|
||||
|
||||
/* Userspace roam req fail, disconnect with AP */
|
||||
if (vdev_roam_params->source == USERSPACE_INITIATED ||
|
||||
mac_ctx->nud_fail_behaviour == DISCONNECT_AFTER_ROAM_FAIL) {
|
||||
/* Userspace roam req fail, disconnect with AP */
|
||||
mac_ctx->nud_fail_behaviour == DISCONNECT_AFTER_ROAM_FAIL)
|
||||
csr_roam_disconnect(mac_ctx, session_id,
|
||||
eCSR_DISCONNECT_REASON_DEAUTH,
|
||||
eSIR_MAC_USER_TRIGGERED_ROAM_FAILURE);
|
||||
}
|
||||
eCSR_DISCONNECT_REASON_DEAUTH,
|
||||
eSIR_MAC_USER_TRIGGERED_ROAM_FAILURE);
|
||||
|
||||
vdev_roam_params->roam_invoke_in_progress = false;
|
||||
goto end;
|
||||
case SIR_ROAM_SYNCH_PROPAGATION:
|
||||
|
مرجع در شماره جدید
Block a user