amdxdna_cmd_submit() leaves job->cmd_bo as NULL for internal driver
commands that use AMDXDNA_INVALID_BO_HANDLE. The cleanup paths in
amdxdna_cmd_submit() error handling and amdxdna_sched_job_cleanup()
call amdxdna_gem_put_obj(job->cmd_bo) unconditionally.

Although drm_gem_object_put() handles NULL, adding an explicit check
makes the code more robust and easier to reason about.

Signed-off-by: Deniz Aydogan <[email protected]>
---
 drivers/accel/amdxdna/amdxdna_ctx.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/accel/amdxdna/amdxdna_ctx.c 
b/drivers/accel/amdxdna/amdxdna_ctx.c
index 31a414c3f..21f0560e6 100644
--- a/drivers/accel/amdxdna/amdxdna_ctx.c
+++ b/drivers/accel/amdxdna/amdxdna_ctx.c
@@ -575,7 +575,8 @@ void amdxdna_sched_job_cleanup(struct amdxdna_sched_job 
*job)
        trace_amdxdna_debug_point(job->hwctx->name, job->seq, "job release");
        amdxdna_pm_suspend_put(job->hwctx->client->xdna);
        amdxdna_arg_bos_put(job);
-       amdxdna_gem_put_obj(job->cmd_bo);
+       if (job->cmd_bo)
+               amdxdna_gem_put_obj(job->cmd_bo);
        dma_fence_put(job->fence);
        mmdrop(job->mm);
 }
@@ -676,7 +677,8 @@ int amdxdna_cmd_submit(struct amdxdna_client *client,
 put_bos:
        amdxdna_arg_bos_put(job);
 cmd_put:
-       amdxdna_gem_put_obj(job->cmd_bo);
+       if (job->cmd_bo)
+               amdxdna_gem_put_obj(job->cmd_bo);
 free_job:
        if (job->mm)
                mmdrop(job->mm);
-- 
2.55.0

Reply via email to