Skip to content

Commit

Permalink
PCI: pci_get_device call from interrupt in reboot fixups
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Denis V. Lunev authored and Greg Kroah-Hartman committed Oct 12, 2007
1 parent aa24886 commit 3d034ae
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions arch/x86/kernel/reboot_fixups_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 3d034ae

Please sign in to comment.