Message ID | 20200524052933.10529-1-dinghao.liu@zju.edu.cn |
---|---|
State | New |
Headers | show |
Series | media: venus: core: Fix runtime PM imbalance in venus_probe | expand |
Hi Dinghao, Thanks for the patch! On 5/24/20 8:29 AM, Dinghao Liu wrote: > pm_runtime_get_sync() increments the runtime PM usage counter even > when it returns an error code. Thus a pairing decrement is needed on > the error handling path to keep the counter balanced. For other error > paths after this call, things are the same. > > Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn> > --- > drivers/media/platform/qcom/venus/core.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c > index 194b10b98767..37db3b594dca 100644 > --- a/drivers/media/platform/qcom/venus/core.c > +++ b/drivers/media/platform/qcom/venus/core.c > @@ -289,18 +289,24 @@ static int venus_probe(struct platform_device *pdev) > goto err_core_deinit; > > ret = pm_runtime_put_sync(dev); > - if (ret) > - goto err_dev_unregister; > + if (ret) { > + v4l2_device_unregister(&core->v4l2_dev); > + hfi_core_deinit(core, false); > + venus_shutdown(core); > + pm_runtime_set_suspended(dev); > + pm_runtime_disable(dev); > + hfi_destroy(core); > + return ret; Could you just reorder error labels below instead of releasing everything here? > + } > > return 0; > > -err_dev_unregister: > - v4l2_device_unregister(&core->v4l2_dev); > err_core_deinit: > hfi_core_deinit(core, false); > err_venus_shutdown: > venus_shutdown(core); > err_runtime_disable: > + pm_runtime_put_noidle(dev); > pm_runtime_set_suspended(dev); > pm_runtime_disable(dev); > hfi_destroy(core); >
> > Could you just reorder error labels below instead of releasing > everything here? Thank you for your advice! I'll fix this in the next version of patch. Regards, Dinghao
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c index 194b10b98767..37db3b594dca 100644 --- a/drivers/media/platform/qcom/venus/core.c +++ b/drivers/media/platform/qcom/venus/core.c @@ -289,18 +289,24 @@ static int venus_probe(struct platform_device *pdev) goto err_core_deinit; ret = pm_runtime_put_sync(dev); - if (ret) - goto err_dev_unregister; + if (ret) { + v4l2_device_unregister(&core->v4l2_dev); + hfi_core_deinit(core, false); + venus_shutdown(core); + pm_runtime_set_suspended(dev); + pm_runtime_disable(dev); + hfi_destroy(core); + return ret; + } return 0; -err_dev_unregister: - v4l2_device_unregister(&core->v4l2_dev); err_core_deinit: hfi_core_deinit(core, false); err_venus_shutdown: venus_shutdown(core); err_runtime_disable: + pm_runtime_put_noidle(dev); pm_runtime_set_suspended(dev); pm_runtime_disable(dev); hfi_destroy(core);
pm_runtime_get_sync() increments the runtime PM usage counter even when it returns an error code. Thus a pairing decrement is needed on the error handling path to keep the counter balanced. For other error paths after this call, things are the same. Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn> --- drivers/media/platform/qcom/venus/core.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)