Re-enable interrupts after a channel change failure, since
ath_complete_reset will not be called. Also schedule a reset as a
best effort method to recover the chip from whatever state caused the
channel change failure.
Signed-off-by: Robert Shade <[email protected]>
---
drivers/net/wireless/ath/ath9k/main.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/main.c
b/drivers/net/wireless/ath/ath9k/main.c
index 24650fd..0567ac9 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -280,6 +280,12 @@ static int ath_reset_internal(struct ath_softc
*sc, struct ath9k_channel *hchan)
if (r) {
ath_err(common,
"Unable to reset channel, reset status %d\n", r);
+
+ ath9k_hw_set_interrupts(ah);
+ ath9k_hw_enable_interrupts(ah);
+
+ ath9k_queue_reset(sc, RESET_TYPE_BB_HANG);
+
goto out;
}
--
1.7.1
You filed a bug against this, right? Can you mention the bug report in there?
(What's the "blessed" way to mention a bugzilla.kernel.org bug in a
linux git commit?)
adrian
On 1 April 2013 07:22, Robert Shade <[email protected]> wrote:
> Re-enable interrupts after a channel change failure, since
> ath_complete_reset will not be called. Also schedule a reset as a
> best effort method to recover the chip from whatever state caused the
> channel change failure.
>
> Signed-off-by: Robert Shade <[email protected]>
> ---
> drivers/net/wireless/ath/ath9k/main.c | 6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/main.c
> b/drivers/net/wireless/ath/ath9k/main.c
> index 24650fd..0567ac9 100644
> --- a/drivers/net/wireless/ath/ath9k/main.c
> +++ b/drivers/net/wireless/ath/ath9k/main.c
> @@ -280,6 +280,12 @@ static int ath_reset_internal(struct ath_softc
> *sc, struct ath9k_channel *hchan)
> if (r) {
> ath_err(common,
> "Unable to reset channel, reset status %d\n", r);
> +
> + ath9k_hw_set_interrupts(ah);
> + ath9k_hw_enable_interrupts(ah);
> +
> + ath9k_queue_reset(sc, RESET_TYPE_BB_HANG);
> +
> goto out;
> }
>
> --
> 1.7.1
On 2013-04-01 4:22 PM, Robert Shade wrote:
> Re-enable interrupts after a channel change failure, since
> ath_complete_reset will not be called. Also schedule a reset as a
> best effort method to recover the chip from whatever state caused the
> channel change failure.
>
> Signed-off-by: Robert Shade <[email protected]>
Your patch is badly whitespace damaged.
> ---
> drivers/net/wireless/ath/ath9k/main.c | 6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/main.c
> b/drivers/net/wireless/ath/ath9k/main.c
> index 24650fd..0567ac9 100644
> --- a/drivers/net/wireless/ath/ath9k/main.c
> +++ b/drivers/net/wireless/ath/ath9k/main.c
> @@ -280,6 +280,12 @@ static int ath_reset_internal(struct ath_softc
> *sc, struct ath9k_channel *hchan)
> if (r) {
> ath_err(common,
> "Unable to reset channel, reset status %d\n", r);
> +
> + ath9k_hw_set_interrupts(ah);
Why the call to ath9k_hw_set_interrupts here?
> + ath9k_hw_enable_interrupts(ah);
> +
> + ath9k_queue_reset(sc, RESET_TYPE_BB_HANG);
> +
> goto out;
> }
On Mon, Apr 1, 2013 at 1:40 PM, Felix Fietkau <[email protected]> wrote:
> Your patch is badly whitespace damaged.
Ouch, must be the gmail web client. I'll resubmit a fixed one.
> Why the call to ath9k_hw_set_interrupts here?
Simply because that's what ath_complete_reset does
On Mon, Apr 01, 2013 at 09:25:43AM -0700, Adrian Chadd wrote:
> You filed a bug against this, right? Can you mention the bug report in there?
>
> (What's the "blessed" way to mention a bugzilla.kernel.org bug in a
> linux git commit?)
I usually just include the URL. "Fixes Bug #12345" would suffice as well.
--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.
On 2013-04-02 2:03 PM, Robert Shade wrote:
> On Mon, Apr 1, 2013 at 1:40 PM, Felix Fietkau <[email protected]> wrote:
>> Your patch is badly whitespace damaged.
>
> Ouch, must be the gmail web client. I'll resubmit a fixed one.
>
>> Why the call to ath9k_hw_set_interrupts here?
>
> Simply because that's what ath_complete_reset does
OK. You can leave it out, because it's not required for
interrupt-disable refcounting, and it will be called again after a
successful reset.
- Felix