aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorKonstantin Khlebnikov <khlebnikov@openvz.org>2012-08-08 06:47:51 -0400
committerBjorn Helgaas <bhelgaas@google.com>2012-09-17 14:17:09 -0400
commitbfb09a86f5f60f9a83c676b53db8d9210549ee19 (patch)
treef2a934fcfb6135989ee0cae4ad1bd122bd47fe31 /drivers/pci
parent55d512e245bc7699a8800e23df1a24195dd08217 (diff)
PCI: Convert "new_id"/"remove_id" into generic pci_bus driver attributes
This patch removes hardcoded sysfs attributes manipulation and converts them into generic pci_bus->drv_attrs. This saves several bytes. Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/pci-driver.c57
1 files changed, 10 insertions, 47 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index d6fd6b6d9d4b..9e1d2959e226 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -139,7 +139,6 @@ store_new_id(struct device_driver *driver, const char *buf, size_t count)
139 return retval; 139 return retval;
140 return count; 140 return count;
141} 141}
142static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
143 142
144/** 143/**
145 * store_remove_id - remove a PCI device ID from this driver 144 * store_remove_id - remove a PCI device ID from this driver
@@ -185,38 +184,16 @@ store_remove_id(struct device_driver *driver, const char *buf, size_t count)
185 return retval; 184 return retval;
186 return count; 185 return count;
187} 186}
188static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);
189 187
190static int 188static struct driver_attribute pci_drv_attrs[] = {
191pci_create_newid_files(struct pci_driver *drv) 189 __ATTR(new_id, S_IWUSR, NULL, store_new_id),
192{ 190 __ATTR(remove_id, S_IWUSR, NULL, store_remove_id),
193 int error = 0; 191 __ATTR_NULL,
192};
194 193
195 if (drv->probe != NULL) { 194#else
196 error = driver_create_file(&drv->driver, &driver_attr_new_id); 195#define pci_drv_attrs NULL
197 if (error == 0) { 196#endif /* CONFIG_HOTPLUG */
198 error = driver_create_file(&drv->driver,
199 &driver_attr_remove_id);
200 if (error)
201 driver_remove_file(&drv->driver,
202 &driver_attr_new_id);
203 }
204 }
205 return error;
206}
207
208static void pci_remove_newid_files(struct pci_driver *drv)
209{
210 driver_remove_file(&drv->driver, &driver_attr_remove_id);
211 driver_remove_file(&drv->driver, &driver_attr_new_id);
212}
213#else /* !CONFIG_HOTPLUG */
214static inline int pci_create_newid_files(struct pci_driver *drv)
215{
216 return 0;
217}
218static inline void pci_remove_newid_files(struct pci_driver *drv) {}
219#endif
220 197
221/** 198/**
222 * pci_match_id - See if a pci device matches a given pci_id table 199 * pci_match_id - See if a pci device matches a given pci_id table
@@ -1162,8 +1139,6 @@ const struct dev_pm_ops pci_dev_pm_ops = {
1162int __pci_register_driver(struct pci_driver *drv, struct module *owner, 1139int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1163 const char *mod_name) 1140 const char *mod_name)
1164{ 1141{
1165 int error;
1166
1167 /* initialize common driver fields */ 1142 /* initialize common driver fields */
1168 drv->driver.name = drv->name; 1143 drv->driver.name = drv->name;
1169 drv->driver.bus = &pci_bus_type; 1144 drv->driver.bus = &pci_bus_type;
@@ -1174,19 +1149,7 @@ int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1174 INIT_LIST_HEAD(&drv->dynids.list); 1149 INIT_LIST_HEAD(&drv->dynids.list);
1175 1150
1176 /* register with core */ 1151 /* register with core */
1177 error = driver_register(&drv->driver); 1152 return driver_register(&drv->driver);
1178 if (error)
1179 goto out;
1180
1181 error = pci_create_newid_files(drv);
1182 if (error)
1183 goto out_newid;
1184out:
1185 return error;
1186
1187out_newid:
1188 driver_unregister(&drv->driver);
1189 goto out;
1190} 1153}
1191 1154
1192/** 1155/**
@@ -1202,7 +1165,6 @@ out_newid:
1202void 1165void
1203pci_unregister_driver(struct pci_driver *drv) 1166pci_unregister_driver(struct pci_driver *drv)
1204{ 1167{
1205 pci_remove_newid_files(drv);
1206 driver_unregister(&drv->driver); 1168 driver_unregister(&drv->driver);
1207 pci_free_dynids(drv); 1169 pci_free_dynids(drv);
1208} 1170}
@@ -1302,6 +1264,7 @@ struct bus_type pci_bus_type = {
1302 .shutdown = pci_device_shutdown, 1264 .shutdown = pci_device_shutdown,
1303 .dev_attrs = pci_dev_attrs, 1265 .dev_attrs = pci_dev_attrs,
1304 .bus_attrs = pci_bus_attrs, 1266 .bus_attrs = pci_bus_attrs,
1267 .drv_attrs = pci_drv_attrs,
1305 .pm = PCI_PM_OPS_PTR, 1268 .pm = PCI_PM_OPS_PTR,
1306}; 1269};
1307 1270