diff options
Diffstat (limited to 'arch/x86/kernel/reboot_fixups_32.c')
-rw-r--r-- | arch/x86/kernel/reboot_fixups_32.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/x86/kernel/reboot_fixups_32.c b/arch/x86/kernel/reboot_fixups_32.c index 03e1cce58f49..139eb03490f5 100644 --- a/arch/x86/kernel/reboot_fixups_32.c +++ b/arch/x86/kernel/reboot_fixups_32.c | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include <asm/delay.h> | 12 | #include <asm/delay.h> |
13 | #include <linux/pci.h> | 13 | #include <linux/pci.h> |
14 | #include <linux/interrupt.h> | ||
14 | #include <asm/reboot_fixups.h> | 15 | #include <asm/reboot_fixups.h> |
15 | #include <asm/msr.h> | 16 | #include <asm/msr.h> |
16 | 17 | ||
@@ -56,6 +57,11 @@ void mach_reboot_fixups(void) | |||
56 | struct pci_dev *dev; | 57 | struct pci_dev *dev; |
57 | int i; | 58 | int i; |
58 | 59 | ||
60 | /* we can be called from sysrq-B code. In such a case it is | ||
61 | * prohibited to dig PCI */ | ||
62 | if (in_interrupt()) | ||
63 | return; | ||
64 | |||
59 | for (i=0; i < ARRAY_SIZE(fixups_table); i++) { | 65 | for (i=0; i < ARRAY_SIZE(fixups_table); i++) { |
60 | cur = &(fixups_table[i]); | 66 | cur = &(fixups_table[i]); |
61 | dev = pci_get_device(cur->vendor, cur->device, NULL); | 67 | dev = pci_get_device(cur->vendor, cur->device, NULL); |