svn commit: r301970 - head/sys/dev/iwm
Adrian Chadd
adrian at FreeBSD.org
Thu Jun 16 17:59:16 UTC 2016
Author: adrian
Date: Thu Jun 16 17:59:15 2016
New Revision: 301970
URL: https://svnweb.freebsd.org/changeset/base/301970
Log:
[iwm] free RX ring / NVM memory after they're used.
* Free RX ring during detach
* Free NVM memory after parsing
Tested:
* 7260, STA mode
Submitted by: Imre Vadasz <imre at vdsz.com>
Approved by: re (gjb)
Obtained from: dragonflybsd
Differential Revision: https://reviews.freebsd.org/D6817
Modified:
head/sys/dev/iwm/if_iwm.c
Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c Thu Jun 16 16:26:16 2016 (r301969)
+++ head/sys/dev/iwm/if_iwm.c Thu Jun 16 17:59:15 2016 (r301970)
@@ -1823,7 +1823,7 @@ iwm_parse_nvm_data(struct iwm_softc *sc,
struct iwm_nvm_section {
uint16_t length;
- const uint8_t *data;
+ uint8_t *data;
};
static int
@@ -1860,6 +1860,8 @@ iwm_nvm_init(struct iwm_softc *sc)
"%s: Read NVM\n",
__func__);
+ memset(nvm_sections, 0, sizeof(nvm_sections));
+
/* TODO: find correct NVM max size for a section */
nvm_buffer = malloc(IWM_OTP_LOW_IMAGE_SIZE, M_DEVBUF, M_NOWAIT);
if (nvm_buffer == NULL)
@@ -1883,10 +1885,15 @@ iwm_nvm_init(struct iwm_softc *sc)
nvm_sections[section].length = len;
}
free(nvm_buffer, M_DEVBUF);
- if (error)
- return error;
+ if (error == 0)
+ error = iwm_parse_nvm_sections(sc, nvm_sections);
- return iwm_parse_nvm_sections(sc, nvm_sections);
+ for (i = 0; i < IWM_NVM_NUM_OF_SECTIONS; i++) {
+ if (nvm_sections[i].data != NULL)
+ free(nvm_sections[i].data, M_DEVBUF);
+ }
+
+ return error;
}
/*
@@ -5008,6 +5015,7 @@ iwm_detach_local(struct iwm_softc *sc, i
ieee80211_ifdetach(&sc->sc_ic);
/* Free descriptor rings */
+ iwm_free_rx_ring(sc, &sc->rxq);
for (i = 0; i < nitems(sc->txq); i++)
iwm_free_tx_ring(sc, &sc->txq[i]);
More information about the svn-src-all
mailing list