diff options
author | Andriy Voskoboinyk <avos@FreeBSD.org> | 2016-01-05 20:09:26 +0000 |
---|---|---|
committer | Andriy Voskoboinyk <avos@FreeBSD.org> | 2016-01-05 20:09:26 +0000 |
commit | 430384523dfa027297fce96eac577c50e0ff8654 (patch) | |
tree | 27b5908a4a8e6a93c734256fefd186ea2dd28431 /sys/dev/iwm/if_iwm.c | |
parent | 43d53dba8ff97ef82be216178626c3b545cce30f (diff) | |
download | src-430384523dfa027297fce96eac577c50e0ff8654.tar.gz src-430384523dfa027297fce96eac577c50e0ff8654.zip |
iwm: revert r293178
This optimization is not proper (and causes kernel panic),
since driver checks fw_status to optimize away parsing stage
if it was already done.
Reported by: dchagin
Notes
Notes:
svn path=/head/; revision=293219
Diffstat (limited to 'sys/dev/iwm/if_iwm.c')
-rw-r--r-- | sys/dev/iwm/if_iwm.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/dev/iwm/if_iwm.c b/sys/dev/iwm/if_iwm.c index 5556ca66dbde..510491e4d61f 100644 --- a/sys/dev/iwm/if_iwm.c +++ b/sys/dev/iwm/if_iwm.c @@ -2041,7 +2041,6 @@ iwm_mvm_load_ucode_wait_alive(struct iwm_softc *sc, sc->sc_uc_current = ucode_type; error = iwm_start_fw(sc, ucode_type); - iwm_fw_info_free(&sc->sc_fw); if (error) { sc->sc_uc_current = old_type; return error; @@ -4937,6 +4936,7 @@ iwm_suspend(device_t dev) static int iwm_detach_local(struct iwm_softc *sc, int do_net80211) { + struct iwm_fw_info *fw = &sc->sc_fw; device_t dev = sc->sc_dev; int i; @@ -4953,6 +4953,10 @@ iwm_detach_local(struct iwm_softc *sc, int do_net80211) for (i = 0; i < nitems(sc->txq); i++) iwm_free_tx_ring(sc, &sc->txq[i]); + /* Free firmware */ + if (fw->fw_fp != NULL) + iwm_fw_info_free(fw); + /* Free scheduler */ iwm_free_sched(sc); if (sc->ict_dma.vaddr != NULL) |