Skip to content

Commit 7aa9066

Browse files
ribaldamchehab
authored andcommitted
media: platform: mtk-mdp3: Use refcount_t for job_count
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/[email protected] Signed-off-by: Ricardo Ribalda <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent 6cff72f commit 7aa9066

File tree

4 files changed

+12
-12
lines changed

4 files changed

+12
-12
lines changed

drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ static void mdp_auto_release_work(struct work_struct *work)
524524
mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
525525
cmd->num_comps);
526526

527-
if (atomic_dec_and_test(&mdp->job_count)) {
527+
if (refcount_dec_and_test(&mdp->job_count)) {
528528
if (cmd->mdp_ctx)
529529
mdp_m2m_job_finish(cmd->mdp_ctx);
530530

@@ -575,7 +575,7 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
575575
mdp_comp_clocks_off(&mdp->pdev->dev, cmd->comps,
576576
cmd->num_comps);
577577

578-
if (atomic_dec_and_test(&mdp->job_count))
578+
if (refcount_dec_and_test(&mdp->job_count))
579579
wake_up(&mdp->callback_wq);
580580

581581
mdp_cmdq_pkt_destroy(&cmd->pkt);
@@ -724,9 +724,9 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
724724
int i, ret;
725725
u8 pp_used = __get_pp_num(param->param->type);
726726

727-
atomic_set(&mdp->job_count, pp_used);
727+
refcount_set(&mdp->job_count, pp_used);
728728
if (atomic_read(&mdp->suspended)) {
729-
atomic_set(&mdp->job_count, 0);
729+
refcount_set(&mdp->job_count, 0);
730730
return -ECANCELED;
731731
}
732732

@@ -764,7 +764,7 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
764764
mdp_comp_clocks_off(&mdp->pdev->dev, cmd[i]->comps,
765765
cmd[i]->num_comps);
766766
err_cancel_job:
767-
atomic_set(&mdp->job_count, 0);
767+
refcount_set(&mdp->job_count, 0);
768768

769769
return ret;
770770
}

drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -380,14 +380,14 @@ static int __maybe_unused mdp_suspend(struct device *dev)
380380

381381
atomic_set(&mdp->suspended, 1);
382382

383-
if (atomic_read(&mdp->job_count)) {
383+
if (refcount_read(&mdp->job_count)) {
384384
ret = wait_event_timeout(mdp->callback_wq,
385-
!atomic_read(&mdp->job_count),
385+
!refcount_read(&mdp->job_count),
386386
2 * HZ);
387387
if (ret == 0) {
388388
dev_err(dev,
389389
"%s:flushed cmdq task incomplete, count=%d\n",
390-
__func__, atomic_read(&mdp->job_count));
390+
__func__, refcount_read(&mdp->job_count));
391391
return -EBUSY;
392392
}
393393
}

drivers/media/platform/mediatek/mdp3/mtk-mdp3-core.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ struct mdp_dev {
134134
/* synchronization protect for m2m device operation */
135135
struct mutex m2m_lock;
136136
atomic_t suspended;
137-
atomic_t job_count;
137+
refcount_t job_count;
138138
};
139139

140140
struct mdp_pipe_info {

drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,14 @@ static void mdp_m2m_device_run(void *priv)
104104
task.cb_data = NULL;
105105
task.mdp_ctx = ctx;
106106

107-
if (atomic_read(&ctx->mdp_dev->job_count)) {
107+
if (refcount_read(&ctx->mdp_dev->job_count)) {
108108
ret = wait_event_timeout(ctx->mdp_dev->callback_wq,
109-
!atomic_read(&ctx->mdp_dev->job_count),
109+
!refcount_read(&ctx->mdp_dev->job_count),
110110
2 * HZ);
111111
if (ret == 0) {
112112
dev_err(&ctx->mdp_dev->pdev->dev,
113113
"%d jobs not yet done\n",
114-
atomic_read(&ctx->mdp_dev->job_count));
114+
refcount_read(&ctx->mdp_dev->job_count));
115115
goto worker_end;
116116
}
117117
}

0 commit comments

Comments
 (0)