From fe558366082ec3a8740e9f7e973a2bcb83fbb265 Mon Sep 17 00:00:00 2001 From: Deepak Dhamdhere Date: Thu, 2 Mar 2017 17:54:56 -0800 Subject: [PATCH] qcacld-3.0: Initialize peer_unmap_timer during peer attach Initialize peer_unmap_timer during peer attach instead of at the time of peer detach. Then ol_txrx_unref_delete can destroy the timer without peer detach getting called earlier. CRs-Fixed: 2014183 Change-Id: Icebec27d5562350871a89b5cf71ae99f096feee8 --- core/dp/txrx/ol_txrx.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index f74c3a556aa1..32573dab7d29 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -2459,6 +2459,8 @@ ol_txrx_peer_attach(struct cdp_vdev *pvdev, uint8_t *peer_mac_addr) qdf_atomic_inc(&peer->ref_cnt); peer->valid = 1; + qdf_mc_timer_init(&peer->peer_unmap_timer, QDF_TIMER_TYPE_SW, + peer_unmap_timer_handler, peer); ol_txrx_peer_find_hash_add(pdev, peer); @@ -3147,10 +3149,7 @@ int ol_txrx_peer_unref_delete(ol_txrx_peer_handle peer) vdev->wait_on_peer_id = OL_TXRX_INVALID_LOCAL_PEER_ID; } - if (vdev->opmode == wlan_op_mode_sta) { - qdf_mc_timer_stop(&peer->peer_unmap_timer); - qdf_mc_timer_destroy(&peer->peer_unmap_timer); - } + qdf_mc_timer_destroy(&peer->peer_unmap_timer); /* check whether the parent vdev has no peers left */ if (TAILQ_EMPTY(&vdev->peer_list)) { @@ -3366,8 +3365,6 @@ static void ol_txrx_peer_detach(void *ppeer) * Create a timer to track unmap events when the sta peer gets deleted. */ if (vdev->opmode == wlan_op_mode_sta) { - qdf_mc_timer_init(&peer->peer_unmap_timer, QDF_TIMER_TYPE_SW, - peer_unmap_timer_handler, peer); qdf_mc_timer_start(&peer->peer_unmap_timer, OL_TXRX_PEER_UNMAP_TIMEOUT); ol_txrx_info("started peer_unmap_timer for peer %p", peer);