Message ID | 1463364819-477-3-git-send-email-okaya@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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@codeaurora.org> > --- > 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 Once fixed, Reviewed-by: Eric Auger <eric.auger@linaro.org> 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. 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; > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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@codeaurora.org> >> --- >> 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@linaro.org> > 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; >> >
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; + } + + 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;
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@codeaurora.org> --- drivers/vfio/platform/vfio_platform_common.c | 31 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 16 deletions(-)