To avoid sleeping in firmware_get() with bwi mutex held, call

bwi_mac_fw_alloc() at the device attach, not in the interface
init.
This commit is contained in:
Gleb Smirnoff 2015-05-27 22:30:21 +00:00
parent 15692978d7
commit c803f24b28
3 changed files with 6 additions and 6 deletions

View File

@ -101,7 +101,6 @@ static void bwi_mac_opmode_init(struct bwi_mac *);
static void bwi_mac_hostflags_init(struct bwi_mac *); static void bwi_mac_hostflags_init(struct bwi_mac *);
static void bwi_mac_bss_param_init(struct bwi_mac *); static void bwi_mac_bss_param_init(struct bwi_mac *);
static int bwi_mac_fw_alloc(struct bwi_mac *);
static void bwi_mac_fw_free(struct bwi_mac *); static void bwi_mac_fw_free(struct bwi_mac *);
static int bwi_mac_fw_load(struct bwi_mac *); static int bwi_mac_fw_load(struct bwi_mac *);
static int bwi_mac_fw_init(struct bwi_mac *); static int bwi_mac_fw_init(struct bwi_mac *);
@ -325,10 +324,6 @@ bwi_mac_init(struct bwi_mac *mac)
/* /*
* Load and initialize firmwares * Load and initialize firmwares
*/ */
error = bwi_mac_fw_alloc(mac);
if (error)
return error;
error = bwi_mac_fw_load(mac); error = bwi_mac_fw_load(mac);
if (error) if (error)
return error; return error;
@ -879,7 +874,7 @@ bwi_fwimage_is_valid(struct bwi_softc *sc, const struct firmware *fw,
/* /*
* XXX Error cleanup * XXX Error cleanup
*/ */
static int int
bwi_mac_fw_alloc(struct bwi_mac *mac) bwi_mac_fw_alloc(struct bwi_mac *mac)
{ {
struct bwi_softc *sc = mac->mac_sc; struct bwi_softc *sc = mac->mac_sc;

View File

@ -57,6 +57,7 @@ void bwi_mac_init_tpctl_11bg(struct bwi_mac *);
void bwi_mac_dummy_xmit(struct bwi_mac *); void bwi_mac_dummy_xmit(struct bwi_mac *);
void bwi_mac_reset_hwkeys(struct bwi_mac *); void bwi_mac_reset_hwkeys(struct bwi_mac *);
int bwi_mac_config_ps(struct bwi_mac *); int bwi_mac_config_ps(struct bwi_mac *);
int bwi_mac_fw_alloc(struct bwi_mac *);
uint16_t bwi_memobj_read_2(struct bwi_mac *, uint16_t, uint16_t); uint16_t bwi_memobj_read_2(struct bwi_mac *, uint16_t, uint16_t);
uint32_t bwi_memobj_read_4(struct bwi_mac *, uint16_t, uint16_t); uint32_t bwi_memobj_read_4(struct bwi_mac *, uint16_t, uint16_t);

View File

@ -446,6 +446,10 @@ bwi_attach(struct bwi_softc *sc)
if (error) if (error)
goto fail; goto fail;
error = bwi_mac_fw_alloc(mac);
if (error)
goto fail;
ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211); ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211);
if (ifp == NULL) { if (ifp == NULL) {
device_printf(dev, "can not if_alloc()\n"); device_printf(dev, "can not if_alloc()\n");