Date: Wed, 27 May 2015 22:30:21 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r283639 - head/sys/dev/bwi Message-ID: <201505272230.t4RMULAA077998@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Wed May 27 22:30:21 2015 New Revision: 283639 URL: https://svnweb.freebsd.org/changeset/base/283639 Log: To avoid sleeping in firmware_get() with bwi mutex held, call bwi_mac_fw_alloc() at the device attach, not in the interface init. Modified: head/sys/dev/bwi/bwimac.c head/sys/dev/bwi/bwimac.h head/sys/dev/bwi/if_bwi.c Modified: head/sys/dev/bwi/bwimac.c ============================================================================== --- head/sys/dev/bwi/bwimac.c Wed May 27 22:29:19 2015 (r283638) +++ head/sys/dev/bwi/bwimac.c Wed May 27 22:30:21 2015 (r283639) @@ -101,7 +101,6 @@ static void bwi_mac_opmode_init(struct b static void bwi_mac_hostflags_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 int bwi_mac_fw_load(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 */ - error = bwi_mac_fw_alloc(mac); - if (error) - return error; - error = bwi_mac_fw_load(mac); if (error) return error; @@ -879,7 +874,7 @@ bwi_fwimage_is_valid(struct bwi_softc *s /* * XXX Error cleanup */ -static int +int bwi_mac_fw_alloc(struct bwi_mac *mac) { struct bwi_softc *sc = mac->mac_sc; Modified: head/sys/dev/bwi/bwimac.h ============================================================================== --- head/sys/dev/bwi/bwimac.h Wed May 27 22:29:19 2015 (r283638) +++ head/sys/dev/bwi/bwimac.h Wed May 27 22:30:21 2015 (r283639) @@ -57,6 +57,7 @@ void bwi_mac_init_tpctl_11bg(struct bwi void bwi_mac_dummy_xmit(struct bwi_mac *); void bwi_mac_reset_hwkeys(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); uint32_t bwi_memobj_read_4(struct bwi_mac *, uint16_t, uint16_t); Modified: head/sys/dev/bwi/if_bwi.c ============================================================================== --- head/sys/dev/bwi/if_bwi.c Wed May 27 22:29:19 2015 (r283638) +++ head/sys/dev/bwi/if_bwi.c Wed May 27 22:30:21 2015 (r283639) @@ -446,6 +446,10 @@ bwi_attach(struct bwi_softc *sc) if (error) goto fail; + error = bwi_mac_fw_alloc(mac); + if (error) + goto fail; + ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211); if (ifp == NULL) { device_printf(dev, "can not if_alloc()\n");
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505272230.t4RMULAA077998>