video: rockchip: rga3: mpi: fix submit failed causing request to be released

Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
Change-Id: I05976707580d6892cb706356f8063152c4bfca1e
This commit is contained in:
Yu Qiaowei
2024-04-26 17:03:26 +08:00
committed by Tao Huang
parent dc39be5e13
commit 05baafeecf
2 changed files with 18 additions and 13 deletions

View File

@@ -127,10 +127,6 @@ int rga_mpi_commit(struct rga_mpi_job_t *mpi_job)
return -EINVAL;
}
/*
* The mpi commit will use the request repeatedly, so an additional
* get() is added here.
*/
rga_request_get(request);
mutex_unlock(&request_manager->lock);
@@ -217,13 +213,6 @@ int rga_mpi_commit(struct rga_mpi_job_t *mpi_job)
goto err_put_request;
}
if ((mpi_job->dma_buf_src0 != NULL) && (mpi_cmd.src.yrgb_addr > 0))
rga_mm_release_buffer(mpi_cmd.src.yrgb_addr);
if ((mpi_job->dma_buf_src1 != NULL) && (mpi_cmd.pat.yrgb_addr > 0))
rga_mm_release_buffer(mpi_cmd.pat.yrgb_addr);
if ((mpi_job->dma_buf_dst != NULL) && (mpi_cmd.dst.yrgb_addr > 0))
rga_mm_release_buffer(mpi_cmd.dst.yrgb_addr);
/* copy dst info to mpi job for next node */
if (mpi_job->output != NULL) {
mpi_job->output->x_offset = mpi_cmd.dst.x_offset;
@@ -236,9 +225,14 @@ int rga_mpi_commit(struct rga_mpi_job_t *mpi_job)
mpi_job->output->format = mpi_cmd.dst.format;
}
return 0;
err_put_request:
if ((mpi_job->dma_buf_src0 != NULL) && (mpi_cmd.src.yrgb_addr > 0))
rga_mm_release_buffer(mpi_cmd.src.yrgb_addr);
if ((mpi_job->dma_buf_src1 != NULL) && (mpi_cmd.pat.yrgb_addr > 0))
rga_mm_release_buffer(mpi_cmd.pat.yrgb_addr);
if ((mpi_job->dma_buf_dst != NULL) && (mpi_cmd.dst.yrgb_addr > 0))
rga_mm_release_buffer(mpi_cmd.dst.yrgb_addr);
mutex_lock(&request_manager->lock);
rga_request_put(request);
mutex_unlock(&request_manager->lock);

View File

@@ -1204,6 +1204,9 @@ int rga_request_mpi_submit(struct rga_req *req, struct rga_request *request)
int ret = 0;
struct rga_job *job = NULL;
unsigned long flags;
struct rga_pending_request_manager *request_manager;
request_manager = rga_drvdata->pend_request_manager;
if (request->sync_mode == RGA_BLIT_ASYNC) {
pr_err("mpi unsupported async mode!\n");
@@ -1232,6 +1235,14 @@ int rga_request_mpi_submit(struct rga_req *req, struct rga_request *request)
spin_unlock_irqrestore(&request->lock, flags);
/*
* The mpi submit will use the request repeatedly, so an additional
* get() is added here.
*/
mutex_lock(&request_manager->lock);
rga_request_get(request);
mutex_unlock(&request_manager->lock);
job = rga_job_commit(req, request);
if (IS_ERR_OR_NULL(job)) {
pr_err("failed to commit job!\n");