Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c35ae179 authored by Gavin Shan's avatar Gavin Shan Committed by Benjamin Herrenschmidt
Browse files

powerpc/eeh: Don't collect PCI-CFG data on PHB



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: default avatarGavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 090b9284
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -232,15 +232,29 @@ void eeh_slot_error_detail(struct eeh_pe *pe, int severity)
{
	size_t loglen = 0;
	struct eeh_dev *edev;
	bool valid_cfg_log = true;

	/*
	 * 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,
				EEH_PCI_REGS_LOG_LEN);
			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);