diff options
| author | Sam Leffler <sam@FreeBSD.org> | 2003-10-13 03:39:38 +0000 |
|---|---|---|
| committer | Sam Leffler <sam@FreeBSD.org> | 2003-10-13 03:39:38 +0000 |
| commit | 2075afba8de79c5f28df07581faad47d04c64e57 (patch) | |
| tree | 4b47f9fa3e0ece8f01b6f0be00d9cc88c1eaba9d | |
| parent | 310e4a4ae64f6c4f919f42784a369632603bb0df (diff) | |
Notes
| -rw-r--r-- | sys/dev/ath/if_ath.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index e766a38951ae..10a1b6d9c822 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -330,7 +330,6 @@ ath_detach(struct ath_softc *sc) DPRINTF(("ath_detach: if_flags %x\n", ifp->if_flags)); - mtx_lock(&sc->sc_mtx); ath_stop(ifp); bpfdetach(ifp); ath_desc_free(sc); @@ -851,8 +850,19 @@ ath_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) * only reflect promisc mode settings. */ ath_mode_init(sc); - } else - ath_init(ifp); /* XXX lose error */ + } else { + /* + * Beware of being called during detach to + * reset promiscuous mode. In that case we + * will still be marked UP but not RUNNING. + * However trying to re-init the interface + * is the wrong thing to do as we've already + * torn down much of our state. There's + * probably a better way to deal with this. + */ + if (!sc->sc_invalid) + ath_init(ifp); /* XXX lose error */ + } } else ath_stop(ifp); break; |
