Date: Fri, 16 Sep 2005 09:01:40 -0600 (MDT) From: "M. Warner Losh" <imp@bsdimp.com> To: ru@FreeBSD.org Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org, jhb@FreeBSD.org Subject: Re: cvs commit: src/sys/dev/re if_re.c Message-ID: <20050916.090140.58827157.imp@bsdimp.com> In-Reply-To: <20050916091928.GG88456@ip.net.ua> References: <200509151521.14204.jhb@FreeBSD.org> <20050915205639.GD88456@ip.net.ua> <20050916091928.GG88456@ip.net.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20050916091928.GG88456@ip.net.ua> Ruslan Ermilov <ru@FreeBSD.org> writes: : On Thu, Sep 15, 2005 at 11:56:39PM +0300, Ruslan Ermilov wrote: : > The first is the BPF detach bad interaction with foo_detach(), : > as described in re_detach(). This panic is real with (I think) : > all drivers. And testing IFF_DRV_RUNNING here doesn't seem to : > be able to prevent the panic. Perhaps the fix would be to : > move ether_ifdetach() before foo_stop() in foo_detach(), I'm : > not yet sure. : > : I tried with rl(4) PCCARD, by moving ether_ifdetach() before : rl_stop() in rl_detach(). It fixes the panic when you eject : the card, but doesn't fix it when kldunloading the module. : The difference is that rl_detach() is called already after : miibus0 and rlphy0 has been detached when kldunloading the : module. When ejecting the card, rl_detach() is called first. : What happens when you kldunload the module with BPF listener : attached, is that bpfdetach() calls rl_ioctl() to reset : promisc, that calls rl_init_locked(), and that results in : : mii = device_get_softc(sc->rl_miibus); : : being NULL (remember the miibus has already been detached), : and that panics later here: : : mii_mediachg(mii); : : When we reset IFF_UP, rl_ioctl(SIOCSIFFLAGS) silently exits : and no harm is done. So the question is: how do we prevent : this from happening without resetting IFF_UP. One possible : solution would be to add sc->detaching, similar to : sc->suspended, abd check it in rl_ioctl(). Ugg. In ed, we check to make sure that we still have a child before doing things with mii bus. A similar fix could be made. Warner
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050916.090140.58827157.imp>