]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
cxl: Ignore probes for virtual afu pci devices
authorVaibhav Jain <vaibhav@linux.vnet.ibm.com>
Mon, 29 Feb 2016 05:40:53 +0000 (11:10 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 9 Mar 2016 12:40:03 +0000 (23:40 +1100)
Add a check at the beginning of cxl_probe function to ignore virtual pci
devices created for each afu registered. This fixes the the errors
messages logged about missing CXL vsec, when cxl probe is unable to
find necessary vsec entries in device pci config space. The error
message logged are of the form :

cxl-pci 0004:00:00.0: ABORTING: CXL VSEC not found!
cxl-pci 0004:00:00.0: cxl_init_adapter failed: -19

Cc: Ian Munsie <imunsie@au1.ibm.com>
Cc: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Reviewed-by: fbarrat@linux.vnet.ibm.com
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Acked-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/misc/cxl/cxl.h
drivers/misc/cxl/pci.c
drivers/misc/cxl/vphb.c

index e345860c25eb995e81a3a82750cab71f2360b148..38e21cf7806ed59d6c925edd3e34f5c519d6a510 100644 (file)
@@ -880,4 +880,6 @@ extern const struct cxl_backend_ops cxl_native_ops;
 extern const struct cxl_backend_ops cxl_guest_ops;
 extern const struct cxl_backend_ops *cxl_ops;
 
+/* check if the given pci_dev is on the the cxl vphb bus */
+bool cxl_pci_is_vphb_device(struct pci_dev *dev);
 #endif
index 6cae0445a7c809827e44373c8959c1a89c84351d..6634b7a3c42ba90b4c63e3be416a80bd392bb260 100644 (file)
@@ -1243,6 +1243,11 @@ static int cxl_probe(struct pci_dev *dev, const struct pci_device_id *id)
        int slice;
        int rc;
 
+       if (cxl_pci_is_vphb_device(dev)) {
+               dev_dbg(&dev->dev, "cxl_init_adapter: Ignoring cxl vphb device\n");
+               return -ENODEV;
+       }
+
        if (cxl_verbose)
                dump_cxl_config_space(dev);
 
index 490b934864510697ba63bfd0d718213856046600..cdc7723b845dba3a086b4357c6cccca231423e5b 100644 (file)
@@ -272,6 +272,15 @@ void cxl_pci_vphb_remove(struct cxl_afu *afu)
        pcibios_free_controller(phb);
 }
 
+bool cxl_pci_is_vphb_device(struct pci_dev *dev)
+{
+       struct pci_controller *phb;
+
+       phb = pci_bus_to_host(dev->bus);
+
+       return (phb->ops == &cxl_pcie_pci_ops);
+}
+
 struct cxl_afu *cxl_pci_to_afu(struct pci_dev *dev)
 {
        struct pci_controller *phb;