PCI: Allow hotplug service drivers to operate in polling mode
authorRajat Jain <rajatxjain@gmail.com>
Mon, 31 Mar 2014 23:51:23 +0000 (16:51 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 24 Apr 2014 22:47:46 +0000 (16:47 -0600)
Today the PCIe port bus driver disables the Hot-plug service if the port
device does not have the capability to generate interrupts.  However, a
user must be able to use the "pciehp_poll_mode" parameter to use the pciehp
in polling method in such a case.  Today it is not possible.

This patch allows a hotplug service driver to decide whether or not it
would like to continue in the absence of interrupts.

Signed-off-by: Rajat Jain <rajatxjain@gmail.com>
Signed-off-by: Rajat Jain <rajatjain@juniper.net>
Signed-off-by: Guenter Roeck <groeck@juniper.net>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pcie/portdrv_core.c

index 986f8eadfd39397aff7d38c71452d86b3e6fa530..f6503add2f3504627ac8c97394336f369040d8df 100644 (file)
@@ -379,10 +379,13 @@ int pcie_port_device_register(struct pci_dev *dev)
        /*
         * Initialize service irqs. Don't use service devices that
         * require interrupts if there is no way to generate them.
+        * However, some drivers may have a polling mode (e.g. pciehp_poll_mode)
+        * that can be used in the absence of irqs.  Allow them to determine
+        * if that is to be used.
         */
        status = init_service_irqs(dev, irqs, capabilities);
        if (status) {
-               capabilities &= PCIE_PORT_SERVICE_VC;
+               capabilities &= PCIE_PORT_SERVICE_VC | PCIE_PORT_SERVICE_HP;
                if (!capabilities)
                        goto error_disable;
        }