From d6de641aa6768c757b00bdc7e420a8e01dc37aa3 Mon Sep 17 00:00:00 2001 From: Alok Kumar Date: Fri, 26 Jul 2019 14:35:09 +0530 Subject: [PATCH] qcacld-3.0: Remove work create for peer_unmap_timer_handler This is revert of Change-Id: I9a9554ef0aa9288bf5abe22cd2513d8cc41c29d4 When peer_unmap_timer_handler runs for multiple peers, same work is INITed for multiple peers as this work is not per peer based. This will update the work param i.e. peer gets updated each time, which leads in deletion of wrong peer. Remove the work INIT and scheduling of "peer_unmap_timer_work_function" as cds_trigger_recover() has already taken care of atomic context. Change-Id: Ida0a50f27cfe4c08763b359dab51c82e757ec100 CRs-Fixed: 2498498 --- core/dp/txrx/ol_txrx.c | 26 ++++++-------------------- core/dp/txrx/ol_txrx.h | 1 - core/dp/txrx/ol_txrx_types.h | 1 - 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 01eca72a17f1..9dd66d9348bf 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -1598,7 +1598,6 @@ static void ol_txrx_pdev_detach(struct cdp_pdev *ppdev, int force) htt_pdev_free(pdev->htt_pdev); ol_txrx_peer_find_detach(pdev); - qdf_flush_work(&pdev->peer_unmap_timer_work); ol_txrx_tso_stats_deinit(pdev); ol_txrx_fw_stats_desc_pool_deinit(pdev); @@ -3169,16 +3168,6 @@ static QDF_STATUS ol_txrx_clear_peer(struct cdp_pdev *ppdev, uint8_t sta_id) return status; } -void peer_unmap_timer_work_function(void *param) -{ - WMA_LOGI("Enter: %s", __func__); - /* Added for debugging only */ - ol_txrx_dump_peer_access_list(param); - ol_txrx_peer_release_ref(param, PEER_DEBUG_ID_OL_UNMAP_TIMER_WORK); - wlan_roam_debug_dump_table(); - cds_trigger_recovery(QDF_PEER_UNMAP_TIMEDOUT); -} - /** * peer_unmap_timer_handler() - peer unmap timer function * @data: peer object pointer @@ -3188,22 +3177,19 @@ void peer_unmap_timer_work_function(void *param) void peer_unmap_timer_handler(void *data) { ol_txrx_peer_handle peer = (ol_txrx_peer_handle)data; - ol_txrx_pdev_handle txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX); ol_txrx_err("all unmap events not received for peer %pK, ref_cnt %d", peer, qdf_atomic_read(&peer->ref_cnt)); ol_txrx_err("peer %pK ("QDF_MAC_ADDR_STR")", peer, QDF_MAC_ADDR_ARRAY(peer->mac_addr.raw)); - if (!cds_is_driver_recovering() && !cds_is_fw_down()) { - qdf_create_work(0, &txrx_pdev->peer_unmap_timer_work, - peer_unmap_timer_work_function, - peer); - /* Make sure peer is present before scheduling work */ - ol_txrx_peer_get_ref(peer, PEER_DEBUG_ID_OL_UNMAP_TIMER_WORK); - qdf_sched_work(0, &txrx_pdev->peer_unmap_timer_work); + if (cds_is_self_recovery_enabled()) { + if (!cds_is_driver_recovering() && !cds_is_fw_down()) + cds_trigger_recovery(QDF_PEER_UNMAP_TIMEDOUT); + else + ol_txrx_err("Recovery is in progress, ignore!"); } else { - ol_txrx_err("Recovery is in progress, ignore!"); + QDF_BUG(0); } } diff --git a/core/dp/txrx/ol_txrx.h b/core/dp/txrx/ol_txrx.h index f8ae203c5f1f..dd38659d8898 100644 --- a/core/dp/txrx/ol_txrx.h +++ b/core/dp/txrx/ol_txrx.h @@ -166,7 +166,6 @@ void *ol_txrx_find_peer_by_addr(struct cdp_pdev *pdev, uint8_t *peer_id); void htt_pkt_log_init(struct cdp_pdev *pdev_handle, void *scn); -void peer_unmap_timer_work_function(void *); void peer_unmap_timer_handler(void *data); #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL diff --git a/core/dp/txrx/ol_txrx_types.h b/core/dp/txrx/ol_txrx_types.h index 3e4069832c60..a95b2e87ce0e 100644 --- a/core/dp/txrx/ol_txrx_types.h +++ b/core/dp/txrx/ol_txrx_types.h @@ -1060,7 +1060,6 @@ struct ol_txrx_pdev_t { void (*offld_flush_cb)(void *); struct ol_txrx_peer_t *self_peer; - qdf_work_t peer_unmap_timer_work; /* dp debug fs */ struct dentry *dpt_stats_log_dir;