Skip to content

Commit

Permalink
powerpc/eeh: Don't collect PCI-CFG data on PHB
Browse files Browse the repository at this point in the history
When the PHB is fenced or dead, it's pointless to collect the data
from PCI config space of subordinate PCI devices since it should
return 0xFF's. The patch also fixes overwritten buffer while getting
PCI config data.

Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Gavin Shan authored and Benjamin Herrenschmidt committed Jul 1, 2013
1 parent 090b928 commit c35ae17
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions arch/powerpc/kernel/eeh.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,16 +232,30 @@ void eeh_slot_error_detail(struct eeh_pe *pe, int severity)
{
size_t loglen = 0;
struct eeh_dev *edev;
bool valid_cfg_log = true;

eeh_pci_enable(pe, EEH_OPT_THAW_MMIO);
eeh_ops->configure_bridge(pe);
eeh_pe_restore_bars(pe);

pci_regs_buf[0] = 0;
eeh_pe_for_each_dev(pe, edev) {
loglen += eeh_gather_pci_data(edev, pci_regs_buf,
EEH_PCI_REGS_LOG_LEN);
}
/*
* When the PHB is fenced or dead, it's pointless to collect
* the data from PCI config space because it should return
* 0xFF's. For ER, we still retrieve the data from the PCI
* config space.
*/
if (eeh_probe_mode_dev() &&
(pe->type & EEH_PE_PHB) &&
(pe->state & (EEH_PE_ISOLATED | EEH_PE_PHB_DEAD)))
valid_cfg_log = false;

if (valid_cfg_log) {
eeh_pci_enable(pe, EEH_OPT_THAW_MMIO);
eeh_ops->configure_bridge(pe);
eeh_pe_restore_bars(pe);

pci_regs_buf[0] = 0;
eeh_pe_for_each_dev(pe, edev) {
loglen += eeh_gather_pci_data(edev, pci_regs_buf + loglen,
EEH_PCI_REGS_LOG_LEN - loglen);
}
}

eeh_ops->get_log(pe, severity, pci_regs_buf, loglen);
}
Expand Down

0 comments on commit c35ae17

Please sign in to comment.