diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-25 18:07:32 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-25 18:07:32 -0400 |
commit | 768fa21919b7f30b77f0b3ba94939f5556d111d5 (patch) | |
tree | f1f1a8f6f7b49d69f6b52dbcf4a540b4db0ab9f1 /drivers/staging/hv/netvsc_drv.c | |
parent | c411a5981d6f53ed2502ad06a2ee70d67ed13f12 (diff) |
Staging: hv: fix up driver registering mess
Individual drivers should never be touching the 'struct device' field,
so if that is a requirement to pass to the vmbus core, you know
something is wrong.
This patch fixes that all up, and resolves the problem where the module
reference counting was not happening properly for the individual drivers
as well. Overall, it reduces the lines of code the individual drivers
have to have, which tells you that this is the correct thing to do.
Also, somehow the _GPL marking for the functions got removed on an older
patch. As the name of the function was changing, properly change the
_GPL marking as well at the same time.
Cc: K. Y. Srinivasan <kys@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Cc: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/hv/netvsc_drv.c')
-rw-r--r-- | drivers/staging/hv/netvsc_drv.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 2d2955c1925..ad1ef038ff7 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c | |||
@@ -422,6 +422,7 @@ MODULE_DEVICE_TABLE(vmbus, id_table); | |||
422 | 422 | ||
423 | /* The one and only one */ | 423 | /* The one and only one */ |
424 | static struct hv_driver netvsc_drv = { | 424 | static struct hv_driver netvsc_drv = { |
425 | .name = "netvsc", | ||
425 | .id_table = id_table, | 426 | .id_table = id_table, |
426 | .probe = netvsc_probe, | 427 | .probe = netvsc_probe, |
427 | .remove = netvsc_remove, | 428 | .remove = netvsc_remove, |
@@ -429,26 +430,12 @@ static struct hv_driver netvsc_drv = { | |||
429 | 430 | ||
430 | static void __exit netvsc_drv_exit(void) | 431 | static void __exit netvsc_drv_exit(void) |
431 | { | 432 | { |
432 | vmbus_child_driver_unregister(&netvsc_drv.driver); | 433 | vmbus_driver_unregister(&netvsc_drv); |
433 | } | 434 | } |
434 | 435 | ||
435 | |||
436 | static int __init netvsc_drv_init(void) | 436 | static int __init netvsc_drv_init(void) |
437 | { | 437 | { |
438 | struct hv_driver *drv = &netvsc_drv; | 438 | return vmbus_driver_register(&netvsc_drv); |
439 | int ret; | ||
440 | |||
441 | pr_info("initializing...."); | ||
442 | |||
443 | /* Callback to client driver to complete the initialization */ | ||
444 | netvsc_initialize(drv); | ||
445 | |||
446 | drv->driver.name = drv->name; | ||
447 | |||
448 | /* The driver belongs to vmbus */ | ||
449 | ret = vmbus_child_driver_register(&drv->driver); | ||
450 | |||
451 | return ret; | ||
452 | } | 439 | } |
453 | 440 | ||
454 | MODULE_LICENSE("GPL"); | 441 | MODULE_LICENSE("GPL"); |