ath9k: Fix softlockup in AR9485
PATCH 1/1 ath9k: Fix softlockup in AR9485
From: Mohammed Shafi Shajakhan <[email protected]>
steps to recreate:
load latest ath9k driver with AR9485
stop the network-manager and wpa_supplicant
bring the interface up
Call Trace: [<ffffffffa0517490>] ? ath_hw_check+0xe0/0xe0 [ath9k] [<ffffffff812cd1e8>] __const_udelay+0x28/0x30 [<ffffffffa03bae7a>] ar9003_get_pll_sqsum_dvc+0x4a/0x80 [ath9k_hw] [<ffffffffa05174eb>] ath_hw_pll_work+0x5b/0xe0 [ath9k] [<ffffffff810744fe>] process_one_work+0x11e/0x470 [<ffffffff8107530f>] worker_thread+0x15f/0x360 [<ffffffff810751b0>] ? manage_workers+0x230/0x230 [<ffffffff81079af3>] kthread+0x93/0xa0 [<ffffffff815fd3a4>] kernel_thread_helper+0x4/0x10 [<ffffffff81079a60>] ? kthread_freezable_should_stop+0x70/0x70 [<ffffffff815fd3a0>] ? gs_change+0x13/0x13
ensure that the PLL-WAR for AR9485/AR9340 is executed only if the STA is associated (or) IBSS/AP mode had started beaconing. Ideally this WAR is needed to recover from some rare beacon stuck during stress testing. Before the STA is associated/IBSS had started beaconing, PLL4(0x1618c) always seem to have zero even though we had configured PLL3(0x16188) to query about PLL's locking status. When we keep on polling infinitely PLL4's 8th bit(ie check for PLL locking measurements is done), machine hangs due to softlockup.
fixes https://bugzilla.redhat.com/show_bug.cgi?id=811142
--- drivers/net/wireless/ath/ath9k/link.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
drivers/net/wireless/ath/ath9k/link.c +8 -0
@@ -136,6 +136,14 @@ void ath_hw_pll_work(struct work_struct *work)u32 pll_sqsum; struct ath_softc *sc = container_of(work, struct ath_softc, hw_pll_work.work); +/* +* ensure that the PLL WAR is executed only +* after the STA is associated (or) if the +* beaconing had started in interfaces that +* uses beacons. +*/ +if (!test_bit (SC_OP_BEACONS , &sc->sc_flags)) +return ;ath9k_ps_wakeup (sc); pll_sqsum =ar9003_get_pll_sqsum_dvc (sc->sc_ah);
Signature · 1 line
1.7.0.4
PATCH 1/1 ath9k: Fix softlockup in AR9485
Do you have a version that applies to 3.5 and earlier?
Quoted 62 lines · Mohammed Shafi Shajakhan
From: Mohammed Shafi Shajakhan <[email protected]>
steps to recreate:
load latest ath9k driver with AR9485
stop the network-manager andwpa_supplicant
bring the interface upCall Trace: [<ffffffffa0517490>] ? ath_hw_check+0xe0/0xe0 [ath9k] [<ffffffff812cd1e8>] __const_udelay+0x28/0x30 [<ffffffffa03bae7a>] ar9003_get_pll_sqsum_dvc+0x4a/0x80 [ath9k_hw] [<ffffffffa05174eb>] ath_hw_pll_work+0x5b/0xe0 [ath9k] [<ffffffff810744fe>] process_one_work+0x11e/0x470 [<ffffffff8107530f>] worker_thread+0x15f/0x360 [<ffffffff810751b0>] ? manage_workers+0x230/0x230 [<ffffffff81079af3>] kthread+0x93/0xa0 [<ffffffff815fd3a4>] kernel_thread_helper+0x4/0x10 [<ffffffff81079a60>] ? kthread_freezable_should_stop+0x70/0x70 [<ffffffff815fd3a0>] ? gs_change+0x13/0x13ensure that the PLL-WAR for AR9485/AR9340 is executed only if the STA is associated (or) IBSS/AP mode had started beaconing. Ideally this WAR is needed to recover from some rare beacon stuck during stress testing. Before the STA is associated/IBSS had started beaconing, PLL4(0x1618c) always seem to have zero even though we had configured PLL3(0x16188) to query about PLL's locking status. When we keep on polling infinitely PLL4's 8th bit(ie check for PLL locking measurements is done), machine hangs due to softlockup.
fixes https://bugzilla.redhat.com/show_bug.cgi?id=811142
Reported-by Rolf Offermanns <[email protected]>Cc stable at vger.kernel.orgSigned-off-by Mohammed Shafi Shajakhan <[email protected]>--- drivers/net/wireless/ath/ath9k/link.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)drivers/net/wireless/ath/ath9k/link.c +8
-0@@ -136,6 +136,14 @@ void ath_hw_pll_work(struct work_struct *work)u32 pll_sqsum; struct ath_softc *sc = container_of(work, struct ath_softc, hw_pll_work.work); +/* +* ensure that the PLL WAR is executed only +* after the STA is associated (or) if the +* beaconing had started in interfaces that +* uses beacons. +*/ +if (!test_bit (SC_OP_BEACONS , &sc->sc_flags)) +return ;ath9k_ps_wakeup (sc); pll_sqsum =ar9003_get_pll_sqsum_dvc (sc->sc_ah);Signature · 1 line
1.7.0.4
Signature · 2 lines
John W. Linville Someday the world will need a hero, and you linville at tuxdriver.com might be all we have. Be ready.
PATCH 1/1 ath9k: Fix softlockup in AR9485
Hi John,
Quoted 1 line · John W. Linville
Do you have a version that applies to 3.5 and earlier?
thanks, will soon send a back ported version for 3.5. thanks.
Quoted 65 lines · Mohammed Shafi Shajakhan
Quoted 62 lines
From: Mohammed Shafi Shajakhan<[email protected]>
steps to recreate:
load latest ath9k driver with AR9485
stop the network-manager andwpa_supplicant
bring the interface upCall Trace: [<ffffffffa0517490>] ? ath_hw_check+0xe0/0xe0 [ath9k] [<ffffffff812cd1e8>] __const_udelay+0x28/0x30 [<ffffffffa03bae7a>] ar9003_get_pll_sqsum_dvc+0x4a/0x80 [ath9k_hw] [<ffffffffa05174eb>] ath_hw_pll_work+0x5b/0xe0 [ath9k] [<ffffffff810744fe>] process_one_work+0x11e/0x470 [<ffffffff8107530f>] worker_thread+0x15f/0x360 [<ffffffff810751b0>] ? manage_workers+0x230/0x230 [<ffffffff81079af3>] kthread+0x93/0xa0 [<ffffffff815fd3a4>] kernel_thread_helper+0x4/0x10 [<ffffffff81079a60>] ? kthread_freezable_should_stop+0x70/0x70 [<ffffffff815fd3a0>] ? gs_change+0x13/0x13ensure that the PLL-WAR for AR9485/AR9340 is executed only if the STA is associated (or) IBSS/AP mode had started beaconing. Ideally this WAR is needed to recover from some rare beacon stuck during stress testing. Before the STA is associated/IBSS had started beaconing, PLL4(0x1618c) always seem to have zero even though we had configured PLL3(0x16188) to query about PLL's locking status. When we keep on polling infinitely PLL4's 8th bit(ie check for PLL locking measurements is done), machine hangs due to softlockup.
fixes https://bugzilla.redhat.com/show_bug.cgi?id=811142
Reported-by Rolf Offermanns<[email protected]>Cc stable at vger.kernel.orgSigned-off-by Mohammed Shafi Shajakhan<[email protected]>--- drivers/net/wireless/ath/ath9k/link.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)drivers/net/wireless/ath/ath9k/link.c +8
-1@@ -136,6 +136,14 @@ void ath_hw_pll_work(struct work_struct *work)u32 pll_sqsum; struct ath_softc *sc = container_of(work, struct ath_softc, hw_pll_work.work); +/* +* ensure that the PLL WAR is executed only +* after the STA is associated (or) if the +* beaconing had started in interfaces that +* uses beacons. +*/ +if (!test_bit (SC_OP_BEACONS ,&sc->sc_flags)) +return ;ath9k_ps_wakeup (sc); pll_sqsum =ar9003_get_pll_sqsum_dvc (sc->sc_ah); --1.7.0.4
Signature · 2 lines
thanks, shafi
PATCH 1/1 ath9k: Fix softlockup in AR9485
In reply to John W. LinvilleHi,
Quoted 1 line · John W. Linville
Do you have a version that applies to 3.5 and earlier?
the back ported version of this patch
http://www.spinics.net/lists/linux-wireless/msg92125.html
Quoted 72 lines · Mohammed Shafi Shajakhan
Quoted 59 lines
From: Mohammed Shafi Shajakhan <[email protected]>
steps to recreate:
load latest ath9k driver with AR9485
stop the network-manager andwpa_supplicant
bring the interface up? ? ? Call Trace:
? ? ? [<ffffffffa0517490>] ?ath_hw_check+0xe0/0xe0[ath9k] ? ? ? [<ffffffff812cd1e8>]__const_udelay+0x28/0x30
? ? ? [<ffffffffa03bae7a>]ar9003_get_pll_sqsum_dvc+0x4a/0x80[ath9k_hw] ? ? ? [<ffffffffa05174eb>]ath_hw_pll_work+0x5b/0xe0[ath9k] ? ? ? [<ffffffff810744fe>]process_one_work+0x11e/0x470
? ? ? [<ffffffff8107530f>]worker_thread+0x15f/0x360
? ? ? [<ffffffff810751b0>] ?manage_workers+0x230/0x230
? ? ? [<ffffffff81079af3>]kthread+0x93/0xa0
? ? ? [<ffffffff815fd3a4>]kernel_thread_helper+0x4/0x10
? ? ? [<ffffffff81079a60>] ?kthread_freezable_should_stop+0x70/0x70? ? ? [<ffffffff815fd3a0>] ?gs_change+0x13/0x13ensure that the PLL-WAR for AR9485/AR9340 is executed only if the STA is associated (or) IBSS/AP mode had started beaconing. Ideally this WAR is needed to recover from some rare beacon stuck during stress testing. Before the STA is associated/IBSS had started beaconing, PLL4(0x1618c) always seem to have zero even though we had configured PLL3(0x16188) to query about PLL's locking status. When we keep on polling infinitely PLL4's 8th bit(ie check for PLL locking measurements is done), machine hangs due to softlockup.
fixes https://bugzilla.redhat.com/show_bug.cgi?id=811142
Reported-by Rolf Offermanns <[email protected]>Cc stable at vger.kernel.orgSigned-off-by Mohammed Shafi Shajakhan <[email protected]>---
?drivers/net/wireless/ath/ath9k/link.c | ? ?8 ++++++++ ?1 files changed, 8 insertions(+), 0 deletions(-)drivers/net/wireless/ath/ath9k/link.c +8
-1@@ -136,6 +136,14 @@ void ath_hw_pll_work(struct work_struct *work) ? ? ? u32 pll_sqsum; ? ? ? struct ath_softc *sc = container_of(work, struct ath_softc, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? hw_pll_work.work); + ? ? /* + ? ? ?* ensure that the PLL WAR is executed only + ? ? ?* after the STA is associated (or) if the + ? ? ?* beaconing had started in interfaces that + ? ? ?* uses beacons. + ? ? ?*/ + ? ? if (!test_bit(SC_OP_BEACONS, &sc->sc_flags)) + ? ? ? ? ? ? return; ? ? ? ath9k_ps_wakeup(sc); ? ? ? pll_sqsum = ar9003_get_pll_sqsum_dvc(sc->sc_ah); --Quoted 3 lines
1.7.0.4
--
John W. Linville ? ? ? ? ? ? ? ?Someday the world will need a hero, and you linville at tuxdriver.com ? ? ? ? ? ? ? ? ?might be all we have. ?Be ready. --
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo at vger.kernel.org
More majordomo info at ?http://vger.kernel.org/majordomo-info.html
Signature · 2 lines
thanks, shafi