[POWERPC] EEH failure to mark pci slot as frozen.
authorLinas Vepstas <linas@austin.ibm.com>
Mon, 25 Sep 2006 23:01:42 +0000 (18:01 -0500)
committerPaul Mackerras <paulus@samba.org>
Tue, 26 Sep 2006 05:41:03 +0000 (15:41 +1000)
Bug fix: when marking a slot as frozen, we forgot to mark
pci device itself as frozen. (we did manage to mark the
pci children, but forget the parent itself.)

This is needed so that some device drivers can check the
pci status in critical sections (e.g. in spin loops with
interrupts disabled).

Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/pseries/eeh.c

index 84bc8f7e17ef77481269204890e2b576e1c2810f..3c2d63ebf787fae9e60e3c98713c36d3e1590d8f 100644 (file)
@@ -225,6 +225,7 @@ static void __eeh_mark_slot (struct device_node *dn, int mode_flag)
 
 void eeh_mark_slot (struct device_node *dn, int mode_flag)
 {
+       struct pci_dev *dev;
        dn = find_device_pe (dn);
 
        /* Back up one, since config addrs might be shared */
@@ -232,6 +233,12 @@ void eeh_mark_slot (struct device_node *dn, int mode_flag)
                dn = dn->parent;
 
        PCI_DN(dn)->eeh_mode |= mode_flag;
+
+       /* Mark the pci device too */
+       dev = PCI_DN(dn)->pcidev;
+       if (dev)
+               dev->error_state = pci_channel_io_frozen;
+
        __eeh_mark_slot (dn->child, mode_flag);
 }