mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
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:
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user