aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/pseries/eeh.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-09 15:16:52 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-09 15:16:52 -0800
commitc4888f9ffafe7db107b7eafb3a68eaeeff3779c3 (patch)
treed30da15f6b5d74c8c04fd92991af5e1615d95691 /arch/powerpc/platforms/pseries/eeh.c
parente36aeee65d4db050bd8713537416a0a0632db079 (diff)
parent688016f4e2028e3c2c27e959ad001536e10ee2c5 (diff)
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (37 commits) [POWERPC] EEH: Make sure warning message is printed [POWERPC] Make altivec code in swsusp_32.S depend on CONFIG_ALTIVEC [POWERPC] windfarm: Fix windfarm thread freezer interaction [POWERPC] Fix si_addr value on low level hash failures [POWERPC] Refresh ppc64_defconfig and enable pasemi-related options [POWERPC] pasemi: Update defconfig [POWERPC] iSeries: Fix ref counting in vio setup [POWERPC] ] Fix memset size error [POWERPC] Fix link errors for allyesconfig [POWERPC] iSeries_init_IRQ non-PCI tidy [POWERPC] Change fallocate to match unistd.h on powerpc [POWERPC] EEH: Avoid crash on null device [POWERPC] EEH: Drivers that need reset trump others [POWERPC] EEH: Clean up comments [POWERPC] Fix off-by-one error in setting decrementer on Book E/4xx (v2) [POWERPC] Fix switch_slb handling of 1T ESID values [POWERPC] Fix build failure when CONFIG_VIRT_CPU_ACCOUNTING is not defined [POWERPC] Include udbg.h when using udbg_printf [POWERPC] Fix cache line vs. block size confusion [POWERPC] Fix sysctl table check failure on PowerMac ...
Diffstat (limited to 'arch/powerpc/platforms/pseries/eeh.c')
-rw-r--r--arch/powerpc/platforms/pseries/eeh.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index 22322b35a0f..fb3d636e088 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -186,6 +186,11 @@ static size_t gather_pci_data(struct pci_dn *pdn, char * buf, size_t len)
n += scnprintf(buf+n, len-n, "cmd/stat:%x\n", cfg);
printk(KERN_WARNING "EEH: PCI cmd/status register: %08x\n", cfg);
+ if (!dev) {
+ printk(KERN_WARNING "EEH: no PCI device for this of node\n");
+ return n;
+ }
+
/* Gather bridge-specific registers */
if (dev->class >> 16 == PCI_BASE_CLASS_BRIDGE) {
rtas_read_config(pdn, PCI_SEC_STATUS, 2, &cfg);
@@ -198,7 +203,7 @@ static size_t gather_pci_data(struct pci_dn *pdn, char * buf, size_t len)
}
/* Dump out the PCI-X command and status regs */
- cap = pci_find_capability(pdn->pcidev, PCI_CAP_ID_PCIX);
+ cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
if (cap) {
rtas_read_config(pdn, cap, 4, &cfg);
n += scnprintf(buf+n, len-n, "pcix-cmd:%x\n", cfg);
@@ -210,7 +215,7 @@ static size_t gather_pci_data(struct pci_dn *pdn, char * buf, size_t len)
}
/* If PCI-E capable, dump PCI-E cap 10, and the AER */
- cap = pci_find_capability(pdn->pcidev, PCI_CAP_ID_EXP);
+ cap = pci_find_capability(dev, PCI_CAP_ID_EXP);
if (cap) {
n += scnprintf(buf+n, len-n, "pci-e cap10:\n");
printk(KERN_WARNING
@@ -222,7 +227,7 @@ static size_t gather_pci_data(struct pci_dn *pdn, char * buf, size_t len)
printk(KERN_WARNING "EEH: PCI-E %02x: %08x\n", i, cfg);
}
- cap = pci_find_ext_capability(pdn->pcidev, PCI_EXT_CAP_ID_ERR);
+ cap = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
if (cap) {
n += scnprintf(buf+n, len-n, "pci-e AER:\n");
printk(KERN_WARNING
@@ -318,7 +323,7 @@ eeh_wait_for_slot_status(struct pci_dn *pdn, int max_wait_msecs)
if (rets[2] == 0) return -1; /* permanently unavailable */
- if (max_wait_msecs <= 0) return -1;
+ if (max_wait_msecs <= 0) break;
mwait = rets[2];
if (mwait <= 0) {