On 5/23/2016 9:02 AM, Eric Auger wrote: > Hi Sinan, > On 05/16/2016 04:13 AM, Sinan Kaya wrote: >> The reset call sequence seems to replicate itself multiple times >> across the file. Grouping them together for maintenance reasons. >> >> Signed-off-by: Sinan Kaya <okaya@xxxxxxxxxxxxxx> >> --- >> drivers/vfio/platform/vfio_platform_common.c | 31 ++++++++++++++-------------- >> 1 file changed, 15 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/vfio/platform/vfio_platform_common.c b/drivers/vfio/platform/vfio_platform_common.c >> index 08fd7c2..cb91dd3 100644 >> --- a/drivers/vfio/platform/vfio_platform_common.c >> +++ b/drivers/vfio/platform/vfio_platform_common.c >> @@ -134,6 +134,18 @@ static void vfio_platform_regions_cleanup(struct vfio_platform_device *vdev) >> kfree(vdev->regions); >> } >> >> +static int vfio_platform_call_reset(struct vfio_platform_device *vdev) >> +{ >> + if (vdev->of_reset) { >> + dev_info(vdev->device, "reset\n"); >> + vdev->of_reset(vdev); >> + return 0; > you should return vdev->of_reset(vdev) to keep the existing > VFIO_DEVICE_RESET ioctl behavior will do. > > Once fixed, Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> > thanks. > Besides, but this goes beyond the scope of your series, maybe we should > reconsider in the future what happens in case the reset fails on > open/release. > I like giving an error immediately to be honest on open. > Best Regards > > Eric >> + } >> + >> + dev_warn(vdev->device, "no reset function found!\n"); >> + return -EINVAL; >> +} >> + >> static void vfio_platform_release(void *device_data) >> { >> struct vfio_platform_device *vdev = device_data; >> @@ -141,12 +153,7 @@ static void vfio_platform_release(void *device_data) >> mutex_lock(&driver_lock); >> >> if (!(--vdev->refcnt)) { >> - if (vdev->of_reset) { >> - dev_info(vdev->device, "reset\n"); >> - vdev->of_reset(vdev); >> - } else { >> - dev_warn(vdev->device, "no reset function found!\n"); >> - } >> + vfio_platform_call_reset(vdev); >> vfio_platform_regions_cleanup(vdev); >> vfio_platform_irq_cleanup(vdev); >> } >> @@ -175,12 +182,7 @@ static int vfio_platform_open(void *device_data) >> if (ret) >> goto err_irq; >> >> - if (vdev->of_reset) { >> - dev_info(vdev->device, "reset\n"); >> - vdev->of_reset(vdev); >> - } else { >> - dev_warn(vdev->device, "no reset function found!\n"); >> - } >> + vfio_platform_call_reset(vdev); >> } >> >> vdev->refcnt++; >> @@ -312,10 +314,7 @@ static long vfio_platform_ioctl(void *device_data, >> return ret; >> >> } else if (cmd == VFIO_DEVICE_RESET) { >> - if (vdev->of_reset) >> - return vdev->of_reset(vdev); >> - else >> - return -EINVAL; >> + return vfio_platform_call_reset(vdev); >> } >> >> return -ENOTTY; >> > -- Sinan Kaya Qualcomm Technologies, Inc. on behalf of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html