From 1881bb989e2687c655c1aaba5362afe503ff327b Mon Sep 17 00:00:00 2001 From: Jianmin Zhu Date: Tue, 26 Apr 2022 16:20:44 +0800 Subject: [PATCH] qcacld-3.0: Fix roam failed for SAP CSA concurrency When vdev0 STA roamed to another channel, vdev1 SAP CSA for SCC when ROAM_SYNCH_IN_PROG, will disable roam, but no RSO stop to F/W, F/W RSO isn't disabled, but host vdev0 will enter RSO_STOPPED, host F/W RSO state out of sync. If vdev0 STA next roam sync come soon, it won't be handled for host RSO_STOPPED, neither roam sync complete nor disconnect will happen, F/W will asert after wait roam sync complete timeout. To fix it, Only do SAP CSA check after roam complete and RSO reenabled, can avoid host F/W RSO state out of sync issue. Change-Id: I77ccf30cac38f62c6ef8330c6da00364249b242e CRs-Fixed: 3076935 --- components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c | 5 ++++- core/sme/src/csr/csr_api_roam.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c b/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c index bbf0e49021da..25887083105c 100644 --- a/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c +++ b/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -28,6 +29,7 @@ #include "wlan_p2p_ucfg_api.h" #include "wlan_tdls_ucfg_api.h" #include "wlan_tdls_api.h" +#include "wlan_cm_roam_api.h" QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev, struct if_mgr_event_data *event_data) @@ -140,7 +142,8 @@ QDF_STATUS if_mgr_connect_complete(struct wlan_objmgr_vdev *vdev, policy_mgr_check_n_start_opportunistic_timer(psoc); - policy_mgr_check_concurrent_intf_and_restart_sap(psoc); + if (!wlan_cm_roaming_in_progress(pdev, vdev->vdev_objmgr.vdev_id)) + policy_mgr_check_concurrent_intf_and_restart_sap(psoc); return QDF_STATUS_SUCCESS; } diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 0b8ee9124462..ee7b33b59832 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -21309,7 +21309,6 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx, } policy_mgr_check_n_start_opportunistic_timer(mac_ctx->psoc); - policy_mgr_check_concurrent_intf_and_restart_sap(mac_ctx->psoc); vdev_roam_params->roam_invoke_in_progress = false; if (roam_synch_data->authStatus == @@ -21328,6 +21327,7 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx, WLAN_ROAM_INIT, REASON_CONNECT); } + policy_mgr_check_concurrent_intf_and_restart_sap(mac_ctx->psoc); goto end; case SIR_ROAMING_DEAUTH: csr_roam_roaming_offload_timer_action(