|
@@ -545,6 +545,12 @@ static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
goto drop_pkt_accounting;
|
|
goto drop_pkt_accounting;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Add SKB to internal tracking table before further processing
|
|
|
|
+ * in WLAN driver.
|
|
|
|
+ */
|
|
|
|
+ qdf_net_buf_debug_acquire_skb(skb, __FILE__, __LINE__);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* user priority from IP header, which is already extracted and set from
|
|
* user priority from IP header, which is already extracted and set from
|
|
* select_queue call back function
|
|
* select_queue call back function
|
|
@@ -664,7 +670,7 @@ static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_INFO_HIGH,
|
|
QDF_TRACE(QDF_MODULE_ID_HDD_DATA, QDF_TRACE_LEVEL_INFO_HIGH,
|
|
FL("Tx not allowed for sta_id: %d"), STAId);
|
|
FL("Tx not allowed for sta_id: %d"), STAId);
|
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac];
|
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac];
|
|
- goto drop_pkt;
|
|
|
|
|
|
+ goto drop_pkt_and_release_skb;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -675,7 +681,7 @@ static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
"%s: TX function not registered by the data path",
|
|
"%s: TX function not registered by the data path",
|
|
__func__);
|
|
__func__);
|
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac];
|
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac];
|
|
- goto drop_pkt;
|
|
|
|
|
|
+ goto drop_pkt_and_release_skb;
|
|
}
|
|
}
|
|
|
|
|
|
if (pAdapter->tx_fn(pAdapter->txrx_vdev,
|
|
if (pAdapter->tx_fn(pAdapter->txrx_vdev,
|
|
@@ -684,12 +690,14 @@ static int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
"%s: Failed to send packet to txrx for staid: %d",
|
|
"%s: Failed to send packet to txrx for staid: %d",
|
|
__func__, STAId);
|
|
__func__, STAId);
|
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac];
|
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitDroppedAC[ac];
|
|
- goto drop_pkt;
|
|
|
|
|
|
+ goto drop_pkt_and_release_skb;
|
|
}
|
|
}
|
|
netif_trans_update(dev);
|
|
netif_trans_update(dev);
|
|
|
|
|
|
return NETDEV_TX_OK;
|
|
return NETDEV_TX_OK;
|
|
|
|
|
|
|
|
+drop_pkt_and_release_skb:
|
|
|
|
+ qdf_net_buf_debug_release_skb(skb);
|
|
drop_pkt:
|
|
drop_pkt:
|
|
|
|
|
|
if (skb) {
|
|
if (skb) {
|