OpenVZ Forum


Home » Mailing lists » Devel » [PATCH] pci_get_device call from interrupt in reboot fixups
[PATCH] pci_get_device call from interrupt in reboot fixups [message #15605] Tue, 07 August 2007 09:04
den is currently offline  den
Messages: 494
Registered: December 2005
Senior Member
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);
Previous Topic: [PATCH] pci_get_device call from interrupt in reboot fixups
Next Topic: [PATCH] pci_get_device call from interrupt in reboot fixups (description fixed)
Goto Forum:
  


Current Time: Thu Jul 03 16:21:34 GMT 2025

Total time taken to generate the page: 0.02601 seconds