qcacmn: Drop nbuf if msdu done is not set
Drop the packet if msdu_done bit is not set while processing rxdma err frames. This is not expected while reaping WBM RX release ring. Change-Id: I8776d15ea88319d7d955fdae90958648484dbda0 CRs-Fixed: 2603791
This commit is contained in:
@@ -1070,6 +1070,24 @@ static inline void dp_rx_desc_prep(struct dp_rx_desc *rx_desc, qdf_nbuf_t nbuf)
|
|||||||
}
|
}
|
||||||
#endif /* RX_DESC_DEBUG_CHECK */
|
#endif /* RX_DESC_DEBUG_CHECK */
|
||||||
|
|
||||||
|
#ifdef RXDMA_ERR_PKT_DROP
|
||||||
|
/**
|
||||||
|
* dp_rxdma_err_nbuf_drop(): Function to drop rxdma err frame
|
||||||
|
* @nbuf: buffer pointer
|
||||||
|
*
|
||||||
|
* return: bool: true if RXDMA_ERR_PKT_DROP is enabled
|
||||||
|
*/
|
||||||
|
static inline bool dp_rxdma_err_nbuf_drop(void)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool dp_rxdma_err_nbuf_drop(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
void dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
||||||
uint8_t *rx_tlv_hdr, struct dp_peer *peer,
|
uint8_t *rx_tlv_hdr, struct dp_peer *peer,
|
||||||
uint8_t err_code, uint8_t mac_id);
|
uint8_t err_code, uint8_t mac_id);
|
||||||
|
@@ -949,6 +949,10 @@ dp_rx_process_rxdma_err(struct dp_soc *soc, qdf_nbuf_t nbuf,
|
|||||||
|
|
||||||
hal_rx_dump_pkt_tlvs(soc->hal_soc, rx_tlv_hdr,
|
hal_rx_dump_pkt_tlvs(soc->hal_soc, rx_tlv_hdr,
|
||||||
QDF_TRACE_LEVEL_INFO);
|
QDF_TRACE_LEVEL_INFO);
|
||||||
|
if (dp_rxdma_err_nbuf_drop()) {
|
||||||
|
qdf_nbuf_free(nbuf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
qdf_assert(0);
|
qdf_assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1507,7 +1511,7 @@ done:
|
|||||||
while (nbuf) {
|
while (nbuf) {
|
||||||
struct dp_peer *peer;
|
struct dp_peer *peer;
|
||||||
uint16_t peer_id;
|
uint16_t peer_id;
|
||||||
uint8_t e_code;
|
uint8_t err_code;
|
||||||
uint8_t *tlv_hdr;
|
uint8_t *tlv_hdr;
|
||||||
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
||||||
|
|
||||||
@@ -1638,27 +1642,20 @@ done:
|
|||||||
|
|
||||||
case HAL_RXDMA_ERR_DECRYPT:
|
case HAL_RXDMA_ERR_DECRYPT:
|
||||||
pool_id = wbm_err_info.pool_id;
|
pool_id = wbm_err_info.pool_id;
|
||||||
e_code = wbm_err_info.rxdma_err_code;
|
err_code = wbm_err_info.rxdma_err_code;
|
||||||
tlv_hdr = rx_tlv_hdr;
|
tlv_hdr = rx_tlv_hdr;
|
||||||
|
dp_rx_process_rxdma_err(soc, nbuf,
|
||||||
|
tlv_hdr, peer,
|
||||||
|
err_code,
|
||||||
|
pool_id);
|
||||||
|
nbuf = next;
|
||||||
if (peer) {
|
if (peer) {
|
||||||
DP_STATS_INC(peer, rx.err.
|
DP_STATS_INC(peer, rx.err.
|
||||||
decrypt_err, 1);
|
decrypt_err, 1);
|
||||||
} else {
|
dp_peer_unref_del_find_by_id(
|
||||||
dp_rx_process_rxdma_err(soc,
|
peer);
|
||||||
nbuf,
|
|
||||||
tlv_hdr,
|
|
||||||
NULL,
|
|
||||||
e_code,
|
|
||||||
pool_id
|
|
||||||
);
|
|
||||||
nbuf = next;
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
continue;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
|
||||||
QDF_TRACE_LEVEL_DEBUG,
|
|
||||||
"Packet received with Decrypt error");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dp_err_rl("RXDMA error %d",
|
dp_err_rl("RXDMA error %d",
|
||||||
|
Reference in New Issue
Block a user