mxge: fix panic at module unload
r333175 (multicast changes) exposed a bug where mxge was not checking to see if the driver was being unloaded while handing ioctls that touch hardware. As a result, now that in6m_disconnect() is run from an async gtaskq, it was busy-waiting in mxge_send_cmd() while the mcast list was destroyed.
This commit is contained in:
parent
630ea924cf
commit
c0a1f0af0c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=335957
@ -4193,6 +4193,10 @@ mxge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
case SIOCADDMULTI:
|
||||
case SIOCDELMULTI:
|
||||
mtx_lock(&sc->driver_mtx);
|
||||
if (sc->dying) {
|
||||
mtx_unlock(&sc->driver_mtx);
|
||||
return (EINVAL);
|
||||
}
|
||||
mxge_set_multicast_list(sc);
|
||||
mtx_unlock(&sc->driver_mtx);
|
||||
break;
|
||||
@ -4278,6 +4282,10 @@ mxge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
|
||||
case SIOCGIFMEDIA:
|
||||
mtx_lock(&sc->driver_mtx);
|
||||
if (sc->dying) {
|
||||
mtx_unlock(&sc->driver_mtx);
|
||||
return (EINVAL);
|
||||
}
|
||||
mxge_media_probe(sc);
|
||||
mtx_unlock(&sc->driver_mtx);
|
||||
err = ifmedia_ioctl(ifp, (struct ifreq *)data,
|
||||
|
Loading…
Reference in New Issue
Block a user