diff options
author | Linas Vepstas <linas@austin.ibm.com> | 2007-11-03 07:27:50 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-11-08 14:15:32 +1100 |
commit | 2a50f144fc6081269468abf79e1907c6669bef22 (patch) | |
tree | 8a67d1347fe5fc078a2000e3cd5d1986cd6d606b /arch/powerpc/platforms/pseries/eeh_driver.c | |
parent | 638799b33586339ac007b0fef497a15d81a271aa (diff) | |
download | linux-2a50f144fc6081269468abf79e1907c6669bef22.tar.gz linux-2a50f144fc6081269468abf79e1907c6669bef22.tar.bz2 linux-2a50f144fc6081269468abf79e1907c6669bef22.zip |
[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/platforms/pseries/eeh_driver.c')
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_driver.c | 10 |
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) return; rc = driver->err_handler->error_detected (dev, pci_channel_io_frozen); + + /* A driver that needs a reset trumps all others */ + if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; if (*res == PCI_ERS_RESULT_NONE) *res = rc; - if (*res == PCI_ERS_RESULT_DISCONNECT && - rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; } /** @@ -129,9 +130,10 @@ static void eeh_report_mmio_enabled(struct pci_dev *dev, void *userdata) return; rc = driver->err_handler->mmio_enabled (dev); + + /* A driver that needs a reset trumps all others */ + if (rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; if (*res == PCI_ERS_RESULT_NONE) *res = rc; - if (*res == PCI_ERS_RESULT_DISCONNECT && - rc == PCI_ERS_RESULT_NEED_RESET) *res = rc; } /** |