2012-06-12 14:49:04

by Mohammed Shafi Shajakhan

[permalink] [raw]
Subject: [PATCH] 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

Reported-by: Rolf Offermanns <[email protected]>
Cc: [email protected]
Tested-by: Mohammed Shafi Shajakhan <[email protected]>
Signed-off-by: Mohammed Shafi Shajakhan <[email protected]>
---
drivers/net/wireless/ath/ath9k/link.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/link.c b/drivers/net/wireless/ath/ath9k/link.c
index 0cc4c70..a105c94 100644
--- a/drivers/net/wireless/ath/ath9k/link.c
+++ b/drivers/net/wireless/ath/ath9k/link.c
@@ -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



2012-06-12 19:48:07

by John W. Linville

[permalink] [raw]
Subject: Re: [PATCH] ath9k: Fix softlockup in AR9485

Do you have a version that applies to 3.5 and earlier?

On Tue, Jun 12, 2012 at 08:13:43PM +0530, Mohammed Shafi Shajakhan wrote:
> 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
>
> Reported-by: Rolf Offermanns <[email protected]>
> Cc: [email protected]
> Tested-by: Mohammed Shafi Shajakhan <[email protected]>
> Signed-off-by: Mohammed Shafi Shajakhan <[email protected]>
> ---
> drivers/net/wireless/ath/ath9k/link.c | 8 ++++++++
> 1 files changed, 8 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/link.c b/drivers/net/wireless/ath/ath9k/link.c
> index 0cc4c70..a105c94 100644
> --- a/drivers/net/wireless/ath/ath9k/link.c
> +++ b/drivers/net/wireless/ath/ath9k/link.c
> @@ -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
>
>

--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.

2012-06-13 04:43:48

by Mohammed Shafi Shajakhan

[permalink] [raw]
Subject: Re: [PATCH] ath9k: Fix softlockup in AR9485

Hi John,

On Wednesday 13 June 2012 01:14 AM, John W. Linville wrote:
> Do you have a version that applies to 3.5 and earlier?

thanks, will soon send a back ported version for 3.5. thanks.

>
> On Tue, Jun 12, 2012 at 08:13:43PM +0530, Mohammed Shafi Shajakhan wrote:
>> 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
>>
>> Reported-by: Rolf Offermanns<[email protected]>
>> Cc: [email protected]
>> Tested-by: Mohammed Shafi Shajakhan<[email protected]>
>> Signed-off-by: Mohammed Shafi Shajakhan<[email protected]>
>> ---
>> drivers/net/wireless/ath/ath9k/link.c | 8 ++++++++
>> 1 files changed, 8 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath9k/link.c b/drivers/net/wireless/ath/ath9k/link.c
>> index 0cc4c70..a105c94 100644
>> --- a/drivers/net/wireless/ath/ath9k/link.c
>> +++ b/drivers/net/wireless/ath/ath9k/link.c
>> @@ -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
>>
>>
>


--
thanks,
shafi

2012-06-14 04:48:49

by Mohammed Shafi

[permalink] [raw]
Subject: Re: [PATCH] ath9k: Fix softlockup in AR9485

Hi,

On Wed, Jun 13, 2012 at 1:14 AM, John W. Linville
<[email protected]> wrote:
> 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

>
> On Tue, Jun 12, 2012 at 08:13:43PM +0530, Mohammed Shafi Shajakhan wrote:
>> 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
>>
>> Reported-by: Rolf Offermanns <[email protected]>
>> Cc: [email protected]
>> Tested-by: Mohammed Shafi Shajakhan <[email protected]>
>> Signed-off-by: Mohammed Shafi Shajakhan <[email protected]>
>> ---
>> ?drivers/net/wireless/ath/ath9k/link.c | ? ?8 ++++++++
>> ?1 files changed, 8 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath9k/link.c b/drivers/net/wireless/ath/ath9k/link.c
>> index 0cc4c70..a105c94 100644
>> --- a/drivers/net/wireless/ath/ath9k/link.c
>> +++ b/drivers/net/wireless/ath/ath9k/link.c
>> @@ -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
>>
>>
>
> --
> John W. Linville ? ? ? ? ? ? ? ?Someday the world will need a hero, and you
> [email protected] ? ? ? ? ? ? ? ? ?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 [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html



--
thanks,
shafi