Use the newly introduced remove() function in struct hv_driver.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/*
* blkvsc_remove() - Callback when our device is removed
*/
-static int blkvsc_remove(struct device *device)
+static int blkvsc_remove(struct hv_device *dev)
{
struct storvsc_driver_object *storvsc_drv_obj =
- drv_to_stordrv(device->driver);
- struct hv_device *device_obj = device_to_hv_device(device);
- struct block_device_context *blkdev = dev_get_drvdata(device);
+ drv_to_stordrv(dev->device.driver);
+ struct block_device_context *blkdev = dev_get_drvdata(&dev->device);
unsigned long flags;
/*
* Call to the vsc driver to let it know that the device is being
* removed
*/
- storvsc_drv_obj->base.dev_rm(device_obj);
+ storvsc_drv_obj->base.dev_rm(dev);
/* Get to a known state */
spin_lock_irqsave(&blkdev->lock, flags);
drv->driver.name = storvsc_drv_obj->base.name;
drv->probe = blkvsc_probe;
- drv->driver.remove = blkvsc_remove;
+ drv->remove = blkvsc_remove;
drv->driver.shutdown = blkvsc_shutdown;
/* The driver belongs to vmbus */
return 0;
}
-static int mousevsc_remove(struct device *device)
+static int mousevsc_remove(struct hv_device *dev)
{
int ret = 0;
struct mousevsc_drv_obj *mousevsc_drv_obj =
- drv_to_mousedrv(device->driver);
+ drv_to_mousedrv(dev->device.driver);
- struct hv_device *device_obj = device_to_hv_device(device);
struct input_device_context *input_dev_ctx;
input_dev_ctx = kmalloc(sizeof(struct input_device_context),
GFP_KERNEL);
- dev_set_drvdata(device, input_dev_ctx);
+ dev_set_drvdata(&dev->device, input_dev_ctx);
if (input_dev_ctx->connected) {
hidinput_disconnect(input_dev_ctx->hid_device);
* Call to the vsc driver to let it know that the device
* is being removed
*/
- ret = mousevsc_drv_obj->base.dev_rm(device_obj);
+ ret = mousevsc_drv_obj->base.dev_rm(dev);
if (ret != 0) {
DPRINT_ERR(INPUTVSC_DRV,
drv->driver.name = input_drv_obj->base.name;
drv->probe = mousevsc_probe;
- drv->driver.remove = mousevsc_remove;
+ drv->remove = mousevsc_remove;
/* The driver belongs to vmbus */
vmbus_child_driver_register(&drv->driver);
return ret;
}
-static int netvsc_remove(struct device *device)
+static int netvsc_remove(struct hv_device *dev)
{
struct netvsc_driver *net_drv_obj =
- drv_to_netvscdrv(device->driver);
- struct hv_device *device_obj = device_to_hv_device(device);
- struct net_device *net = dev_get_drvdata(&device_obj->device);
+ drv_to_netvscdrv(dev->device.driver);
+ struct net_device *net = dev_get_drvdata(&dev->device);
int ret;
if (net == NULL) {
- dev_err(device, "No net device to remove\n");
+ dev_err(&dev->device, "No net device to remove\n");
return 0;
}
* Call to the vsc driver to let it know that the device is being
* removed
*/
- ret = net_drv_obj->base.dev_rm(device_obj);
+ ret = net_drv_obj->base.dev_rm(dev);
if (ret != 0) {
/* TODO: */
netdev_err(net, "unable to remove vsc device (ret %d)\n", ret);
drv->driver.name = net_drv_obj->base.name;
drv->probe = netvsc_probe;
- drv->driver.remove = netvsc_remove;
+ drv->remove = netvsc_remove;
/* The driver belongs to vmbus */
ret = vmbus_child_driver_register(&drv->driver);
static int storvsc_device_alloc(struct scsi_device *);
static int storvsc_device_configure(struct scsi_device *);
static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd);
-static int storvsc_remove(struct device *dev);
+static int storvsc_remove(struct hv_device *dev);
static struct scatterlist *create_bounce_buffer(struct scatterlist *sgl,
unsigned int sg_count,
drv->driver.name = storvsc_drv_obj->base.name;
drv->probe = storvsc_probe;
- drv->driver.remove = storvsc_remove;
+ drv->remove = storvsc_remove;
/* The driver belongs to vmbus */
ret = vmbus_child_driver_register(&drv->driver);
/*
* storvsc_remove - Callback when our device is removed
*/
-static int storvsc_remove(struct device *device)
+static int storvsc_remove(struct hv_device *dev)
{
struct storvsc_driver_object *storvsc_drv_obj =
- drv_to_stordrv(device->driver);
- struct hv_device *device_obj = device_to_hv_device(device);
- struct Scsi_Host *host = dev_get_drvdata(device);
+ drv_to_stordrv(dev->device.driver);
+ struct Scsi_Host *host = dev_get_drvdata(&dev->device);
struct host_device_context *host_device_ctx =
(struct host_device_context *)host->hostdata;
* Call to the vsc driver to let it know that the device is being
* removed
*/
- storvsc_drv_obj->base.dev_rm(device_obj);
+ storvsc_drv_obj->base.dev_rm(dev);
if (host_device_ctx->request_pool) {
kmem_cache_destroy(host_device_ctx->request_pool);
int ret;
struct hv_driver *drv;
+ struct hv_device *dev = device_to_hv_device(child_device);
if (child_device->driver) {
drv = drv_to_hv_drv(child_device->driver);
- /*
- * Let the specific open-source driver handles the removal if
- * it can
- */
- if (drv->driver.remove) {
- ret = drv->driver.remove(child_device);
+ if (drv->remove) {
+ ret = drv->remove(dev);
} else {
pr_err("remove not set for driver %s\n",
dev_name(child_device));