Commit 4000622e authored by David Kershner's avatar David Kershner Committed by Greg Kroah-Hartman

staging: unisys: visorbus: Fix up visordriver_probe

Fixup the visordriver_probe function. Rearrange the function to avoid
needing gotos and removed unnecessary wmb().
Signed-off-by: default avatarDavid Kershner <david.kershner@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c6af7a9c
......@@ -752,36 +752,28 @@ dev_stop_periodic_work(struct visor_device *dev)
static int
visordriver_probe_device(struct device *xdev)
{
int rc;
int res;
struct visor_driver *drv;
struct visor_device *dev;
drv = to_visor_driver(xdev->driver);
dev = to_visor_device(xdev);
if (!drv->probe)
return -ENODEV;
down(&dev->visordriver_callback_lock);
dev->being_removed = false;
/*
* ensure that the dev->being_removed flag is cleared before
* we start the probe
*/
wmb();
get_device(&dev->device);
if (!drv->probe) {
up(&dev->visordriver_callback_lock);
rc = -ENODEV;
goto away;
res = drv->probe(dev);
if (res >= 0) {
/* success: reference kept via unmatched get_device() */
get_device(&dev->device);
fix_vbus_dev_info(dev);
}
rc = drv->probe(dev);
if (rc < 0)
goto away;
fix_vbus_dev_info(dev);
up(&dev->visordriver_callback_lock);
rc = 0;
away:
if (rc != 0)
put_device(&dev->device);
return rc;
return res;
}
/** This is called when device_unregister() is called for each child device
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment