Преглед изворни кода

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
Sravan Goud пре 5 година
родитељ
комит
fbe04282e0
2 измењених фајлова са 32 додато и 17 уклоњено
  1. 18 0
      dp/wifi3.0/dp_rx.h
  2. 14 17
      dp/wifi3.0/dp_rx_err.c

+ 18 - 0
dp/wifi3.0/dp_rx.h

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

+ 14 - 17
dp/wifi3.0/dp_rx_err.c

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