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 | } |