Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Nov 2005 10:15:25 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        cvs-src@freebsd.org, damien.bergamini@free.fr, src-committers@freebsd.org, cvs-all@freebsd.org, nate@root.org
Subject:   Re: cvs commit: src/sys/modules/iwi Makefile src/sys/dev/iwi if_iwi.c if_iwireg.h if_iwivar.h
Message-ID:  <200511211015.27879.jhb@freebsd.org>
In-Reply-To: <20051119.144210.122123926.imp@bsdimp.com>
References:  <20051119165547.0A4BD16A43D@hub.freebsd.org> <00ca01c5ed4a$86b0e570$0300a8c0@COMETE> <20051119.144210.122123926.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday 19 November 2005 04:42 pm, M. Warner Losh wrote:
> In message: <00ca01c5ed4a$86b0e570$0300a8c0@COMETE>
>
>             "Damien Bergamini" <damien.bergamini@free.fr> writes:
> : | I'm a little concerned about this change.  The notes claim the firmware
> : | is loaded after a resume from the filesystem as well as at
> : | initialization time.  So your driver is then assuming the ATA driver is
> : | fully reinitialized before your driver's resume method can be called.
> : | You can't assume that since it's not a child device of ATA.
> :
> : Wouldn't the call to VOP_READ block until "/" is recovered in that case ?
>
> If it blocks until "/" is recovered, then the system will block.  We
> presently restore single threaded, and if anything in there blocks, we
> wait until it unblocks.  Interrupts are runnable, so some things would
> still work...

Devices get resumed based on their relative positions in the device tree which 
is rather arbitrary (it depends on how the PCI busses are laid out on a 
machine for example).  You really cannot know that the kernel is back up and 
running well enough to do a VOP_READ (which is _synchronous_, not magically 
async, so you'd need to create your own kthread to even try to get the 
behavior you seem to want) until all the hardware is up.  The easiest way to 
accomplish this is for your driver to send a message to devd requesting that 
the firmware be reloaded on resume since devd won't run until the kernel is 
fully back up.

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511211015.27879.jhb>