svn commit: r293219 - head/sys/dev/iwm

Andriy Voskoboinyk avos at FreeBSD.org
Tue Jan 5 20:09:28 UTC 2016


Author: avos
Date: Tue Jan  5 20:09:26 2016
New Revision: 293219
URL: https://svnweb.freebsd.org/changeset/base/293219

Log:
  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

Modified:
  head/sys/dev/iwm/if_iwm.c

Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c	Tue Jan  5 19:52:16 2016	(r293218)
+++ head/sys/dev/iwm/if_iwm.c	Tue Jan  5 20:09:26 2016	(r293219)
@@ -2041,7 +2041,6 @@ iwm_mvm_load_ucode_wait_alive(struct iwm
 
 	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, i
 	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)


More information about the svn-src-head mailing list