qcacmn: Fix TX Desc invalid accessing when process TX completion
In some corner case, host has done Vdev destroy and TX desc flush since there is pending outstanding TX data on this vdev, but later FW/HW still indicate the TX completion to host and which likely these TX completion get delayed, conflict happened due to same TX Desc accessing. To fix it: (1) Only reset TX desc Vdev to NULL in dp_tx_vdev_detach(). (2) Do more enhancement in dp_tx_comp_handler() to avoid invalid Vdev accessing. (3) Do TX desc flush in dp_tx_pdev_detach(). Change-Id: I44cce9451e4f07fed6e21a9cd3fc0eaefa3d54c2 CRs-Fixed: 2441455
このコミットが含まれているのは:
@@ -301,6 +301,8 @@ dp_tx_desc_free(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc,
|
||||
enum netif_action_type act = WLAN_WAKE_ALL_NETIF_QUEUE;
|
||||
|
||||
qdf_spin_lock_bh(&pool->flow_pool_lock);
|
||||
tx_desc->vdev = NULL;
|
||||
tx_desc->nbuf = NULL;
|
||||
tx_desc->flags = 0;
|
||||
dp_tx_put_desc_flow_pool(pool, tx_desc);
|
||||
switch (pool->status) {
|
||||
@@ -456,6 +458,8 @@ dp_tx_desc_free(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc,
|
||||
struct dp_tx_desc_pool_s *pool = &soc->tx_desc[desc_pool_id];
|
||||
|
||||
qdf_spin_lock_bh(&pool->flow_pool_lock);
|
||||
tx_desc->vdev = NULL;
|
||||
tx_desc->nbuf = NULL;
|
||||
tx_desc->flags = 0;
|
||||
dp_tx_put_desc_flow_pool(pool, tx_desc);
|
||||
switch (pool->status) {
|
||||
@@ -510,7 +514,6 @@ dp_tx_desc_thresh_reached(struct cdp_vdev *vdev)
|
||||
|
||||
return dp_tx_is_threshold_reached(pool, pool->avail_desc);
|
||||
}
|
||||
|
||||
#else /* QCA_LL_TX_FLOW_CONTROL_V2 */
|
||||
|
||||
static inline void dp_tx_flow_control_init(struct dp_soc *handle)
|
||||
|
新しいイシューから参照
ユーザーをブロックする