PERFORCE change 112835 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Jan 12 13:32:57 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=112835
Change 112835 by hselasky at 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
More information about the p4-projects
mailing list