Browse Source

qcacmn: Skip updating OOR/2K jump BAR frames to H.W

Currently error BAR frames are routed to host, but host
doesn't have complete information to check whether these
frames are valid and really action need to be taken or not.
If host updates H.W without validating SSN it is causing
window movement and REO HW aging timeout happening for
next set of RX packets and delay is induced.

To avoid RX packets delay skipping BAR update to H.W

Change-Id: I92c1614993b6985218a453fe528fbd274fab254f
CRs-Fixed: 2995461
Karthik Kantamneni 3 years ago
parent
commit
663626d52d
1 changed files with 8 additions and 34 deletions
  1. 8 34
      dp/wifi3.0/dp_rx_err.c

+ 8 - 34
dp/wifi3.0/dp_rx_err.c

@@ -546,40 +546,16 @@ dp_rx_err_nbuf_pn_check(struct dp_soc *soc, hal_ring_desc_t ring_desc,
 	return QDF_STATUS_E_FAILURE;
 	return QDF_STATUS_E_FAILURE;
 }
 }
 
 
-#ifdef WLAN_VENDOR_SPECIFIC_BAR_UPDATE
-/**
- * dp_rx_skip_bar_frame() - Check whether BAR update need to be skipped
- *
- * @vdev: vdev reference
- *
- * Function to check whether BAR update need to be skipped
- *
- * Return: none
- */
-static bool dp_rx_skip_bar_frame(struct dp_vdev *vdev)
+#ifdef WLAN_SKIP_BAR_UPDATE
+static
+void dp_rx_err_handle_bar(struct dp_soc *soc,
+			  struct dp_peer *peer,
+			  qdf_nbuf_t nbuf)
 {
 {
-	unsigned long cur_ts, prev_ts;
-
-	if (vdev->skip_bar_update) {
-		prev_ts = vdev->skip_bar_update_last_ts;
-		cur_ts = qdf_get_system_timestamp();
-		vdev->skip_bar_update_last_ts = cur_ts;
-		if ((cur_ts - prev_ts) < DP_SKIP_BAR_UPDATE_TIMEOUT) {
-			dp_info_rl("Skipping BAR update for vdev_id:%u",
-				   vdev->vdev_id);
-			return true;
-		}
-	}
-
-	return false;
+	dp_info_rl("BAR update to H.W is skipped");
+	DP_STATS_INC(soc, rx.err.bar_handle_fail_count, 1);
 }
 }
 #else
 #else
-static bool dp_rx_skip_bar_frame(struct dp_vdev *vdev)
-{
-	return false;
-}
-#endif
-
 static
 static
 void dp_rx_err_handle_bar(struct dp_soc *soc,
 void dp_rx_err_handle_bar(struct dp_soc *soc,
 			  struct dp_peer *peer,
 			  struct dp_peer *peer,
@@ -592,9 +568,6 @@ void dp_rx_err_handle_bar(struct dp_soc *soc,
 	QDF_STATUS status;
 	QDF_STATUS status;
 	struct ieee80211_frame_bar *bar;
 	struct ieee80211_frame_bar *bar;
 
 
-	if (dp_rx_skip_bar_frame(peer->vdev))
-		return;
-
 	/*
 	/*
 	 * 1. Is this a BAR frame. If not Discard it.
 	 * 1. Is this a BAR frame. If not Discard it.
 	 * 2. If it is, get the peer id, tid, ssn
 	 * 2. If it is, get the peer id, tid, ssn
@@ -632,6 +605,7 @@ void dp_rx_err_handle_bar(struct dp_soc *soc,
 		DP_STATS_INC(soc, rx.err.ssn_update_count, 1);
 		DP_STATS_INC(soc, rx.err.ssn_update_count, 1);
 	}
 	}
 }
 }
+#endif
 
 
 /**
 /**
  * _dp_rx_bar_frame_handle(): Core of the BAR frame handling
  * _dp_rx_bar_frame_handle(): Core of the BAR frame handling