Browse Source

Merge "qca-wifi: CFR: Fix in flush pending DBR event logic"

Linux Build Service Account 5 years ago
parent
commit
613c9b89e8

+ 3 - 1
target_if/cfr/src/target_if_cfr_6018.c

@@ -158,7 +158,8 @@ void cfr_free_pending_dbr_events(struct wlan_objmgr_pdev *pdev)
 		if (!lut)
 			continue;
 
-		if (lut->dbr_recv && !lut->tx_recv) {
+		if (lut->dbr_recv && !lut->tx_recv &&
+		    (lut->dbr_tstamp < pcfr->last_success_tstamp)) {
 			target_if_dbr_buf_release(pdev, DBR_MODULE_CFR,
 						  lut->dbr_address,
 						  i, 0);
@@ -552,6 +553,7 @@ int correlate_and_relay_enh(struct wlan_objmgr_pdev *pdev, uint32_t cookie,
 	if ((lut->dbr_recv == true) && (lut->tx_recv == true)) {
 		if (lut->dbr_ppdu_id == lut->tx_ppdu_id) {
 
+			pcfr->last_success_tstamp = lut->dbr_tstamp;
 			if (lut->dbr_tstamp > lut->txrx_tstamp) {
 				diff = lut->dbr_tstamp - lut->txrx_tstamp;
 				cfr_debug("<CORRELATE><%u>: "

+ 3 - 0
umac/cfr/dispatcher/inc/wlan_cfr_utils_api.h

@@ -468,6 +468,8 @@ struct cfr_rcc_param {
  *	[5] - No. PPDUs filtered due to freeze_reason_ALL_PACKET
  * release_err_cnt: No. of lookup table entries freed due to invalid CFR data
  * length
+ * last_success_tstamp: DBR timestamp which indicates that both DBR and TX/RX
+ * events have been received successfully.
  */
 /*
  * To be extended if we get more capbality info
@@ -508,6 +510,7 @@ struct pdev_cfr {
 	uint64_t invalid_dma_length_cnt;
 	uint64_t flush_timeout_dbr_cnt;
 	uint64_t clear_txrx_event;
+	uint64_t last_success_tstamp;
 #endif
 	struct unassoc_pool_entry unassoc_pool[MAX_CFR_ENABLED_CLIENTS];
 };