From: Peter Seiderer <hidden> Date: 2021-11-16 22:07:32
The struct ath_hw member intr_txqs is never reset/assigned outside
of ath9k_hw_init_queues() and with the used bitwise-or in the interrupt
handling ar9002_hw_get_isr() accumulates all ever set interrupt flags.
Fix this by using a pure assign instead of bitwise-or for the
first line (note: intr_txqs is only evaluated in case ATH9K_INT_TX bit
is set).
Signed-off-by: Peter Seiderer <redacted>
---
Note:
- the ath5k_hw member ah_txq_isr_txok_all in ath5k_hw_get_isr()
(see drivers/net/wireless/ath/ath5k/dma.c) sufferes from the
same problem and can be fixed by an assignment to zero before
furhter usage (but I lack suitable hardware for testing)
---
drivers/net/wireless/ath/ath9k/ar9002_mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Kalle Valo <hidden> Date: 2021-11-17 08:47:44
Peter Seiderer [off-list ref] wrote:
The struct ath_hw member intr_txqs is never reset/assigned outside
of ath9k_hw_init_queues() and with the used bitwise-or in the interrupt
handling ar9002_hw_get_isr() accumulates all ever set interrupt flags.
Fix this by using a pure assign instead of bitwise-or for the
first line (note: intr_txqs is only evaluated in case ATH9K_INT_TX bit
is set).
Signed-off-by: Peter Seiderer <redacted>
Signed-off-by: Kalle Valo <redacted>
From: Peter Seiderer <hidden> Date: 2021-11-17 19:07:20
Hello Kalle,
On Wed, 17 Nov 2021 08:47:40 +0000 (UTC), Kalle Valo [off-list ref] wrote:
Peter Seiderer [off-list ref] wrote:
quoted
The struct ath_hw member intr_txqs is never reset/assigned outside
of ath9k_hw_init_queues() and with the used bitwise-or in the interrupt
handling ar9002_hw_get_isr() accumulates all ever set interrupt flags.
Fix this by using a pure assign instead of bitwise-or for the
first line (note: intr_txqs is only evaluated in case ATH9K_INT_TX bit
is set).
Signed-off-by: Peter Seiderer <redacted>
Signed-off-by: Kalle Valo <redacted>
How did you test this? I'm getting way too many ath9k patches which have not
been tested on a real device.
Did test it with an Compex WLE200NX 7A card (AR9280) running IBSS mode
against one older (madwifi) and one newer (ath10k) Atheros card using
ping and iperf traffic (investigating some performance degradation
compared to two older cards...., but getting better with the latest
rc80211_minstrel/rc80211_minstrel_ht changes), checked via printk
debugging intr_txqs is not cleared when entering ar9002_hw_get_isr(),
and checked wifi is still working after the change...., can provide more
info and/or debug traces if needed...
Regards,
Peter
From: Kalle Valo <hidden> Date: 2021-11-19 08:07:51
Peter Seiderer [off-list ref] wrote:
The struct ath_hw member intr_txqs is never reset/assigned outside
of ath9k_hw_init_queues() and with the used bitwise-or in the interrupt
handling ar9002_hw_get_isr() accumulates all ever set interrupt flags.
Fix this by using a pure assign instead of bitwise-or for the
first line (note: intr_txqs is only evaluated in case ATH9K_INT_TX bit
is set).
Signed-off-by: Peter Seiderer <redacted>
Signed-off-by: Kalle Valo <redacted>