powerpc/eeh: Create PE for VFs
This creates PEs for VFs in the weak function pcibios_bus_add_device(). Those PEs for VFs are identified with newly introduced flag EEH_PE_VF so that we treat them differently during EEH recovery. Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com> Acked-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
39218cd00e
commit
c29fa27d26
|
@ -72,6 +72,7 @@ struct pci_dn;
|
|||
#define EEH_PE_PHB (1 << 1) /* PHB PE */
|
||||
#define EEH_PE_DEVICE (1 << 2) /* Device PE */
|
||||
#define EEH_PE_BUS (1 << 3) /* Bus PE */
|
||||
#define EEH_PE_VF (1 << 4) /* VF PE */
|
||||
|
||||
#define EEH_PE_ISOLATED (1 << 0) /* Isolated PE */
|
||||
#define EEH_PE_RECOVERING (1 << 1) /* Recovering PE */
|
||||
|
|
|
@ -299,7 +299,10 @@ static struct eeh_pe *eeh_pe_get_parent(struct eeh_dev *edev)
|
|||
* EEH device already having associated PE, but
|
||||
* the direct parent EEH device doesn't have yet.
|
||||
*/
|
||||
pdn = pdn ? pdn->parent : NULL;
|
||||
if (edev->physfn)
|
||||
pdn = pci_get_pdn(edev->physfn);
|
||||
else
|
||||
pdn = pdn ? pdn->parent : NULL;
|
||||
while (pdn) {
|
||||
/* We're poking out of PCI territory */
|
||||
parent = pdn_to_eeh_dev(pdn);
|
||||
|
@ -382,7 +385,10 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
|
|||
}
|
||||
|
||||
/* Create a new EEH PE */
|
||||
pe = eeh_pe_alloc(edev->phb, EEH_PE_DEVICE);
|
||||
if (edev->physfn)
|
||||
pe = eeh_pe_alloc(edev->phb, EEH_PE_VF);
|
||||
else
|
||||
pe = eeh_pe_alloc(edev->phb, EEH_PE_DEVICE);
|
||||
if (!pe) {
|
||||
pr_err("%s: out of memory!\n", __func__);
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -1503,6 +1503,22 @@ static struct eeh_ops pnv_eeh_ops = {
|
|||
.restore_config = pnv_eeh_restore_config
|
||||
};
|
||||
|
||||
void pcibios_bus_add_device(struct pci_dev *pdev)
|
||||
{
|
||||
struct pci_dn *pdn = pci_get_pdn(pdev);
|
||||
|
||||
if (!pdev->is_virtfn)
|
||||
return;
|
||||
|
||||
/*
|
||||
* The following operations will fail if VF's sysfs files
|
||||
* aren't created or its resources aren't finalized.
|
||||
*/
|
||||
eeh_add_device_early(pdn);
|
||||
eeh_add_device_late(pdev);
|
||||
eeh_sysfs_add_device(pdev);
|
||||
}
|
||||
|
||||
/**
|
||||
* eeh_powernv_init - Register platform dependent EEH operations
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue