From: David Kershner Date: Tue, 28 Mar 2017 13:34:53 +0000 (-0400) Subject: staging: unisys: visorbus: add error handling to initiate_chipset_device_pause_resume X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=15d9ce9d3797fdb9eb90fd229cdd51d906eeaaec;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.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 Reviewed-by: Reviewed-by: Tim Sell Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c b/drivers/staging/unisys/visorbus/visorbus_main.c index 0aa731d09c1f..58e4009ae21f 100644 --- a/drivers/staging/unisys/visorbus/visorbus_main.c +++ b/drivers/staging/unisys/visorbus/visorbus_main.c @@ -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