Mali: utgard: Replace calls to dma_fence_ops::signaled with dma_fence_is_signaled()

To address the issue in kernel 6.1 that 'dma_fence_ops::signaled'
is NULL for certain signaled fence instances.

Change-Id: Ie5e03e849947a9cd2b02fd057ebb44878aa2d0b0
Signed-off-by: Zhen Chen <chenzhen@rock-chips.com>
This commit is contained in:
Zhen Chen
2024-11-20 16:34:53 +08:00
committed by Tao Huang
parent f965b5da7c
commit b2a3a28618
3 changed files with 5 additions and 8 deletions

2
drivers/gpu/arm/mali400/mali/common/mali_timeline.c Executable file → Normal file
View File

@@ -1551,7 +1551,7 @@ static void mali_timeline_do_sync_fence_callback(void *arg)
#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
fence_status = atomic_read(&sync_fence->status);
#else
fence_status = sync_fence->fence->ops->signaled(sync_fence->fence);
fence_status = dma_fence_is_signaled(sync_fence->fence);
#endif
system = tracker->system;

View File

@@ -113,7 +113,7 @@ static mali_bool mali_timeline_fence_wait_check_status(struct mali_timeline_syst
#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
if (0 < atomic_read(&sync_fence->status)) {
#else
if (0 == sync_fence->fence->ops->signaled(sync_fence->fence)) {
if (0 == dma_fence_is_signaled(sync_fence->fence)) {
#endif
ret = MALI_FALSE;

View File

@@ -92,7 +92,7 @@ static void mali_internal_fence_check_cb_func(struct dma_fence *fence, struct dm
if (ret)
wake_up_all(&sync_fence->wq);
#else
ret = sync_fence->fence->ops->signaled(sync_fence->fence);
ret = dma_fence_is_signaled(sync_fence->fence);
if (0 > ret)
MALI_PRINT_ERROR(("Mali internal sync:Failed to wait fence 0x%x for sync_fence 0x%x.\n", fence, sync_fence));
@@ -557,10 +557,7 @@ int mali_internal_sync_fence_wait_async(struct mali_internal_sync_fence *sync_fe
return !err;
#else
if ((sync_fence->fence) && (sync_fence->fence->ops) && (sync_fence->fence->ops->signaled))
err = sync_fence->fence->ops->signaled(sync_fence->fence);
else
err = -1;
err = dma_fence_is_signaled(sync_fence->fence);
if (0 > err)
return err;
@@ -583,7 +580,7 @@ int mali_internal_sync_fence_wait_async(struct mali_internal_sync_fence *sync_fe
waiter->work.private = sync_fence;
spin_lock_irqsave(&sync_fence->wq.lock, flags);
err = sync_fence->fence->ops->signaled(sync_fence->fence);
err = dma_fence_is_signaled(sync_fence->fence);
if (0 == err){
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 13, 0)