diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-19 19:02:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-19 19:02:05 -0400 |
commit | a19eee5e5e8b11b4a37490f1272d9509dcfcb263 (patch) | |
tree | 7eb8e3bbbfb89c3d2ed186961b8656b58252f995 /arch/sparc64/kernel/pci_psycho.c | |
parent | 764527a1b3294b4560203979f39a3671b9a26676 (diff) | |
parent | 9843099ff46467461d6476a827f6f9701682dbac (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
sparc64: Fix SMP bootup with CONFIG_STACK_DEBUG or ftrace.
sparc64: Fix OOPS in psycho_pcierr_intr_other().
Diffstat (limited to 'arch/sparc64/kernel/pci_psycho.c')
-rw-r--r-- | arch/sparc64/kernel/pci_psycho.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/sparc64/kernel/pci_psycho.c b/arch/sparc64/kernel/pci_psycho.c index e205ade69cfc..f85b6bebb0be 100644 --- a/arch/sparc64/kernel/pci_psycho.c +++ b/arch/sparc64/kernel/pci_psycho.c | |||
@@ -575,7 +575,7 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm | |||
575 | { | 575 | { |
576 | unsigned long csr_reg, csr, csr_error_bits; | 576 | unsigned long csr_reg, csr, csr_error_bits; |
577 | irqreturn_t ret = IRQ_NONE; | 577 | irqreturn_t ret = IRQ_NONE; |
578 | u16 stat; | 578 | u16 stat, *addr; |
579 | 579 | ||
580 | if (is_pbm_a) { | 580 | if (is_pbm_a) { |
581 | csr_reg = pbm->controller_regs + PSYCHO_PCIA_CTRL; | 581 | csr_reg = pbm->controller_regs + PSYCHO_PCIA_CTRL; |
@@ -597,7 +597,9 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm | |||
597 | printk("%s: PCI SERR signal asserted.\n", pbm->name); | 597 | printk("%s: PCI SERR signal asserted.\n", pbm->name); |
598 | ret = IRQ_HANDLED; | 598 | ret = IRQ_HANDLED; |
599 | } | 599 | } |
600 | pci_read_config_word(pbm->pci_bus->self, PCI_STATUS, &stat); | 600 | addr = psycho_pci_config_mkaddr(pbm, pbm->pci_first_busno, |
601 | 0, PCI_STATUS); | ||
602 | pci_config_read16(addr, &stat); | ||
601 | if (stat & (PCI_STATUS_PARITY | | 603 | if (stat & (PCI_STATUS_PARITY | |
602 | PCI_STATUS_SIG_TARGET_ABORT | | 604 | PCI_STATUS_SIG_TARGET_ABORT | |
603 | PCI_STATUS_REC_TARGET_ABORT | | 605 | PCI_STATUS_REC_TARGET_ABORT | |
@@ -605,7 +607,7 @@ static irqreturn_t psycho_pcierr_intr_other(struct pci_pbm_info *pbm, int is_pbm | |||
605 | PCI_STATUS_SIG_SYSTEM_ERROR)) { | 607 | PCI_STATUS_SIG_SYSTEM_ERROR)) { |
606 | printk("%s: PCI bus error, PCI_STATUS[%04x]\n", | 608 | printk("%s: PCI bus error, PCI_STATUS[%04x]\n", |
607 | pbm->name, stat); | 609 | pbm->name, stat); |
608 | pci_write_config_word(pbm->pci_bus->self, PCI_STATUS, 0xffff); | 610 | pci_config_write16(addr, 0xffff); |
609 | ret = IRQ_HANDLED; | 611 | ret = IRQ_HANDLED; |
610 | } | 612 | } |
611 | return ret; | 613 | return ret; |