Преглед на файлове

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
Alok Kumar преди 5 години
родител
ревизия
d6de641aa6
променени са 3 файла, в които са добавени 6 реда и са изтрити 22 реда
  1. 6 20
      core/dp/txrx/ol_txrx.c
  2. 0 1
      core/dp/txrx/ol_txrx.h
  3. 0 1
      core/dp/txrx/ol_txrx_types.h

+ 6 - 20
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);
 	}
 }
 

+ 0 - 1
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

+ 0 - 1
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;