Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fb54e2e authored by Jinwei Chen's avatar Jinwei Chen Committed by Madan Koyyalamudi
Browse files

qcacmn: Deliver EAP frames to stack from REO exception path

Revert "qcacmn: drop duplicated EAP frames from REO exception path",
allow all EAP frame delivering to stack including retried ones.

Change-Id: I73733841c1feb21d5b5fd160856a8fe9c21168fc
CRs-Fixed: 2959701
parent 01cf133e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3536,6 +3536,8 @@ bool dp_rx_deliver_special_frame(struct dp_soc *soc, struct dp_peer *peer,
	qdf_nbuf_pull_head(nbuf, skip_len);

	if (dp_rx_is_special_frame(nbuf, frame_mask)) {
		dp_info("special frame, mpdu sn 0x%x",
			hal_rx_get_rx_sequence(soc->hal_soc, rx_tlv_hdr));
		qdf_nbuf_set_exc_frame(nbuf, 1);
		dp_rx_deliver_to_stack(soc, peer->vdev, peer,
				       nbuf, NULL);
+17 −35
Original line number Diff line number Diff line
@@ -462,10 +462,8 @@ dp_rx_pn_error_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
 *
 * @soc: core txrx main context
 * @nbuf: pointer to msdu skb
 * @rx_tlv_hdr: start of rx tlv header
 * @mpdu_desc_info: pointer to mpdu level description info
 * @peer_id: dp peer ID
 * @tid: dp tid
 * @rx_tlv_hdr: start of rx tlv header
 *
 * This function process the msdu delivered from REO2TCL
 * ring with error type OOR
@@ -475,34 +473,19 @@ dp_rx_pn_error_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
static void
dp_rx_oor_handle(struct dp_soc *soc,
		 qdf_nbuf_t nbuf,
		 uint8_t *rx_tlv_hdr,
		 struct hal_rx_mpdu_desc_info *mpdu_desc_info,
		 uint16_t peer_id,
		 uint8_t tid)
		 uint8_t *rx_tlv_hdr)
{
	uint32_t frame_mask = FRAME_MASK_IPV4_ARP | FRAME_MASK_IPV4_DHCP |
				FRAME_MASK_IPV4_EAPOL | FRAME_MASK_IPV6_DHCP;
	struct dp_peer *peer = NULL;

	peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_RX_ERR);
	if (!peer || tid >= DP_MAX_TIDS) {
		dp_info_rl("peer or tid %d not valid", tid);
	if (!peer) {
		dp_info_rl("peer not found");
		goto free_nbuf;
	}

	/*
	 * For REO error 7 OOR, if it is retry frame under BA session,
	 * then it is likely SN duplicated frame, do not deliver EAPOL
	 * to stack in this case since the connection might fail due to
	 * duplicated EAP response.
	 */
	if (mpdu_desc_info &&
	    mpdu_desc_info->mpdu_flags & HAL_MPDU_F_RETRY_BIT &&
	    peer->rx_tid[tid].ba_status == DP_RX_BA_ACTIVE) {
		frame_mask &= ~FRAME_MASK_IPV4_EAPOL;
		DP_STATS_INC(soc, rx.err.reo_err_oor_eapol_drop, 1);
	}

	if (dp_rx_deliver_special_frame(soc, peer, nbuf, frame_mask,
					rx_tlv_hdr)) {
		DP_STATS_INC(soc, rx.err.reo_err_oor_to_stack, 1);
@@ -623,24 +606,24 @@ dp_rx_reo_err_entry_process(struct dp_soc *soc,
			DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1);
		}

		switch (err_code) {
		case HAL_REO_ERR_REGULAR_FRAME_2K_JUMP:
			/*
			 * only first msdu, mpdu start description tlv valid?
			 * and use it for following msdu.
			 */
			if (hal_rx_msdu_end_first_msdu_get(soc->hal_soc,
							   rx_tlv_hdr_last))
			tid = hal_rx_mpdu_start_tid_get(soc->hal_soc,
				tid = hal_rx_mpdu_start_tid_get(
							soc->hal_soc,
							rx_tlv_hdr_first);

		switch (err_code) {
		case HAL_REO_ERR_REGULAR_FRAME_2K_JUMP:
			dp_2k_jump_handle(soc, nbuf, rx_tlv_hdr_last,
					  peer_id, tid);
			break;

		case HAL_REO_ERR_REGULAR_FRAME_OOR:
			dp_rx_oor_handle(soc, nbuf, rx_tlv_hdr_last,
					 mpdu_desc_info, peer_id, tid);
			dp_rx_oor_handle(soc, nbuf, peer_id, rx_tlv_hdr_last);
			break;
		default:
			dp_err_rl("Non-support error code %d", err_code);
@@ -2296,9 +2279,8 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
									       rx_tlv_hdr);
					nbuf->next = NULL;
					dp_rx_oor_handle(soc, nbuf,
							 rx_tlv_hdr,
							 NULL,
							 peer_id, tid);
							 peer_id,
							 rx_tlv_hdr);
					break;
				case HAL_REO_ERR_BAR_FRAME_2K_JUMP:
				case HAL_REO_ERR_BAR_FRAME_OOR:
+0 −5
Original line number Diff line number Diff line
@@ -6030,8 +6030,6 @@ void dp_txrx_path_stats(struct dp_soc *soc)
			       pdev->soc->stats.rx.err.reo_err_oor_to_stack);
		DP_PRINT_STATS("REO err oor msdu drop: %u",
			       pdev->soc->stats.rx.err.reo_err_oor_drop);
		DP_PRINT_STATS("REO err oor eapol drop: %u",
			       pdev->soc->stats.rx.err.reo_err_oor_eapol_drop);
		DP_PRINT_STATS("Rx err msdu rejected: %d",
			       soc->stats.rx.err.rejected);
		DP_PRINT_STATS("Rx raw frame dropped: %d",
@@ -6619,9 +6617,6 @@ dp_print_soc_rx_stats(struct dp_soc *soc)
	DP_PRINT_STATS("REO err oor msdu drop: %d",
		       soc->stats.rx.err.reo_err_oor_drop);

	DP_PRINT_STATS("REO err oor eapol drop: %d",
		       soc->stats.rx.err.reo_err_oor_eapol_drop);

	DP_PRINT_STATS("Rx err msdu rejected: %d",
		       soc->stats.rx.err.rejected);

+0 −2
Original line number Diff line number Diff line
@@ -1024,8 +1024,6 @@ struct dp_soc_stats {
			uint32_t nbuf_sanity_fail;
			/* Duplicate link desc refilled */
			uint32_t dup_refill_link_desc;
			/* REO OOR eapol drop count */
			uint32_t reo_err_oor_eapol_drop;
			/* count of start sequence (ssn) updates */
			uint32_t ssn_update_count;
			/* count of bar handling fail */