aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorLinas Vepstas <linas@austin.ibm.com>2007-11-02 16:27:50 -0400
committerPaul Mackerras <paulus@samba.org>2007-11-07 22:15:32 -0500
commit2a50f144fc6081269468abf79e1907c6669bef22 (patch)
tree8a67d1347fe5fc078a2000e3cd5d1986cd6d606b /arch/powerpc
parent638799b33586339ac007b0fef497a15d81a271aa (diff)
[POWERPC] EEH: Drivers that need reset trump others
Bugfix: if a driver controlling one part of a multi-function PCI card has asked for a reset, honor that request above all others. Signed-off-by: Linas Vepstas <linas@austin.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c
index 6e631b5a28f0..57e025e84ab4 100644
--- a/arch/powerpc/platforms/pseries/eeh_driver.c
+++ b/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -105,9 +105,10 @@ static void eeh_report_error(struct pci_dev *dev, void *userdata)
105 return; 105 return;
106 106
107 rc = driver->err_handler->error_detected (dev, pci_channel_io_frozen); 107 rc = driver->err_handler->error_detected (dev, pci_channel_io_frozen);
108
109 /* A driver that needs a reset trumps all others */
110 if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc;
108 if (*res == PCI_ERS_RESULT_NONE) *res = rc; 111 if (*res == PCI_ERS_RESULT_NONE) *res = rc;
109 if (*res == PCI_ERS_RESULT_DISCONNECT &&
110 rc == PCI_ERS_RESULT_NEED_RESET) *res = rc;
111} 112}
112 113
113/** 114/**
@@ -129,9 +130,10 @@ static void eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata)
129 return; 130 return;
130 131
131 rc = driver->err_handler->mmio_enabled (dev); 132 rc = driver->err_handler->mmio_enabled (dev);
133
134 /* A driver that needs a reset trumps all others */
135 if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc;
132 if (*res == PCI_ERS_RESULT_NONE) *res = rc; 136 if (*res == PCI_ERS_RESULT_NONE) *res = rc;
133 if (*res == PCI_ERS_RESULT_DISCONNECT &&
134 rc == PCI_ERS_RESULT_NEED_RESET) *res = rc;
135} 137}
136 138
137/** 139/**