On Fri, 22 May 2009, John Baldwin wrote:
On Thursday 21 May 2009 6:11:02 pm Attilio Rao wrote:
At this point I wonder what's the purpose of maintaining the sleeping
version for such functions?
Actually, I still very much do not like using M_NOWAIT needlessly. I would
much rather the solution for make_dev() be that the 1 or 2 places that need
to do it with a mutex held instead queue a task to do the actual make_dev()
in a taskqueue when no locks are held. This is basically what
destroy_dev_sched() is doing. Perhaps a make_dev_sched() with a similar
callback to be called on completion would be better. Having a device driver
do all the work to setup the hardware only to fail to create a node in /dev
so that userland can actually use it is pretty rediculous and useless.
It's certainly true that we don't support failing calls to if_attach(), on the
basis that backing out partially successful interface attaches isn't pretty.
Likewise, if_detach() will drain task queues (etc), so also may sleep. I
think it's not unreasonable to require a full thread context for major
interactions with device/interface registration, etc, and I don't see that
changing for the network stack. We're still shaking out bugs from code that
thinks it's OK to free inpcbs in arbitrary contexts (which it's not, because
we have to drain timers).
Robert N M Watson
Computer Laboratory
University of Cambridge
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"