Skip to contentSkip to conversation

ath9k: Fix softlockup in AR9485

PATCH New Mohammed Shafi Shajakhan 3 participants 4 messages Jun 12, 2012 – Jun 14, 2012 Qualcomm Atheros ATH9K wireless driver

lore
Share & tools
lore
#0 lore raw

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
index 0cc4c70..a105c94 100644
@@ -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
#1 lore raw

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 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
index 0cc4c70..a105c94 100644
@@ -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.
#2 lore raw

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 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 -1
index 0cc4c70..a105c94 100644
@@ -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
#3 lore raw

PATCH 1/1 ath9k: Fix softlockup in AR9485

In reply to John W. Linville

Hi,

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 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 -1
index 0cc4c70..a105c94 100644
@@ -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