Skip to content

Commit

Permalink
Staging: hv: Cleanup vmbus_probe() function
Browse files Browse the repository at this point in the history
The logic for handling probe failure was broken. Now that we have
cleaned up error handling, get rid of the vmbus_probe_failed_cb()
function.

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>
  • Loading branch information
K. Y. Srinivasan authored and Greg Kroah-Hartman committed May 3, 2011
1 parent 703027d commit b14a7b3
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 33 deletions.
4 changes: 0 additions & 4 deletions drivers/staging/hv/vmbus_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,6 @@ struct hv_driver {
struct hv_device {
char name[64];

struct work_struct probe_failed_work_item;

int probe_error;

/* the device type id of this device */
struct hv_guid dev_type;

Expand Down
31 changes: 2 additions & 29 deletions drivers/staging/hv/vmbus_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,27 +313,6 @@ static int vmbus_match(struct device *device, struct device_driver *driver)
return match;
}


/*
* vmbus_probe_failed_cb - Callback when a driver probe failed in vmbus_probe()
*
* We need a callback because we cannot invoked device_unregister() inside
* vmbus_probe() since vmbus_probe() may be invoked inside device_register()
* i.e. we cannot call device_unregister() inside device_register()
*/
static void vmbus_probe_failed_cb(struct work_struct *context)
{
struct hv_device *device_ctx = (struct hv_device *)context;

/*
* Kick off the process of unregistering the device.
* This will call vmbus_remove() and eventually vmbus_device_release()
*/
device_unregister(&device_ctx->device);

/* put_device(&device_ctx->device); */
}

/*
* vmbus_probe - Add the new vmbus's child device
*/
Expand All @@ -342,20 +321,14 @@ static int vmbus_probe(struct device *child_device)
int ret = 0;
struct hv_driver *drv =
drv_to_hv_drv(child_device->driver);
struct hv_device *dev = device_to_hv_device(child_device);

/* Let the specific open-source driver handles the probe if it can */
if (drv->driver.probe) {
ret = dev->probe_error =
drv->driver.probe(child_device);
if (ret != 0) {
ret = drv->driver.probe(child_device);
if (ret != 0)
pr_err("probe failed for device %s (%d)\n",
dev_name(child_device), ret);

INIT_WORK(&dev->probe_failed_work_item,
vmbus_probe_failed_cb);
schedule_work(&dev->probe_failed_work_item);
}
} else {
pr_err("probe not set for driver %s\n",
dev_name(child_device));
Expand Down

0 comments on commit b14a7b3

Please sign in to comment.