diff options
Diffstat (limited to 'drivers/pci/bus.c')
| -rw-r--r-- | drivers/pci/bus.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 5f7db9d2436e..aadaa3c8096b 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c | |||
| @@ -77,9 +77,12 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, | |||
| 77 | * This adds a single pci device to the global | 77 | * This adds a single pci device to the global |
| 78 | * device list and adds sysfs and procfs entries | 78 | * device list and adds sysfs and procfs entries |
| 79 | */ | 79 | */ |
| 80 | void __devinit pci_bus_add_device(struct pci_dev *dev) | 80 | int __devinit pci_bus_add_device(struct pci_dev *dev) |
| 81 | { | 81 | { |
| 82 | device_add(&dev->dev); | 82 | int retval; |
| 83 | retval = device_add(&dev->dev); | ||
| 84 | if (retval) | ||
| 85 | return retval; | ||
| 83 | 86 | ||
| 84 | down_write(&pci_bus_sem); | 87 | down_write(&pci_bus_sem); |
| 85 | list_add_tail(&dev->global_list, &pci_devices); | 88 | list_add_tail(&dev->global_list, &pci_devices); |
| @@ -87,6 +90,7 @@ void __devinit pci_bus_add_device(struct pci_dev *dev) | |||
| 87 | 90 | ||
| 88 | pci_proc_attach_device(dev); | 91 | pci_proc_attach_device(dev); |
| 89 | pci_create_sysfs_dev_files(dev); | 92 | pci_create_sysfs_dev_files(dev); |
| 93 | return 0; | ||
| 90 | } | 94 | } |
| 91 | 95 | ||
| 92 | /** | 96 | /** |
| @@ -104,6 +108,7 @@ void __devinit pci_bus_add_device(struct pci_dev *dev) | |||
| 104 | void __devinit pci_bus_add_devices(struct pci_bus *bus) | 108 | void __devinit pci_bus_add_devices(struct pci_bus *bus) |
| 105 | { | 109 | { |
| 106 | struct pci_dev *dev; | 110 | struct pci_dev *dev; |
| 111 | int retval; | ||
| 107 | 112 | ||
| 108 | list_for_each_entry(dev, &bus->devices, bus_list) { | 113 | list_for_each_entry(dev, &bus->devices, bus_list) { |
| 109 | /* | 114 | /* |
| @@ -112,7 +117,9 @@ void __devinit pci_bus_add_devices(struct pci_bus *bus) | |||
| 112 | */ | 117 | */ |
| 113 | if (!list_empty(&dev->global_list)) | 118 | if (!list_empty(&dev->global_list)) |
| 114 | continue; | 119 | continue; |
| 115 | pci_bus_add_device(dev); | 120 | retval = pci_bus_add_device(dev); |
| 121 | if (retval) | ||
| 122 | dev_err(&dev->dev, "Error adding device, continuing\n"); | ||
| 116 | } | 123 | } |
| 117 | 124 | ||
| 118 | list_for_each_entry(dev, &bus->devices, bus_list) { | 125 | list_for_each_entry(dev, &bus->devices, bus_list) { |
| @@ -129,10 +136,13 @@ void __devinit pci_bus_add_devices(struct pci_bus *bus) | |||
| 129 | list_add_tail(&dev->subordinate->node, | 136 | list_add_tail(&dev->subordinate->node, |
| 130 | &dev->bus->children); | 137 | &dev->bus->children); |
| 131 | up_write(&pci_bus_sem); | 138 | up_write(&pci_bus_sem); |
| 132 | } | 139 | } |
| 133 | pci_bus_add_devices(dev->subordinate); | 140 | pci_bus_add_devices(dev->subordinate); |
| 134 | 141 | retval = sysfs_create_link(&dev->subordinate->class_dev.kobj, | |
| 135 | sysfs_create_link(&dev->subordinate->class_dev.kobj, &dev->dev.kobj, "bridge"); | 142 | &dev->dev.kobj, "bridge"); |
| 143 | if (retval) | ||
| 144 | dev_err(&dev->dev, "Error creating sysfs " | ||
| 145 | "bridge symlink, continuing...\n"); | ||
| 136 | } | 146 | } |
| 137 | } | 147 | } |
| 138 | } | 148 | } |
