]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
xen/pcifront: Process failure for pcifront_(re)scan_root()
authorChen Gang <gang.chen.5i5j@gmail.com>
Mon, 6 Oct 2014 03:04:45 +0000 (11:04 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 6 Nov 2014 04:14:08 +0000 (21:14 -0700)
When pcifront_try_connect() finds no PCI roots, it falls back to calling
pcifront_scan_root() for 0000:00.  If that fails, it used to switch to
XenbusStateConnected and return success (because xenbus_switch_state()
currently always succeeds).

If pcifront_scan_root() fails, leave the XenbusState unchanged and return
an error code.

Similarly, pcifront_attach_devices() falls back to calling
pcifront_rescan_root() for 0000:00.  If that fails, it used to switch to
XenbusStateConnected and return an error code.

If pcifront_rescan_root() fails, leave the XenbusState unchanged and return
the error code.

[bhelgaas: changelog]
Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
drivers/pci/xen-pcifront.c

index 116ca3746adb47cd5887bad8b8014ccdb5641b9c..93316504f56712670495657d165f67fec92734ad 100644 (file)
@@ -866,6 +866,11 @@ static int pcifront_try_connect(struct pcifront_device *pdev)
                xenbus_dev_error(pdev->xdev, err,
                                 "No PCI Roots found, trying 0000:00");
                err = pcifront_scan_root(pdev, 0, 0);
+               if (err) {
+                       xenbus_dev_fatal(pdev->xdev, err,
+                                        "Error scanning PCI root 0000:00");
+                       goto out;
+               }
                num_roots = 0;
        } else if (err != 1) {
                if (err == 0)
@@ -947,6 +952,11 @@ static int pcifront_attach_devices(struct pcifront_device *pdev)
                xenbus_dev_error(pdev->xdev, err,
                                 "No PCI Roots found, trying 0000:00");
                err = pcifront_rescan_root(pdev, 0, 0);
+               if (err) {
+                       xenbus_dev_fatal(pdev->xdev, err,
+                                        "Error scanning PCI root 0000:00");
+                       goto out;
+               }
                num_roots = 0;
        } else if (err != 1) {
                if (err == 0)