2008-03-12 20:13:34

by Pavel Roskin

[permalink] [raw]
Subject: [PATCH] ath5k: disable irq handling in ath5k_hw_detach()

Once ah has been freed, it may not be accessed. Set ATH_STAT_INVALID
bit to make the interrupt handler return IRQ_NONE without accessing ah.

This fixes oops on unload with CONFIG_DEBUG_SHIRQ enabled.

Signed-off-by: Pavel Roskin <[email protected]>
---

drivers/net/wireless/ath5k/hw.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)


diff --git a/drivers/net/wireless/ath5k/hw.c b/drivers/net/wireless/ath5k/hw.c
index 677600b..ff579a2 100644
--- a/drivers/net/wireless/ath5k/hw.c
+++ b/drivers/net/wireless/ath5k/hw.c
@@ -458,6 +458,8 @@ void ath5k_hw_detach(struct ath5k_hw *ah)
{
ATH5K_TRACE(ah->ah_sc);

+ __set_bit(ATH_STAT_INVALID, ah->ah_sc->status);
+
if (ah->ah_rf_banks != NULL)
kfree(ah->ah_rf_banks);


--
Regards,
Pavel Roskin


2008-03-12 21:15:44

by Nick Kossifidis

[permalink] [raw]
Subject: Re: [ath5k-devel] [PATCH] ath5k: disable irq handling in ath5k_hw_detach()

2008/3/12, Pavel Roskin <[email protected]>:
> Once ah has been freed, it may not be accessed. Set ATH_STAT_INVALID
> bit to make the interrupt handler return IRQ_NONE without accessing ah.
>
> This fixes oops on unload with CONFIG_DEBUG_SHIRQ enabled.
>
> Signed-off-by: Pavel Roskin <[email protected]>
> ---
>
> drivers/net/wireless/ath5k/hw.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
>
> diff --git a/drivers/net/wireless/ath5k/hw.c b/drivers/net/wireless/ath5k/hw.c
> index 677600b..ff579a2 100644
> --- a/drivers/net/wireless/ath5k/hw.c
> +++ b/drivers/net/wireless/ath5k/hw.c
> @@ -458,6 +458,8 @@ void ath5k_hw_detach(struct ath5k_hw *ah)
> {
> ATH5K_TRACE(ah->ah_sc);
>
> + __set_bit(ATH_STAT_INVALID, ah->ah_sc->status);
> +
> if (ah->ah_rf_banks != NULL)
> kfree(ah->ah_rf_banks);
>
>
>
> --
> Regards,
> Pavel Roskin

Acked-by: Nick Kossifidis <[email protected]>

--
GPG ID: 0xD21DB2DB
As you read this post global entropy rises. Have Fun ;-)
Nick