kldunload DIAGNOSTIC idea...

Poul-Henning Kamp phk at phk.freebsd.dk
Wed Jul 21 09:38:50 PDT 2004


In message <20040721.084926.84362543.imp at bsdimp.com>, "M. Warner Losh" writes:
>[[ only cc'd arch@ ]]
>
>In message: <83182.1090412961 at critter.freebsd.dk>
>            "Poul-Henning Kamp" <phk at phk.freebsd.dk> writes:
>: >Any ideas on how network interfaces should
>: >work in this?
>: 
>: I talked with Robert briefly about this yesterday, and the problem
>: there is that struct ifnet is embedded in the softc.  If the softc
>: had a pointer to the ifnet, then we could do something similar, but
>: as long as it's embedded we're stuck.
>
>Why is that the case?  We don't detach the ifnet stuff after deleting
>the softc.  Why would a pointer to ifnet in the softc make this
>easier?

Because it would allow the softc could be freed before the ifnet
structure.

>I mean, I understand that having a pointer would insulate the size of
>ifnet from the driver, but there's so many offsets in ifnet that are
>encoded in the driver that doesn't seem that big a win.

That's not the point here.  The problem here is that we cannot unload
the driver until we have hunted down and exterminated all references 
to the ifnet structure.

If softc only pointed to the ifnet, we could neuter the ifnet (like
we do for cdev and vnodes with a set of dead_* functions) wait for 
all threads to drain out of the module and unload it.  The ifnet
cleanup will happen "when convenient".

It is less of an issue in networks than in cdevsw{} context, but
dismantling things from above is easier than the opposite.

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.


More information about the freebsd-arch mailing list