PCI: hotplug: pciehp: Removed check for hotplug of display devices
authorPraveen Kalamegham <praveen@nextio.com>
Wed, 19 May 2010 22:03:12 +0000 (17:03 -0500)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 21 May 2010 21:43:46 +0000 (14:43 -0700)
Removed check to prevent hotplug of display devices within pciehp.
Originally this was thought to have been required within the PCI
Hotplug specification for some legacy devices.  However there is
no such requirement in the most recent revision. The check prevents
hotplug of not only display devices but also computational GPUs
which require serviceability.

Signed-off-by: Praveen Kalamegham <praveen@nextio.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/hotplug/pciehp_pci.c

index 0a16444c14c9d46d80ad391d5759cc27e0ab19f9..2fce726758d2f1bc0c5d24dff8ca3690707c4a56 100644 (file)
@@ -84,12 +84,6 @@ int pciehp_configure_device(struct slot *p_slot)
                dev = pci_get_slot(parent, PCI_DEVFN(0, fn));
                if (!dev)
                        continue;
-               if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
-                       ctrl_err(ctrl, "Cannot hot-add display device %s\n",
-                                pci_name(dev));
-                       pci_dev_put(dev);
-                       continue;
-               }
                if ((dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) ||
                                (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) {
                        pciehp_add_bridge(dev);
@@ -133,15 +127,9 @@ int pciehp_unconfigure_device(struct slot *p_slot)
                presence = 0;
 
        for (j = 0; j < 8; j++) {
-               struct pci_devtemp = pci_get_slot(parent, PCI_DEVFN(0, j));
+               struct pci_dev *temp = pci_get_slot(parent, PCI_DEVFN(0, j));
                if (!temp)
                        continue;
-               if ((temp->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
-                       ctrl_err(ctrl, "Cannot remove display device %s\n",
-                                pci_name(temp));
-                       pci_dev_put(temp);
-                       continue;
-               }
                if (temp->hdr_type == PCI_HEADER_TYPE_BRIDGE && presence) {
                        pci_read_config_byte(temp, PCI_BRIDGE_CONTROL, &bctl);
                        if (bctl & PCI_BRIDGE_CTL_VGA) {
@@ -149,7 +137,8 @@ int pciehp_unconfigure_device(struct slot *p_slot)
                                         "Cannot remove display device %s\n",
                                         pci_name(temp));
                                pci_dev_put(temp);
-                               continue;
+                               rc = EINVAL;
+                               break;
                        }
                }
                pci_remove_bus_device(temp);