aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/hv/netvsc_drv.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-08-25 18:07:32 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-25 18:07:32 -0400
commit768fa21919b7f30b77f0b3ba94939f5556d111d5 (patch)
treef1f1a8f6f7b49d69f6b52dbcf4a540b4db0ab9f1 /drivers/staging/hv/netvsc_drv.c
parentc411a5981d6f53ed2502ad06a2ee70d67ed13f12 (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.c19
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 */
424static struct hv_driver netvsc_drv = { 424static 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
430static void __exit netvsc_drv_exit(void) 431static 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
436static int __init netvsc_drv_init(void) 436static 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
454MODULE_LICENSE("GPL"); 441MODULE_LICENSE("GPL");