From den@sw.ru Tue Aug 7 02:12:50 2007 From: "Denis V. Lunev" Date: Tue, 7 Aug 2007 13:13:18 +0400 Subject: PCI: pci_get_device call from interrupt in reboot fixups To: den@openvz.org, dev@openvz.org, akpm@linux-foundation.org, gregkh@suse.de Cc: devel@openvz.org, linux-kernel@vger.kernel.org, xemul@openvz.org Message-ID: <20070807091318.GA14417@iris.sw.ru> Content-Disposition: inline The following calltrace is possible now: handle_sysrq machine_emergency_restart mach_reboot_fixups pci_get_device pci_get_subsys down_read The patch skips reboot fixup if called from sysrq-B code. Signed-off-by: Denis V. Lunev Signed-off-by: Greg Kroah-Hartman --- arch/i386/kernel/reboot_fixups.c | 6 ++++++ 1 file changed, 6 insertions(+) --- a/arch/i386/kernel/reboot_fixups.c +++ b/arch/i386/kernel/reboot_fixups.c @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -56,6 +57,11 @@ void mach_reboot_fixups(void) struct pci_dev *dev; int i; + /* we can be called from sysrq-B code. In such a case it is + * prohibited to dig PCI */ + if (in_interrupt()) + return; + for (i=0; i < ARRAY_SIZE(fixups_table); i++) { cur = &(fixups_table[i]); dev = pci_get_device(cur->vendor, cur->device, NULL);