Dell 1950 does not properly respond to reboot and shutdown -p

John Baldwin jhb at freebsd.org
Tue Oct 10 16:55:18 UTC 2006


On Tuesday 10 October 2006 08:54, Bill Moran wrote:
> In response to Doug Ambrisko <ambrisko at ambrisko.com>:
> > Bruno Ducrot writes:
> > | On Wed, Oct 04, 2006 at 02:07:12PM -0400, Bill Moran wrote:
> > | > In response to Bruno Ducrot <ducrot at poupinou.org>:
> > | > > Hi,
> > | > > 
> > | > > On Wed, Oct 04, 2006 at 12:28:35PM -0400, Bill Moran wrote:
> > | > > > 
> > | > > > A reboot causes the OS to halt, but the hardware just sits there on the
> > | > > > shutdown screen.
> > | > > > 
> > | > > > A shutdown -p does the same.
> > | > > 
> > | > > What exactly are the last few lines?
> > | > 
> > | > (manually copied)
> > | > 
> > | > ...
> > | > All buffers synced.
> > | > Uptime: 1m16s
> > | > 
> > | 
> > | Thanks.  Then this happen after print_uptime().
> > | 
> > | I believe one of the drivers register a shutdown_final (or
> > | shutdown_post_sync) event that hang your system.  I think (though I
> > | may be wrong) mfi may be that one.
> > | 
> > | It would help if you can add some printf in dev/mfi/mfi.c into the
> > | mfi_shutdown() function in order to check if that assumption
> > | is correct.
> > 
> > Some what related to this we have a local hack:
> > 
> > --- sys/kern/subr_bus.c.orig	Tue Jun 27 15:49:39 2006
> > +++ sys/kern/subr_bus.c	Tue Jun 27 15:49:51 2006
> > @@ -2906,6 +2906,7 @@ bus_generic_shutdown(device_t dev)
> >  	device_t child;
> >  
> >  	TAILQ_FOREACH(child, &dev->children, link) {
> > +		DELAY(1000);
> >  		device_shutdown(child);
> >  	}
> 
> This patch seems to "fix" the problem.  I'm going to replace it with
> some printfs and see if I can determine which driver is actually
> causing the problem (hopefully it's only one).
> 
> Am I wrong in saying that the correct solution would be to identify the
> driver that needs more time and implementing some sort of polling
> mechanism to ensure the hardware is ready when the driver wants to
> shut down?

Well, first let's see which driver it is. :)  You might be able to just
remove the DELAY and add a printf and see which device is printed last.

-- 
John Baldwin


More information about the freebsd-stable mailing list