aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/main.c
diff options
context:
space:
mode:
authorLuis R. Rodriguez <lrodriguez@atheros.com>2009-10-06 21:19:07 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-10-07 16:39:51 -0400
commit211f5859af951788a3fe4752142a5e9047afa5d8 (patch)
tree2d1048397c2eb66950a688ac43cebccc4f818816 /drivers/net/wireless/ath/ath9k/main.c
parentath9k: move common->debug_mask setting to ath_init_softc() (diff)
downloadlinux-dev-211f5859af951788a3fe4752142a5e9047afa5d8.tar.xz
linux-dev-211f5859af951788a3fe4752142a5e9047afa5d8.zip
ath9k: initialize hw prior to debugfs
debugfs uses the hardware for several debugfs files as such the hardware must be initialized and available prior to its usage. The same applies to when we free the hw structs -- free debufs file entries prior to free'ing the hardware. Reported-by: Vasanthakumar Thiagarajan <vasanth@atheros.com> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to '')
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 7f90cb872a69..0fe915acd21e 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1365,8 +1365,8 @@ void ath_detach(struct ath_softc *sc)
ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
ath_gen_timer_free(ah, sc->btcoex.no_stomp_timer);
- ath9k_hw_detach(ah);
ath9k_exit_debug(ah);
+ ath9k_hw_detach(ah);
sc->sc_ah = NULL;
}
@@ -1626,10 +1626,8 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
(unsigned long)sc);
ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
- if (!ah) {
- r = -ENOMEM;
- goto bad_no_ah;
- }
+ if (!ah)
+ return -ENOMEM;
ah->hw_version.devid = devid;
ah->hw_version.subsysid = subsysid;
@@ -1651,15 +1649,18 @@ static int ath_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
/* XXX assert csz is non-zero */
common->cachelsz = csz << 2; /* convert to bytes */
- if (ath9k_init_debug(ah) < 0)
- dev_err(sc->dev, "Unable to create debugfs files\n");
-
r = ath9k_hw_init(ah);
if (r) {
ath_print(common, ATH_DBG_FATAL,
"Unable to initialize hardware; "
"initialization status: %d\n", r);
- goto bad;
+ goto bad_free_hw;
+ }
+
+ if (ath9k_init_debug(ah) < 0) {
+ ath_print(common, ATH_DBG_FATAL,
+ "Unable to create debugfs files\n");
+ goto bad_free_hw;
}
/* Get the hardware key cache size. */
@@ -1848,12 +1849,11 @@ bad2:
for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
if (ATH_TXQ_SETUP(sc, i))
ath_tx_cleanupq(sc, &sc->tx.txq[i]);
-bad:
+
+ ath9k_exit_debug(ah);
+bad_free_hw:
ath9k_hw_detach(ah);
-bad_no_ah:
- ath9k_exit_debug(sc->sc_ah);
sc->sc_ah = NULL;
-
return r;
}
@@ -1966,8 +1966,8 @@ error_attach:
if (ATH_TXQ_SETUP(sc, i))
ath_tx_cleanupq(sc, &sc->tx.txq[i]);
- ath9k_hw_detach(ah);
ath9k_exit_debug(ah);
+ ath9k_hw_detach(ah);
sc->sc_ah = NULL;
return error;