PCI: 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. Signed-off-by: Denis V. Lunev <den@openvz.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
aa24886e37
commit
3d034aecd8
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include <asm/delay.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/reboot_fixups.h>
|
||||
#include <asm/msr.h>
|
||||
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue