diff options
Diffstat (limited to 'drivers/pci')
| -rw-r--r-- | drivers/pci/hotplug/cpqphp_core.c | 7 | ||||
| -rw-r--r-- | drivers/pci/pci-sysfs.c | 37 | ||||
| -rw-r--r-- | drivers/pci/setup-res.c | 10 | ||||
| -rw-r--r-- | drivers/pci/slot.c | 48 |
4 files changed, 12 insertions, 90 deletions
diff --git a/drivers/pci/hotplug/cpqphp_core.c b/drivers/pci/hotplug/cpqphp_core.c index b3e5580c837b..4952c3b9379d 100644 --- a/drivers/pci/hotplug/cpqphp_core.c +++ b/drivers/pci/hotplug/cpqphp_core.c | |||
| @@ -828,7 +828,14 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 828 | pci_name(pdev), err); | 828 | pci_name(pdev), err); |
| 829 | return err; | 829 | return err; |
| 830 | } | 830 | } |
| 831 | |||
| 831 | bus = pdev->subordinate; | 832 | bus = pdev->subordinate; |
| 833 | if (!bus) { | ||
| 834 | dev_notice(&pdev->dev, "the device is not a bridge, " | ||
| 835 | "skipping\n"); | ||
| 836 | rc = -ENODEV; | ||
| 837 | goto err_disable_device; | ||
| 838 | } | ||
| 832 | 839 | ||
| 833 | /* Need to read VID early b/c it's used to differentiate CPQ and INTC | 840 | /* Need to read VID early b/c it's used to differentiate CPQ and INTC |
| 834 | * discovery | 841 | * discovery |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index afd2fbf7d797..c9957f68ac9b 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
| @@ -1035,39 +1035,6 @@ error: | |||
| 1035 | return retval; | 1035 | return retval; |
| 1036 | } | 1036 | } |
| 1037 | 1037 | ||
| 1038 | static void pci_remove_slot_links(struct pci_dev *dev) | ||
| 1039 | { | ||
| 1040 | char func[10]; | ||
| 1041 | struct pci_slot *slot; | ||
| 1042 | |||
| 1043 | sysfs_remove_link(&dev->dev.kobj, "slot"); | ||
| 1044 | list_for_each_entry(slot, &dev->bus->slots, list) { | ||
| 1045 | if (slot->number != PCI_SLOT(dev->devfn)) | ||
| 1046 | continue; | ||
| 1047 | snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||
| 1048 | sysfs_remove_link(&slot->kobj, func); | ||
| 1049 | } | ||
| 1050 | } | ||
| 1051 | |||
| 1052 | static int pci_create_slot_links(struct pci_dev *dev) | ||
| 1053 | { | ||
| 1054 | int result = 0; | ||
| 1055 | char func[10]; | ||
| 1056 | struct pci_slot *slot; | ||
| 1057 | |||
| 1058 | list_for_each_entry(slot, &dev->bus->slots, list) { | ||
| 1059 | if (slot->number != PCI_SLOT(dev->devfn)) | ||
| 1060 | continue; | ||
| 1061 | result = sysfs_create_link(&dev->dev.kobj, &slot->kobj, "slot"); | ||
| 1062 | if (result) | ||
| 1063 | goto out; | ||
| 1064 | snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||
| 1065 | result = sysfs_create_link(&slot->kobj, &dev->dev.kobj, func); | ||
| 1066 | } | ||
| 1067 | out: | ||
| 1068 | return result; | ||
| 1069 | } | ||
| 1070 | |||
| 1071 | int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) | 1038 | int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) |
| 1072 | { | 1039 | { |
| 1073 | int retval; | 1040 | int retval; |
| @@ -1130,8 +1097,6 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) | |||
| 1130 | if (retval) | 1097 | if (retval) |
| 1131 | goto err_vga_file; | 1098 | goto err_vga_file; |
| 1132 | 1099 | ||
| 1133 | pci_create_slot_links(pdev); | ||
| 1134 | |||
| 1135 | return 0; | 1100 | return 0; |
| 1136 | 1101 | ||
| 1137 | err_vga_file: | 1102 | err_vga_file: |
| @@ -1181,8 +1146,6 @@ void pci_remove_sysfs_dev_files(struct pci_dev *pdev) | |||
| 1181 | if (!sysfs_initialized) | 1146 | if (!sysfs_initialized) |
| 1182 | return; | 1147 | return; |
| 1183 | 1148 | ||
| 1184 | pci_remove_slot_links(pdev); | ||
| 1185 | |||
| 1186 | pci_remove_capabilities_sysfs(pdev); | 1149 | pci_remove_capabilities_sysfs(pdev); |
| 1187 | 1150 | ||
| 1188 | if (pdev->cfg_size < PCI_CFG_SPACE_EXP_SIZE) | 1151 | if (pdev->cfg_size < PCI_CFG_SPACE_EXP_SIZE) |
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 17bed18d24ad..92379e2d37e7 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c | |||
| @@ -97,16 +97,16 @@ int pci_claim_resource(struct pci_dev *dev, int resource) | |||
| 97 | 97 | ||
| 98 | root = pci_find_parent_resource(dev, res); | 98 | root = pci_find_parent_resource(dev, res); |
| 99 | if (!root) { | 99 | if (!root) { |
| 100 | dev_err(&dev->dev, "no compatible bridge window for %pR\n", | 100 | dev_info(&dev->dev, "no compatible bridge window for %pR\n", |
| 101 | res); | 101 | res); |
| 102 | return -EINVAL; | 102 | return -EINVAL; |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | conflict = request_resource_conflict(root, res); | 105 | conflict = request_resource_conflict(root, res); |
| 106 | if (conflict) { | 106 | if (conflict) { |
| 107 | dev_err(&dev->dev, | 107 | dev_info(&dev->dev, |
| 108 | "address space collision: %pR conflicts with %s %pR\n", | 108 | "address space collision: %pR conflicts with %s %pR\n", |
| 109 | res, conflict->name, conflict); | 109 | res, conflict->name, conflict); |
| 110 | return -EBUSY; | 110 | return -EBUSY; |
| 111 | } | 111 | } |
| 112 | 112 | ||
diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c index e0189cf7c558..659eaa0fc48f 100644 --- a/drivers/pci/slot.c +++ b/drivers/pci/slot.c | |||
| @@ -97,50 +97,6 @@ static ssize_t cur_speed_read_file(struct pci_slot *slot, char *buf) | |||
| 97 | return bus_speed_read(slot->bus->cur_bus_speed, buf); | 97 | return bus_speed_read(slot->bus->cur_bus_speed, buf); |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | static void remove_sysfs_files(struct pci_slot *slot) | ||
| 101 | { | ||
| 102 | char func[10]; | ||
| 103 | struct list_head *tmp; | ||
| 104 | |||
| 105 | list_for_each(tmp, &slot->bus->devices) { | ||
| 106 | struct pci_dev *dev = pci_dev_b(tmp); | ||
| 107 | if (PCI_SLOT(dev->devfn) != slot->number) | ||
| 108 | continue; | ||
| 109 | sysfs_remove_link(&dev->dev.kobj, "slot"); | ||
| 110 | |||
| 111 | snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||
| 112 | sysfs_remove_link(&slot->kobj, func); | ||
| 113 | } | ||
| 114 | } | ||
| 115 | |||
| 116 | static int create_sysfs_files(struct pci_slot *slot) | ||
| 117 | { | ||
| 118 | int result; | ||
| 119 | char func[10]; | ||
| 120 | struct list_head *tmp; | ||
| 121 | |||
| 122 | list_for_each(tmp, &slot->bus->devices) { | ||
| 123 | struct pci_dev *dev = pci_dev_b(tmp); | ||
| 124 | if (PCI_SLOT(dev->devfn) != slot->number) | ||
| 125 | continue; | ||
| 126 | |||
| 127 | result = sysfs_create_link(&dev->dev.kobj, &slot->kobj, "slot"); | ||
| 128 | if (result) | ||
| 129 | goto fail; | ||
| 130 | |||
| 131 | snprintf(func, 10, "function%d", PCI_FUNC(dev->devfn)); | ||
| 132 | result = sysfs_create_link(&slot->kobj, &dev->dev.kobj, func); | ||
| 133 | if (result) | ||
| 134 | goto fail; | ||
| 135 | } | ||
| 136 | |||
| 137 | return 0; | ||
| 138 | |||
| 139 | fail: | ||
| 140 | remove_sysfs_files(slot); | ||
| 141 | return result; | ||
| 142 | } | ||
| 143 | |||
| 144 | static void pci_slot_release(struct kobject *kobj) | 100 | static void pci_slot_release(struct kobject *kobj) |
| 145 | { | 101 | { |
| 146 | struct pci_dev *dev; | 102 | struct pci_dev *dev; |
| @@ -153,8 +109,6 @@ static void pci_slot_release(struct kobject *kobj) | |||
| 153 | if (PCI_SLOT(dev->devfn) == slot->number) | 109 | if (PCI_SLOT(dev->devfn) == slot->number) |
| 154 | dev->slot = NULL; | 110 | dev->slot = NULL; |
| 155 | 111 | ||
| 156 | remove_sysfs_files(slot); | ||
| 157 | |||
| 158 | list_del(&slot->list); | 112 | list_del(&slot->list); |
| 159 | 113 | ||
| 160 | kfree(slot); | 114 | kfree(slot); |
| @@ -346,8 +300,6 @@ placeholder: | |||
| 346 | INIT_LIST_HEAD(&slot->list); | 300 | INIT_LIST_HEAD(&slot->list); |
| 347 | list_add(&slot->list, &parent->slots); | 301 | list_add(&slot->list, &parent->slots); |
| 348 | 302 | ||
| 349 | create_sysfs_files(slot); | ||
| 350 | |||
| 351 | list_for_each_entry(dev, &parent->devices, bus_list) | 303 | list_for_each_entry(dev, &parent->devices, bus_list) |
| 352 | if (PCI_SLOT(dev->devfn) == slot_nr) | 304 | if (PCI_SLOT(dev->devfn) == slot_nr) |
| 353 | dev->slot = slot; | 305 | dev->slot = slot; |
