media: platform: mtk-mdp3: Use refcount_t for job_count
authorRicardo Ribalda <ribalda@chromium.org>
Mon, 29 Apr 2024 15:04:51 +0000 (16:04 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 3 May 2024 10:11:23 +0000 (11:11 +0100)
Use an API that resembles more the actual use of job_count.

Found by cocci:
drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c:527:5-24: WARNING: atomic_dec_and_test variation before object free at line 541.
drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c:578:6-25: WARNING: atomic_dec_and_test variation before object free at line 581.

Link: https://lore.kernel.org/linux-media/20240429-fix-cocci-v3-12-3c4865f5a4b0@chromium.org
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c
drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h
drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c

index 1d64bac34b90aaeca77a589d4d7eaa503ba66e34..ea2ea119dd2a66bc2e3d4385e8a50a8d7656ffee 100644 (file)
@@ -524,7 +524,7 @@ static void mdp_auto_release_work(struct work_struct *work)
        mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
                            cmd->num_comps);
 
-       if (atomic_dec_and_test(&mdp->job_count)) {
+       if (refcount_dec_and_test(&mdp->job_count)) {
                if (cmd->mdp_ctx)
                        mdp_m2m_job_finish(cmd->mdp_ctx);
 
@@ -575,7 +575,7 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
                mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
                                    cmd->num_comps);
 
-               if (atomic_dec_and_test(&mdp->job_count))
+               if (refcount_dec_and_test(&mdp->job_count))
                        wake_up(&mdp->callback_wq);
 
                mdp_cmdq_pkt_destroy(&cmd->pkt);
@@ -724,9 +724,9 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
        int i, ret;
        u8 pp_used = __get_pp_num(param->param->type);
 
-       atomic_set(&mdp->job_count, pp_used);
+       refcount_set(&mdp->job_count, pp_used);
        if (atomic_read(&mdp->suspended)) {
-               atomic_set(&mdp->job_count, 0);
+               refcount_set(&mdp->job_count, 0);
                return -ECANCELED;
        }
 
@@ -764,7 +764,7 @@ err_clock_off:
                mdp_comp_clocks_off(&mdp->pdev->dev, cmd[i]->comps,
                                    cmd[i]->num_comps);
 err_cancel_job:
-       atomic_set(&mdp->job_count, 0);
+       refcount_set(&mdp->job_count, 0);
 
        return ret;
 }
index 5209f531ef8d00decbdc5666e3db4dcebe15897b..c1f3bf98120a60f887ea1811964626fc48eb6e8e 100644 (file)
@@ -380,14 +380,14 @@ static int __maybe_unused mdp_suspend(struct device *dev)
 
        atomic_set(&mdp->suspended, 1);
 
-       if (atomic_read(&mdp->job_count)) {
+       if (refcount_read(&mdp->job_count)) {
                ret = wait_event_timeout(mdp->callback_wq,
-                                        !atomic_read(&mdp->job_count),
+                                        !refcount_read(&mdp->job_count),
                                         2 * HZ);
                if (ret == 0) {
                        dev_err(dev,
                                "%s:flushed cmdq task incomplete, count=%d\n",
-                               __func__, atomic_read(&mdp->job_count));
+                               __func__, refcount_read(&mdp->job_count));
                        return -EBUSY;
                }
        }
index 8c09e984fd0166f16e2ce5bb4bc0a944f67289e0..430251f63754c999e23fe323ff1a2fa8f5b1d648 100644 (file)
@@ -134,7 +134,7 @@ struct mdp_dev {
        /* synchronization protect for m2m device operation */
        struct mutex                            m2m_lock;
        atomic_t                                suspended;
-       atomic_t                                job_count;
+       refcount_t                              job_count;
 };
 
 struct mdp_pipe_info {
index 35a8b059bde5d129240686cee5677351a54ab51c..0e69128a3772c38135ab8348063ae1306e7155c9 100644 (file)
@@ -104,14 +104,14 @@ static void mdp_m2m_device_run(void *priv)
        task.cb_data = NULL;
        task.mdp_ctx = ctx;
 
-       if (atomic_read(&ctx->mdp_dev->job_count)) {
+       if (refcount_read(&ctx->mdp_dev->job_count)) {
                ret = wait_event_timeout(ctx->mdp_dev->callback_wq,
-                                        !atomic_read(&ctx->mdp_dev->job_count),
+                                        !refcount_read(&ctx->mdp_dev->job_count),
                                         2 * HZ);
                if (ret == 0) {
                        dev_err(&ctx->mdp_dev->pdev->dev,
                                "%d jobs not yet done\n",
-                               atomic_read(&ctx->mdp_dev->job_count));
+                               refcount_read(&ctx->mdp_dev->job_count));
                        goto worker_end;
                }
        }