lkml.org 
[lkml]   [2021]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 66/79] media: venus: use pm_runtime_resume_and_get()
    Date
    Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
    added pm_runtime_resume_and_get() in order to automatically handle
    dev->power.usage_count decrement on errors.

    Use the new API, in order to cleanup the error check logic.

    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    ---
    drivers/media/platform/qcom/venus/core.c | 30 +++++++++----------
    .../media/platform/qcom/venus/pm_helpers.c | 10 +++----
    2 files changed, 18 insertions(+), 22 deletions(-)

    diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
    index c80c27c87ccc..aa359f8e82c5 100644
    --- a/drivers/media/platform/qcom/venus/core.c
    +++ b/drivers/media/platform/qcom/venus/core.c
    @@ -84,11 +84,9 @@ static void venus_sys_error_handler(struct work_struct *work)
    container_of(work, struct venus_core, work.work);
    int ret = 0;

    - ret = pm_runtime_get_sync(core->dev);
    - if (WARN_ON(ret < 0)) {
    - pm_runtime_put_noidle(core->dev);
    + ret = pm_runtime_resume_and_get(core->dev);
    + if (WARN_ON(ret < 0))
    return;
    - }

    hfi_core_deinit(core, true);

    @@ -110,11 +108,9 @@ static void venus_sys_error_handler(struct work_struct *work)

    hfi_reinit(core);

    - ret = pm_runtime_get_sync(core->dev);
    - if (WARN_ON(ret < 0)) {
    - pm_runtime_put_noidle(core->dev);
    + ret = pm_runtime_resume_and_get(core->dev);
    + if (WARN_ON(ret < 0))
    return;
    - }

    ret = venus_boot(core);
    ret |= hfi_core_resume(core, true);
    @@ -313,21 +309,21 @@ static int venus_probe(struct platform_device *pdev)

    pm_runtime_enable(dev);

    - ret = pm_runtime_get_sync(dev);
    + ret = pm_runtime_resume_and_get(dev);
    if (ret < 0)
    goto err_runtime_disable;

    ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
    if (ret)
    - goto err_runtime_disable;
    + goto err_pm;

    ret = venus_firmware_init(core);
    if (ret)
    - goto err_runtime_disable;
    + goto err_pm;

    ret = venus_boot(core);
    if (ret)
    - goto err_runtime_disable;
    + goto err_pm;

    ret = hfi_core_resume(core, true);
    if (ret)
    @@ -359,8 +355,9 @@ static int venus_probe(struct platform_device *pdev)
    v4l2_device_unregister(&core->v4l2_dev);
    err_venus_shutdown:
    venus_shutdown(core);
    -err_runtime_disable:
    +err_pm:
    pm_runtime_put_noidle(dev);
    +err_runtime_disable:
    pm_runtime_set_suspended(dev);
    pm_runtime_disable(dev);
    hfi_destroy(core);
    @@ -379,7 +376,7 @@ static int venus_remove(struct platform_device *pdev)
    struct device *dev = core->dev;
    int ret;

    - ret = pm_runtime_get_sync(dev);
    + ret = pm_runtime_resume_and_get(dev);
    WARN_ON(ret < 0);

    ret = hfi_core_deinit(core, true);
    @@ -390,7 +387,8 @@ static int venus_remove(struct platform_device *pdev)

    venus_firmware_deinit(core);

    - pm_runtime_put_sync(dev);
    + if (ret >= 0)
    + pm_runtime_put_sync(dev);
    pm_runtime_disable(dev);

    if (pm_ops->core_put)
    @@ -411,7 +409,7 @@ static void venus_core_shutdown(struct platform_device *pdev)
    {
    struct venus_core *core = platform_get_drvdata(pdev);

    - pm_runtime_get_sync(core->dev);
    + pm_runtime_resume_and_get(core->dev);
    venus_shutdown(core);
    venus_firmware_deinit(core);
    pm_runtime_put_sync(core->dev);
    diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
    index c7e1ebec47ee..9e32ec866af7 100644
    --- a/drivers/media/platform/qcom/venus/pm_helpers.c
    +++ b/drivers/media/platform/qcom/venus/pm_helpers.c
    @@ -486,7 +486,7 @@ static int poweron_coreid(struct venus_core *core, unsigned int coreid_mask)
    int ret;

    if (coreid_mask & VIDC_CORE_ID_1) {
    - ret = pm_runtime_get_sync(core->pmdomains[1]);
    + ret = pm_runtime_resume_and_get(core->pmdomains[1]);
    if (ret < 0)
    return ret;

    @@ -504,7 +504,7 @@ static int poweron_coreid(struct venus_core *core, unsigned int coreid_mask)
    }

    if (coreid_mask & VIDC_CORE_ID_2) {
    - ret = pm_runtime_get_sync(core->pmdomains[2]);
    + ret = pm_runtime_resume_and_get(core->pmdomains[2]);
    if (ret < 0)
    return ret;

    @@ -990,11 +990,9 @@ static int core_power_v4(struct venus_core *core, int on)

    if (on == POWER_ON) {
    if (pmctrl) {
    - ret = pm_runtime_get_sync(pmctrl);
    - if (ret < 0) {
    - pm_runtime_put_noidle(pmctrl);
    + ret = pm_runtime_resume_and_get(pmctrl);
    + if (ret < 0)
    return ret;
    - }
    }

    ret = core_resets_reset(core);
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-04-27 12:33    [W:4.044 / U:0.476 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site