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:
Sravan Goud
2020-01-17 15:40:09 +05:30
committed by nshrivas
parent 33ff8de7cb
commit fbe04282e0
2 changed files with 32 additions and 17 deletions

View File

@@ -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);

View File

@@ -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",