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
这个提交包含在:
@@ -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 */
|
||||
|
||||
#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,
|
||||
uint8_t *rx_tlv_hdr, struct dp_peer *peer,
|
||||
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,
|
||||
QDF_TRACE_LEVEL_INFO);
|
||||
if (dp_rxdma_err_nbuf_drop()) {
|
||||
qdf_nbuf_free(nbuf);
|
||||
return;
|
||||
}
|
||||
qdf_assert(0);
|
||||
}
|
||||
|
||||
@@ -1507,7 +1511,7 @@ done:
|
||||
while (nbuf) {
|
||||
struct dp_peer *peer;
|
||||
uint16_t peer_id;
|
||||
uint8_t e_code;
|
||||
uint8_t err_code;
|
||||
uint8_t *tlv_hdr;
|
||||
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
||||
|
||||
@@ -1638,27 +1642,20 @@ done:
|
||||
|
||||
case HAL_RXDMA_ERR_DECRYPT:
|
||||
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;
|
||||
dp_rx_process_rxdma_err(soc, nbuf,
|
||||
tlv_hdr, peer,
|
||||
err_code,
|
||||
pool_id);
|
||||
nbuf = next;
|
||||
if (peer) {
|
||||
DP_STATS_INC(peer, rx.err.
|
||||
decrypt_err, 1);
|
||||
} else {
|
||||
dp_rx_process_rxdma_err(soc,
|
||||
nbuf,
|
||||
tlv_hdr,
|
||||
NULL,
|
||||
e_code,
|
||||
pool_id
|
||||
);
|
||||
nbuf = next;
|
||||
continue;
|
||||
dp_peer_unref_del_find_by_id(
|
||||
peer);
|
||||
}
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_DP,
|
||||
QDF_TRACE_LEVEL_DEBUG,
|
||||
"Packet received with Decrypt error");
|
||||
break;
|
||||
continue;
|
||||
|
||||
default:
|
||||
dp_err_rl("RXDMA error %d",
|
||||
|
在新工单中引用
屏蔽一个用户