Upstream ath11k and ath12k patch for fixing wrong AMPDU from being stopped

I have read on Phoronix that there is an upstream patch being merged into 7.0-rc7 that will fix an issue with all ath11k and ath12k supported devices where they were stopping the wrong AMPDU session some of the time when another station requests it.

The issue appears to be that they were passing the wrong peer reference after waiting for a short time in a spinlock.

This post is just for making people here aware and asking what is the possiblity to backport this as the patches are just a few lines?

1 Like

I see it already in ath11k ... using snapshot

int ath11k_peer_rx_tid_setup(struct ath11k *ar, const u8 *peer_mac, int vdev_id,
			     u8 tid, u32 ba_win_sz, u16 ssn,
			     enum hal_pn_type pn_type)
{
	struct ath11k_base *ab = ar->ab;
	struct ath11k_peer *peer;
	struct dp_rx_tid *rx_tid;
	u32 hw_desc_sz, *vaddr;
	void *vaddr_unaligned;
	dma_addr_t paddr;
	int ret;
...

I don’t find anything that resembles this patch in the OpenWrt repo.

its in the snapshots ...mine anyway

DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='SNAPSHOT'
DISTRIB_REVISION='r33352+1-ed70a07d15'
DISTRIB_TARGET='qualcommax/ipq50xx'
DISTRIB_ARCH='aarch64_cortex-a53'
DISTRIB_DESCRIPTION='OpenWrt SNAPSHOT r33352+1-ed70a07d15'
DISTRIB_TAINTS='no-all'

i didn't put it there :slight_smile:

But the code you posted isn’t from the patch for ath11k.

1 Like

yep, you are correct ... morning search err.

int ath11k_dp_rx_ampdu_stop(struct ath11k *ar,
			    struct ieee80211_ampdu_params *params)
{
	struct ath11k_base *ab = ar->ab;
	struct ath11k_peer *peer;
	struct ath11k_sta *arsta = ath11k_sta_to_arsta(params->sta);
	int vdev_id = arsta->arvif->vdev_id;
	dma_addr_t paddr;
	bool active;
	int ret;

guess i better try it out :slight_smile:

EDIT

it applies cleanly to ed70a07d15

1 Like