diff options
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/hv/blkvsc_drv.c | 2 | ||||
-rw-r--r-- | drivers/staging/hv/include/vmbus.h | 3 | ||||
-rw-r--r-- | drivers/staging/hv/netvsc_drv.c | 2 | ||||
-rw-r--r-- | drivers/staging/hv/storvsc_drv.c | 2 | ||||
-rw-r--r-- | drivers/staging/hv/vmbus_drv.c | 20 |
5 files changed, 21 insertions, 8 deletions
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 5322e57..f1efc3e 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -192,7 +192,7 @@ int blkvsc_drv_init(PFN_DRIVERINITIALIZE pfn_drv_init) drv_ctx->shutdown = blkvsc_shutdown; /* The driver belongs to vmbus */ - vmbus_child_driver_register(drv_ctx); + ret = vmbus_child_driver_register(drv_ctx); DPRINT_EXIT(BLKVSC_DRV); diff --git a/drivers/staging/hv/include/vmbus.h b/drivers/staging/hv/include/vmbus.h index 463f77e..c1a8c55 100644 --- a/drivers/staging/hv/include/vmbus.h +++ b/drivers/staging/hv/include/vmbus.h @@ -82,8 +82,7 @@ static inline struct driver_context *driver_to_driver_context(struct device_driv /* Vmbus interface */ -void -vmbus_child_driver_register( +int vmbus_child_driver_register( struct driver_context* driver_ctx ); diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 8cf552a..82f7700 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -114,7 +114,7 @@ int netvsc_drv_init(PFN_DRIVERINITIALIZE pfn_drv_init) drv_ctx->remove = netvsc_remove; /* The driver belongs to vmbus */ - vmbus_child_driver_register(drv_ctx); + ret = vmbus_child_driver_register(drv_ctx); DPRINT_EXIT(NETVSC_DRV); diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 3c677f0..cbea8a2 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -162,7 +162,7 @@ int storvsc_drv_init(PFN_DRIVERINITIALIZE pfn_drv_init) drv_ctx->remove = storvsc_remove; /* The driver belongs to vmbus */ - vmbus_child_driver_register(drv_ctx); + ret = vmbus_child_driver_register(drv_ctx); DPRINT_EXIT(STORVSC_DRV); diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c index cede0ac..fd6f18e 100644 --- a/drivers/staging/hv/vmbus_drv.c +++ b/drivers/staging/hv/vmbus_drv.c @@ -435,7 +435,18 @@ int vmbus_bus_init(PFN_DRIVERINITIALIZE pfn_drv_init) dev_ctx->device.release = vmbus_bus_release; /* Setup the bus as root device */ - device_register(&dev_ctx->device); + ret = device_register(&dev_ctx->device); + if (ret) + { + DPRINT_ERR(VMBUS_DRV, "ERROR - Unable to register vmbus root device"); + + free_irq(vmbus_irq, NULL); + bus_unregister(&vmbus_drv_ctx->bus); + + ret = -1; + goto cleanup; + } + vmbus_drv_obj->GetChannelOffers(); @@ -491,9 +502,10 @@ Name: vmbus_child_driver_register() Desc: Register a vmbus's child driver --*/ -void vmbus_child_driver_register(struct driver_context* driver_ctx) +int vmbus_child_driver_register(struct driver_context* driver_ctx) { VMBUS_DRIVER_OBJECT *vmbus_drv_obj=&g_vmbus_drv.drv_obj; + int ret; DPRINT_ENTER(VMBUS_DRV); @@ -502,11 +514,13 @@ void vmbus_child_driver_register(struct driver_context* driver_ctx) /* The child driver on this vmbus */ driver_ctx->driver.bus = &g_vmbus_drv.bus; - driver_register(&driver_ctx->driver); + ret = driver_register(&driver_ctx->driver); vmbus_drv_obj->GetChannelOffers(); DPRINT_EXIT(VMBUS_DRV); + + return ret; } EXPORT_SYMBOL(vmbus_child_driver_register); |