Re: [Fastboot] Re: Re: tg3: issue for reboot/kexec
From: Khalid Aziz <hidden>
Date: 2005-08-18 18:35:52
Also in:
linux-pm
On Thu, 2005-08-18 at 12:30 -0600, Khalid Aziz wrote:
On Thu, 2005-06-30 at 17:52 -0600, Eric W. Biederman wrote:quoted
Greg KH [off-list ref] writes:quoted
On Thu, Jun 30, 2005 at 05:21:45PM -0600, Eric W. Biederman wrote:quoted
However I have gotten feedback a couple of times that driver writers tend to prefer using reboot notifiers. In part because shutdown functions don't exist for non-pci devices.That's a very lame excuse. All busses should have shutdown functions. And any device that is just bypassing all of the existing bus logic is still tying into the driver core directly (which is a bad thing by itself, but that's a different matter.) And there's a shutdown method there too. So there is no excuse to not use it. Please, if they complain, point them to me :)Ok. Then there is still my complaint and device_shutdown doesn't get called on module removal which means it really doesn't get implemented. Perhaps with kexec now being in the mainline kernel this will get better. Currently I have the following patch outstanding against the e1000 driver because on reboot on some boxes it card revisions it places the card into a sleep state the driver initialization routing cannot get the card out of. And yes the e1000 is bad and is using a reboot_notifier. Eric e1000_main.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -uNr linux-2.4.29-kexec-apic-virtwire-on-shutdownx86_64/drivers/net/e1000/e1000_main.c linux-2.4.29-e1000-no-poweroff-on-reboot/drivers/net/e1000/e1000_main.c--- linux-2.4.29-kexec-apic-virtwire-on-shutdownx86_64/drivers/net/e1000/e1000_main.c Tue Feb 15 14:17:09 2005 +++ linux-2.4.29-e1000-no-poweroff-on-reboot/drivers/net/e1000/e1000_main.c Wed Feb 16 05:49:00 2005@@ -2777,7 +2777,7 @@ case SYS_POWER_OFF: while((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev))) { if(pci_dev_driver(pdev) == &e1000_driver) - e1000_suspend(pdev, 3); + e1000_suspend(pdev, (event == SYS_DOWN)?0:3); } } return NOTIFY_DONE;I have found that I can not walk reboot_notifier list in all cases before kexec'ing a new kernel. For instance, when handling INIT on ia64, we are running in interrupt context and atleast some of the reboot notifier callbacks call schedule(). Calling schedule() is not gonna work when we are running in interrupt context. I have the same concern for when panic gets called in interrupt context. So I added a shutdown function to e1000 driver instead. Patch is attached. This patch has worked for me. As soon as I have all the issues sorted out with kexec'ing on INIT on ia64, I will post a fully updated kexec patch for ia64. I now have kexec working solid on INIT with e1000 driver and it can handle multiple back to back INITs and come up in kexec'd kernel every time. I am now trying to sort some issues out with tg3 driver (another driver with no shutdown routine :(
Sorry, forgot to remove the last hunk that is already in 2.6.12. Updated
patch attached.
--
Khalid
====================================================================
Khalid Aziz Open Source and Linux Organization
(970)898-9214 Hewlett-Packard
khalid.aziz@hp.com Fort Collins, CO
"The Linux kernel is subject to relentless development"
- Alessandro Rubini Attachments
- e1000_shutdown.patch [text/x-patch] 3472 bytes · preview
- (unnamed) [text/plain] 0 bytes · preview