video: rockchip: rga3: signaled fecne after request commit failed

Change-Id: I32b35bece1b20aa3228d6d4107b0dad1f4ce6c22
Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
This commit is contained in:
Yu Qiaowei
2023-10-26 19:54:26 +08:00
committed by Tao Huang
parent 24224012dd
commit d645107744

View File

@@ -848,12 +848,28 @@ int rga_request_commit(struct rga_request *request)
static void rga_request_acquire_fence_signaled_cb(struct dma_fence *fence,
struct dma_fence_cb *_waiter)
{
int ret;
unsigned long flags;
struct rga_fence_waiter *waiter = (struct rga_fence_waiter *)_waiter;
struct rga_request *request = (struct rga_request *)waiter->private;
struct rga_pending_request_manager *request_manager = rga_drvdata->pend_request_manager;
if (rga_request_commit(request))
pr_err("rga request[%d] commit failed!\n", request->id);
ret = rga_request_commit(request);
if (ret < 0) {
pr_err("acquire_fence callback: rga request[%d] commit failed!\n", request->id);
spin_lock_irqsave(&request->lock, flags);
rga_request_put_current_mm(request);
request->is_running = false;
spin_unlock_irqrestore(&request->lock, flags);
/*
* Since the callback is called while holding &dma_fence.lock,
* the _locked API is used here.
*/
if (dma_fence_get_status_locked(request->release_fence) == 0)
dma_fence_signal_locked(request->release_fence);
}
mutex_lock(&request_manager->lock);
rga_request_put(request);