On 4/29/2024 12:36 AM, Tamizh Chelvam Raja wrote: > From: Venkateswara Naralasetty <quic_vnaralas@xxxxxxxxxxx> > > If STATUS_BUFFER_DONE is not set for a monitor status ring entry, > we don't process the status ring until STATUS_BUFFER_DONE set > for that status ring entry. > > During LMAC reset it may happen that hardware will not write > STATUS_BUFFER_DONE tlv in status buffer, in that case we end up > waiting for STATUS_BUFFER_DONE leading to backpressure on monitor > status ring. > > To fix the issue, when HP(Head Pointer) + 1 entry is peeked and if DMA > is not done and if HP + 2 entry's DMA done is set, > replenish HP + 1 entry and start processing in next interrupt. > If HP + 2 entry's DMA done is not set, poll onto HP + 1 entry DMA > done to be set. > > Also, during monitor attach HP points to the end of the ring and > TP(Tail Pointer) points to the start of the ring. > Using ath11k_hal_srng_src_peek() may result in processing invalid buffer > for the very first interrupt. Since, HW starts writing buffer from TP. > > To avoid this issue call ath11k_hal_srng_src_next_peek() instead of > calling ath11k_hal_srng_src_peek(). > > Tested-on: IPQ5018 hw1.0 AHB WLAN.HK.2.6.0.1-00861-QCAHKSWPL_SILICONZ-1 > > Signed-off-by: Venkateswara Naralasetty <quic_vnaralas@xxxxxxxxxxx> > Co-developed-by: Tamizh Chelvam Raja <quic_tamizhr@xxxxxxxxxxx> > Signed-off-by: Tamizh Chelvam Raja <quic_tamizhr@xxxxxxxxxxx> Acked-by: Jeff Johnson <quic_jjohnson@xxxxxxxxxxx> however note... > + > + /* If done status is missing: > + * 1. As per MAC team's suggestion, > + * when HP + 1 entry is peeked and if DMA > + * is not done and if HP + 2 entry's DMA done > + * is set. skip HP + 1 entry and > + * start processing in next interrupt. > + * 2. If HP + 2 entry's DMA done is not set, > + * poll onto HP + 1 entry DMA done to be set. > + * Check status for same buffer for next time > + * dp_rx_mon_status_srng_process > + */ > + > + reap_status = ath11k_dp_rx_mon_handle_status_buf_done(ab, srng, > + rx_ring); ath11k-check reports: drivers/net/wireless/ath/ath11k/dp_rx.c:3116: line length of 95 exceeds 90 columns drivers/net/wireless/ath/ath11k/dp_rx.c:3117: line length of 95 exceeds 90 columns Kalle, in this case we may want to make an exception since I don't think there is a clean way to fix this other than refactoring. FWIW I'd like to see this function refactored to avoid the excessive indentation, but that should be a separate exercise. /jeff