qcacmn: fix TX packet logging issue
Packet logging buffer is only 2048 bytes, if copy non-linear TX packet with skb->len (like TSO) which is likely > 2048, this will lead to skb panic as packet logging buffer can not accommodate it. Only support TX packet logging with single linear buffer. Change-Id: I1d15f9ab80fcc1720fdb3f7fe8c89e7f5e3c0a79 CRs-Fixed: 3242090
This commit is contained in:

committed by
Madan Koyyalamudi

parent
38b8236ddc
commit
694a2eb657
@@ -3775,6 +3775,7 @@ dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
|
|||||||
* dp_tx_send_pktlog() - send tx packet log
|
* dp_tx_send_pktlog() - send tx packet log
|
||||||
* @soc: soc handle
|
* @soc: soc handle
|
||||||
* @pdev: pdev handle
|
* @pdev: pdev handle
|
||||||
|
* @tx_desc: TX software descriptor
|
||||||
* @nbuf: nbuf
|
* @nbuf: nbuf
|
||||||
* @status: status of tx packet
|
* @status: status of tx packet
|
||||||
*
|
*
|
||||||
@@ -3785,11 +3786,13 @@ dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
|
|||||||
*/
|
*/
|
||||||
static inline
|
static inline
|
||||||
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||||
|
struct dp_tx_desc_s *tx_desc,
|
||||||
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
|
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
|
||||||
{
|
{
|
||||||
ol_txrx_pktdump_cb packetdump_cb = pdev->dp_tx_packetdump_cb;
|
ol_txrx_pktdump_cb packetdump_cb = pdev->dp_tx_packetdump_cb;
|
||||||
|
|
||||||
if (qdf_unlikely(packetdump_cb)) {
|
if (qdf_unlikely(packetdump_cb) &&
|
||||||
|
dp_tx_frm_std == tx_desc->frm_type) {
|
||||||
packetdump_cb((ol_txrx_soc_handle)soc, pdev->pdev_id,
|
packetdump_cb((ol_txrx_soc_handle)soc, pdev->pdev_id,
|
||||||
QDF_NBUF_CB_TX_VDEV_CTX(nbuf),
|
QDF_NBUF_CB_TX_VDEV_CTX(nbuf),
|
||||||
nbuf, status, QDF_TX_DATA_PKT);
|
nbuf, status, QDF_TX_DATA_PKT);
|
||||||
@@ -3823,6 +3826,7 @@ void dp_rx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
|||||||
#else
|
#else
|
||||||
static inline
|
static inline
|
||||||
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
void dp_tx_send_pktlog(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||||
|
struct dp_tx_desc_s *tx_desc,
|
||||||
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
|
qdf_nbuf_t nbuf, enum qdf_dp_tx_rx_status status)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@@ -4758,7 +4758,7 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
|
|||||||
dp_tx_update_peer_delay_stats(txrx_peer, tx_desc, ts->tid, ring_id);
|
dp_tx_update_peer_delay_stats(txrx_peer, tx_desc, ts->tid, ring_id);
|
||||||
dp_tx_update_peer_sawf_stats(soc, vdev, txrx_peer, tx_desc,
|
dp_tx_update_peer_sawf_stats(soc, vdev, txrx_peer, tx_desc,
|
||||||
ts, ts->tid);
|
ts, ts->tid);
|
||||||
dp_tx_send_pktlog(soc, vdev->pdev, nbuf, dp_status);
|
dp_tx_send_pktlog(soc, vdev->pdev, tx_desc, nbuf, dp_status);
|
||||||
|
|
||||||
#ifdef QCA_SUPPORT_RDK_STATS
|
#ifdef QCA_SUPPORT_RDK_STATS
|
||||||
if (soc->peerstats_enabled)
|
if (soc->peerstats_enabled)
|
||||||
|
Reference in New Issue
Block a user