mirror of https://gitee.com/openkylin/linux.git
staging: unisys: visorbus: add error handling to initiate_chipset_device_pause_resume
Clean up the function to remove some if statments that should be done in the calling function. Signed-off-by: David Kershner <david.kershner@unisys.com> Reviewed-by: Reviewed-by: Tim Sell <timothy.sell@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
293deb2c0c
commit
15d9ce9d37
|
@ -1199,62 +1199,38 @@ resume_state_change_complete(struct visor_device *dev, int status)
|
|||
* via a callback function; see pause_state_change_complete() and
|
||||
* resume_state_change_complete().
|
||||
*/
|
||||
static void
|
||||
static int
|
||||
initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
|
||||
{
|
||||
int rc;
|
||||
int err;
|
||||
struct visor_driver *drv = NULL;
|
||||
void (*notify_func)(struct visor_device *dev, int response) = NULL;
|
||||
|
||||
if (is_pause)
|
||||
notify_func = device_pause_response;
|
||||
else
|
||||
notify_func = device_resume_response;
|
||||
if (!notify_func)
|
||||
return;
|
||||
|
||||
drv = to_visor_driver(dev->device.driver);
|
||||
if (!drv) {
|
||||
(*notify_func)(dev, -ENODEV);
|
||||
return;
|
||||
}
|
||||
if (!drv)
|
||||
return -ENODEV;
|
||||
|
||||
if (dev->pausing || dev->resuming) {
|
||||
(*notify_func)(dev, -EBUSY);
|
||||
return;
|
||||
}
|
||||
if (dev->pausing || dev->resuming)
|
||||
return -EBUSY;
|
||||
|
||||
if (is_pause) {
|
||||
if (!drv->pause) {
|
||||
(*notify_func)(dev, -EINVAL);
|
||||
return;
|
||||
}
|
||||
if (!drv->pause)
|
||||
return -EINVAL;
|
||||
|
||||
dev->pausing = true;
|
||||
rc = drv->pause(dev, pause_state_change_complete);
|
||||
err = drv->pause(dev, pause_state_change_complete);
|
||||
} else {
|
||||
/* This should be done at BUS resume time, but an
|
||||
* existing problem prevents us from ever getting a bus
|
||||
* resume... This hack would fail to work should we
|
||||
* ever have a bus that contains NO devices, since we
|
||||
* would never even get here in that case.
|
||||
/* The vbus_dev_info structure in the channel was been
|
||||
* cleared, make sure it is valid.
|
||||
*/
|
||||
fix_vbus_dev_info(dev);
|
||||
if (!drv->resume) {
|
||||
(*notify_func)(dev, -EINVAL);
|
||||
return;
|
||||
}
|
||||
if (!drv->resume)
|
||||
return -EINVAL;
|
||||
|
||||
dev->resuming = true;
|
||||
rc = drv->resume(dev, resume_state_change_complete);
|
||||
}
|
||||
if (rc < 0) {
|
||||
if (is_pause)
|
||||
dev->pausing = false;
|
||||
else
|
||||
dev->resuming = false;
|
||||
(*notify_func)(dev, -EINVAL);
|
||||
err = drv->resume(dev, resume_state_change_complete);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1268,7 +1244,14 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
|
|||
void
|
||||
chipset_device_pause(struct visor_device *dev_info)
|
||||
{
|
||||
initiate_chipset_device_pause_resume(dev_info, true);
|
||||
int err;
|
||||
|
||||
err = initiate_chipset_device_pause_resume(dev_info, true);
|
||||
|
||||
if (err < 0) {
|
||||
dev_info->pausing = false;
|
||||
device_pause_response(dev_info, err);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1282,7 +1265,14 @@ chipset_device_pause(struct visor_device *dev_info)
|
|||
void
|
||||
chipset_device_resume(struct visor_device *dev_info)
|
||||
{
|
||||
initiate_chipset_device_pause_resume(dev_info, false);
|
||||
int err;
|
||||
|
||||
err = initiate_chipset_device_pause_resume(dev_info, false);
|
||||
|
||||
if (err < 0) {
|
||||
device_resume_response(dev_info, err);
|
||||
dev_info->resuming = false;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in New Issue