Skip site navigation (1)Skip section navigation (2)
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>