From owner-p4-projects@FreeBSD.ORG Fri Jan 12 21:32:57 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 742EB16A505; Fri, 12 Jan 2007 21:32:57 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 21E7C16A500 for ; Fri, 12 Jan 2007 21:32:57 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 1228A13C458 for ; Fri, 12 Jan 2007 21:32:57 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l0CLWugT096030 for ; Fri, 12 Jan 2007 21:32:56 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l0CLWuAG096027 for perforce@freebsd.org; Fri, 12 Jan 2007 21:32:56 GMT (envelope-from hselasky@FreeBSD.org) Date: Fri, 12 Jan 2007 21:32:56 GMT Message-Id: <200701122132.l0CLWuAG096027@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 112835 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jan 2007 21:32:57 -0000 http://perforce.freebsd.org/chv.cgi?CH=112835 Change 112835 by hselasky@hselasky_mini_itx on 2007/01/12 21:32:24 ether_ifattach() must be called without any mutexes held, hence it can sleep. Use generated typedef's for prototypes for exported device methods. This prevents invalid parameter passing and return. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/if_aue.c#14 edit .. //depot/projects/usb/src/sys/dev/usb/if_axe.c#13 edit .. //depot/projects/usb/src/sys/dev/usb/if_cdce.c#9 edit .. //depot/projects/usb/src/sys/dev/usb/if_cue.c#11 edit .. //depot/projects/usb/src/sys/dev/usb/if_kue.c#13 edit .. //depot/projects/usb/src/sys/dev/usb/if_rue.c#12 edit .. //depot/projects/usb/src/sys/dev/usb/if_udav.c#12 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/if_aue.c#14 (text+ko) ==== @@ -215,14 +215,10 @@ static void aue_cfg_read_eeprom(struct aue_softc *sc, u_int8_t *dest, u_int16_t off, u_int16_t len); -static int -aue_cfg_miibus_readreg(device_t dev, int phy, int reg); -static int -aue_cfg_miibus_writereg(device_t dev, int phy, int reg, int data); - -static void -aue_cfg_miibus_statchg(device_t dev); +static miibus_readreg_t aue_cfg_miibus_readreg; +static miibus_writereg_t aue_cfg_miibus_writereg; +static miibus_statchg_t aue_cfg_miibus_statchg; static void aue_cfg_setmulti(struct aue_softc *sc, @@ -957,11 +953,15 @@ sc->sc_ifp = ifp; + mtx_unlock(&(sc->sc_mtx)); + /* * Call MI attach routine. */ ether_ifattach(ifp, eaddr); + mtx_lock(&(sc->sc_mtx)); + done: return; } @@ -1530,7 +1530,6 @@ ifmr->ifm_status = sc->sc_media_status; mtx_unlock(&(sc->sc_mtx)); - return; } @@ -1681,3 +1680,4 @@ return 0; } + ==== //depot/projects/usb/src/sys/dev/usb/if_axe.c#13 (text+ko) ==== @@ -149,15 +149,11 @@ static void axe_cfg_cmd(struct axe_softc *sc, u_int16_t cmd, u_int16_t index, u_int16_t val, void *buf); -static int -axe_cfg_miibus_readreg(device_t dev, int phy, int reg); -static int -axe_cfg_miibus_writereg(device_t dev, int phy, int reg, int val); +static miibus_readreg_t axe_cfg_miibus_readreg; +static miibus_writereg_t axe_cfg_miibus_writereg; +static miibus_statchg_t axe_cfg_miibus_statchg; -static void -axe_cfg_miibus_statchg(device_t dev); - static int axe_ifmedia_upd_cb(struct ifnet *ifp); @@ -757,12 +753,16 @@ sc->sc_ifp = ifp; + mtx_unlock(&(sc->sc_mtx)); + /* * Call MI attach routine. */ ether_ifattach(ifp, eaddr); + mtx_lock(&(sc->sc_mtx)); + done: return; } ==== //depot/projects/usb/src/sys/dev/usb/if_cdce.c#9 (text+ko) ==== @@ -396,8 +396,12 @@ sc->sc_ifp = ifp; + mtx_unlock(&(sc->sc_mtx)); + ether_ifattach(ifp, eaddr); + mtx_lock(&(sc->sc_mtx)); + return 0; /* success */ detach: ==== //depot/projects/usb/src/sys/dev/usb/if_cue.c#11 (text+ko) ==== @@ -595,7 +595,12 @@ sc->sc_ifp = ifp; + mtx_unlock(&(sc->sc_mtx)); + ether_ifattach(ifp, eaddr); + + mtx_lock(&(sc->sc_mtx)); + done: return; } ==== //depot/projects/usb/src/sys/dev/usb/if_kue.c#13 (text+ko) ==== @@ -630,7 +630,11 @@ sc->sc_ifp = ifp; + mtx_unlock(&(sc->sc_mtx)); + ether_ifattach(ifp, sc->sc_desc.kue_macaddr); + + mtx_lock(&(sc->sc_mtx)); done: return; } ==== //depot/projects/usb/src/sys/dev/usb/if_rue.c#12 (text+ko) ==== @@ -162,16 +162,11 @@ static void rue_cfg_csr_write_4(struct rue_softc *sc, int reg, u_int32_t val); -static int -rue_cfg_miibus_readreg(device_t dev, int phy, int reg); - -static int -rue_cfg_miibus_writereg(device_t dev, int phy, int reg, int data); +static miibus_readreg_t rue_cfg_miibus_readreg; +static miibus_writereg_t rue_cfg_miibus_writereg; +static miibus_statchg_t rue_cfg_miibus_statchg; static void -rue_cfg_miibus_statchg(device_t dev); - -static void rue_config_copy(struct rue_softc *sc, struct rue_config_copy *cc, u_int16_t refcount); static void @@ -857,12 +852,16 @@ sc->sc_ifp = ifp; + mtx_unlock(&(sc->sc_mtx)); + /* * Call MI attach routine. */ ether_ifattach(ifp, eaddr); + mtx_lock(&(sc->sc_mtx)); + done: return; } ==== //depot/projects/usb/src/sys/dev/usb/if_udav.c#12 (text+ko) ==== @@ -174,15 +174,10 @@ static void udav_cfg_tick(struct udav_softc *sc, struct udav_config_copy *cc, u_int16_t refcount); -static int -udav_cfg_miibus_readreg(device_t dev, int phy, int reg); -static void -udav_cfg_miibus_writereg(device_t dev, int phy, int reg, int data); - -static void -udav_cfg_miibus_statchg(device_t dev); - +static miibus_readreg_t udav_cfg_miibus_readreg; +static miibus_writereg_t udav_cfg_miibus_writereg; +static miibus_statchg_t udav_cfg_miibus_statchg; static const struct usbd_config udav_config[UDAV_ENDPT_MAX] = { @@ -464,12 +459,16 @@ sc->sc_ifp = ifp; + mtx_unlock(&(sc->sc_mtx)); + /* * Call MI attach routine. */ ether_ifattach(ifp, eaddr); + mtx_lock(&(sc->sc_mtx)); + done: return; } @@ -1430,7 +1429,7 @@ return data16; } -static void +static int udav_cfg_miibus_writereg(device_t dev, int phy, int reg, int data) { struct udav_softc *sc = device_get_softc(dev); @@ -1438,7 +1437,7 @@ /* XXX: one PHY only for the internal PHY */ if (phy != 0) { - return; + return 0; } mtx_lock(&(sc->sc_mtx)); /* XXX */ @@ -1462,7 +1461,7 @@ mtx_unlock(&(sc->sc_mtx)); /* XXX */ - return; + return 0; } static void