video: rockchip: rga3: Async mode will pass error code through fence

Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
Change-Id: I2354d6d2e0253aa061c759fef39aa29af54119e7
This commit is contained in:
Yu Qiaowei
2022-08-16 17:13:31 +08:00
parent 647206278f
commit 83e96ce187
2 changed files with 17 additions and 5 deletions

View File

@@ -38,15 +38,21 @@ static inline void rga_dma_fence_put(struct dma_fence *fence)
dma_fence_put(fence);
}
static inline void rga_dma_fence_signal(struct dma_fence *fence)
static inline void rga_dma_fence_signal(struct dma_fence *fence, int error)
{
if (fence)
if (fence) {
if (error != 0)
dma_fence_set_error(fence, error);
dma_fence_signal(fence);
}
}
static inline int rga_dma_fence_get_status(struct dma_fence *fence)
{
return dma_fence_get_status(fence);
if (fence)
return dma_fence_get_status(fence);
else
return 1;
}
#else
@@ -81,7 +87,7 @@ static inline void rga_dma_fence_put(struct dma_fence *fence)
{
}
static inline void rga_dma_fence_signal(struct dma_fence *fence)
static inline void rga_dma_fence_signal(struct dma_fence *fence, int error)
{
}

View File

@@ -755,6 +755,8 @@ err_request_abort:
spin_unlock_irqrestore(&request->lock, flags);
rga_dma_fence_signal(request->release_fence, -EBUSY);
mutex_lock(&request_manager->lock);
/* current submit request put */
rga_request_put(request);
@@ -843,7 +845,8 @@ int rga_request_release_signal(struct rga_scheduler_t *scheduler, struct rga_job
spin_unlock_irqrestore(&request->lock, flags);
rga_dma_fence_signal(request->release_fence);
rga_dma_fence_signal(request->release_fence, request->ret);
wake_up(&request->finished_wq);
if (DEBUGGER_EN(MSG))
@@ -1141,6 +1144,9 @@ static void rga_request_kref_release(struct kref *ref)
request = container_of(ref, struct rga_request, refcount);
if (rga_dma_fence_get_status(request->release_fence) == 0)
rga_dma_fence_signal(request->release_fence, -EEXIST);
spin_lock_irqsave(&request->lock, flags);
rga_dma_fence_put(request->release_fence);