powerpc/pci: Fix SRIOV not building without EEH enabled
authorRussell Currey <ruscur@russell.cc>
Fri, 17 Jun 2016 05:25:17 +0000 (15:25 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 17 Jun 2016 06:52:22 +0000 (16:52 +1000)
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: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Russell Currey <ruscur@russell.cc>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/pci_dn.c

index ecdccce..afeda26 100644 (file)
@@ -181,7 +181,9 @@ struct pci_dn *add_dev_pci_data(struct pci_dev *pdev)
 {
 #ifdef CONFIG_PCI_IOV
        struct pci_dn *parent, *pdn;
+#ifdef CONFIG_EEH
        struct eeh_dev *edev;
+#endif /* CONFIG_EEH */
        int i;
 
        /* Only support IOV for now */
@@ -208,11 +210,13 @@ struct pci_dn *add_dev_pci_data(struct pci_dev *pdev)
                        return NULL;
                }
 
+#ifdef CONFIG_EEH
                /* Create the EEH device for the VF */
                eeh_dev_init(pdn, pci_bus_to_host(pdev->bus));
                edev = pdn_to_eeh_dev(pdn);
                BUG_ON(!edev);
                edev->physfn = pdev;
+#endif /* CONFIG_EEH */
        }
 #endif /* CONFIG_PCI_IOV */
 
@@ -266,12 +270,14 @@ void remove_dev_pci_data(struct pci_dev *pdev)
                            pdn->devfn != pci_iov_virtfn_devfn(pdev, i))
                                continue;
 
+#ifdef CONFIG_EEH
                        /* Release EEH device for the VF */
                        edev = pdn_to_eeh_dev(pdn);
                        if (edev) {
                                pdn->edev = NULL;
                                kfree(edev);
                        }
+#endif /* CONFIG_EEH */
 
                        if (!list_empty(&pdn->list))
                                list_del(&pdn->list);