Commit 982c609448b9d724e1c3a0d5aeee388c064479f0
Committed by
Linus Torvalds
1 parent
070c699983
Exists in
master
and in
7 other branches
[PATCH] pnp: PNP: adjust pnp_register_driver signature
Remove the assumption that pnp_register_driver() returns the number of devices claimed. Returning the count is unreliable because devices may be hot-plugged in the future. This changes the convention to "zero for success, or a negative error value," which matches pci_register_driver(), acpi_bus_register_driver(), and platform_driver_register(). Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Cc: Adam Belay <ambx1@neo.rr.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Showing 3 changed files with 11 additions and 27 deletions Side-by-side Diff
Documentation/pnp.txt
... | ... | @@ -115,6 +115,9 @@ |
115 | 115 | pnp_register_driver |
116 | 116 | - adds a PnP driver to the Plug and Play Layer |
117 | 117 | - this includes driver model integration |
118 | +- returns zero for success or a negative error number for failure; count | |
119 | + calls to the .add() method if you need to know how many devices bind to | |
120 | + the driver | |
118 | 121 | |
119 | 122 | pnp_unregister_driver |
120 | 123 | - removes a PnP driver from the Plug and Play Layer |
drivers/pnp/card.c
... | ... | @@ -47,7 +47,7 @@ |
47 | 47 | { |
48 | 48 | dev->card_link = NULL; |
49 | 49 | } |
50 | - | |
50 | + | |
51 | 51 | static void card_remove_first(struct pnp_dev * dev) |
52 | 52 | { |
53 | 53 | struct pnp_card_driver * drv = to_pnp_card_driver(dev->driver); |
... | ... | @@ -361,7 +361,7 @@ |
361 | 361 | |
362 | 362 | int pnp_register_card_driver(struct pnp_card_driver * drv) |
363 | 363 | { |
364 | - int count; | |
364 | + int error; | |
365 | 365 | struct list_head *pos, *temp; |
366 | 366 | |
367 | 367 | drv->link.name = drv->name; |
368 | 368 | |
369 | 369 | |
370 | 370 | |
... | ... | @@ -372,21 +372,19 @@ |
372 | 372 | drv->link.suspend = drv->suspend ? card_suspend : NULL; |
373 | 373 | drv->link.resume = drv->resume ? card_resume : NULL; |
374 | 374 | |
375 | - count = pnp_register_driver(&drv->link); | |
376 | - if (count < 0) | |
377 | - return count; | |
375 | + error = pnp_register_driver(&drv->link); | |
376 | + if (error < 0) | |
377 | + return error; | |
378 | 378 | |
379 | 379 | spin_lock(&pnp_lock); |
380 | 380 | list_add_tail(&drv->global_list, &pnp_card_drivers); |
381 | 381 | spin_unlock(&pnp_lock); |
382 | 382 | |
383 | - count = 0; | |
384 | - | |
385 | 383 | list_for_each_safe(pos,temp,&pnp_cards){ |
386 | 384 | struct pnp_card *card = list_entry(pos, struct pnp_card, global_list); |
387 | - count += card_probe(card,drv); | |
385 | + card_probe(card,drv); | |
388 | 386 | } |
389 | - return count; | |
387 | + return 0; | |
390 | 388 | } |
391 | 389 | |
392 | 390 | /** |
drivers/pnp/driver.c
... | ... | @@ -201,31 +201,14 @@ |
201 | 201 | .resume = pnp_bus_resume, |
202 | 202 | }; |
203 | 203 | |
204 | - | |
205 | -static int count_devices(struct device * dev, void * c) | |
206 | -{ | |
207 | - int * count = c; | |
208 | - (*count)++; | |
209 | - return 0; | |
210 | -} | |
211 | - | |
212 | 204 | int pnp_register_driver(struct pnp_driver *drv) |
213 | 205 | { |
214 | - int count; | |
215 | - | |
216 | 206 | pnp_dbg("the driver '%s' has been registered", drv->name); |
217 | 207 | |
218 | 208 | drv->driver.name = drv->name; |
219 | 209 | drv->driver.bus = &pnp_bus_type; |
220 | 210 | |
221 | - count = driver_register(&drv->driver); | |
222 | - | |
223 | - /* get the number of initial matches */ | |
224 | - if (count >= 0){ | |
225 | - count = 0; | |
226 | - driver_for_each_device(&drv->driver, NULL, &count, count_devices); | |
227 | - } | |
228 | - return count; | |
211 | + return driver_register(&drv->driver); | |
229 | 212 | } |
230 | 213 | |
231 | 214 | void pnp_unregister_driver(struct pnp_driver *drv) |