Messages in this thread Patch in this message | | | Date | Tue, 7 Aug 2007 13:04:47 +0400 | From | "Denis V. Lunev" <> | Subject | [PATCH] pci_get_device call from interrupt in reboot fixups |
| |
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. ---
--- ./arch/i386/kernel/reboot_fixups.c.fixup2 2007-08-07 12:30:30.000000000 +0400 +++ ./arch/i386/kernel/reboot_fixups.c 2007-08-07 12:31:22.000000000 +0400 @@ -11,6 +11,7 @@ #include <asm/delay.h> #include <linux/pci.h> #include <linux/reboot_fixups.h> +#include <linux/interrupt.h> static void cs5530a_warm_reset(struct pci_dev *dev) { @@ -43,6 +44,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); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |