Commit fb36e907 authored by Russell Currey's avatar Russell Currey Committed by Michael Ellerman

powerpc/pci: Fix SRIOV not building without EEH enabled

On Book3E CPUs (and possibly other configs), it is possible to have SRIOV
(CONFIG_PCI_IOV) set without CONFIG_EEH.  The SRIOV code does not check
for this, and if EEH is disabled, pci_dn.c fails to build.

Fix this by gating the EEH-specific code in the SRIOV implementation
behind CONFIG_EEH.

Fixes: 39218cd0 ("powerpc/eeh: EEH device for VF")
Reported-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarRussell Currey <ruscur@russell.cc>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent a4307390
...@@ -181,7 +181,9 @@ struct pci_dn *add_dev_pci_data(struct pci_dev *pdev) ...@@ -181,7 +181,9 @@ struct pci_dn *add_dev_pci_data(struct pci_dev *pdev)
{ {
#ifdef CONFIG_PCI_IOV #ifdef CONFIG_PCI_IOV
struct pci_dn *parent, *pdn; struct pci_dn *parent, *pdn;
#ifdef CONFIG_EEH
struct eeh_dev *edev; struct eeh_dev *edev;
#endif /* CONFIG_EEH */
int i; int i;
/* Only support IOV for now */ /* Only support IOV for now */
...@@ -208,11 +210,13 @@ struct pci_dn *add_dev_pci_data(struct pci_dev *pdev) ...@@ -208,11 +210,13 @@ struct pci_dn *add_dev_pci_data(struct pci_dev *pdev)
return NULL; return NULL;
} }
#ifdef CONFIG_EEH
/* Create the EEH device for the VF */ /* Create the EEH device for the VF */
eeh_dev_init(pdn, pci_bus_to_host(pdev->bus)); eeh_dev_init(pdn, pci_bus_to_host(pdev->bus));
edev = pdn_to_eeh_dev(pdn); edev = pdn_to_eeh_dev(pdn);
BUG_ON(!edev); BUG_ON(!edev);
edev->physfn = pdev; edev->physfn = pdev;
#endif /* CONFIG_EEH */
} }
#endif /* CONFIG_PCI_IOV */ #endif /* CONFIG_PCI_IOV */
...@@ -266,12 +270,14 @@ void remove_dev_pci_data(struct pci_dev *pdev) ...@@ -266,12 +270,14 @@ void remove_dev_pci_data(struct pci_dev *pdev)
pdn->devfn != pci_iov_virtfn_devfn(pdev, i)) pdn->devfn != pci_iov_virtfn_devfn(pdev, i))
continue; continue;
#ifdef CONFIG_EEH
/* Release EEH device for the VF */ /* Release EEH device for the VF */
edev = pdn_to_eeh_dev(pdn); edev = pdn_to_eeh_dev(pdn);
if (edev) { if (edev) {
pdn->edev = NULL; pdn->edev = NULL;
kfree(edev); kfree(edev);
} }
#endif /* CONFIG_EEH */
if (!list_empty(&pdn->list)) if (!list_empty(&pdn->list))
list_del(&pdn->list); list_del(&pdn->list);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment