From 7b8cbd2be37643e755ccb204e38c20b17aac28bd Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Thu, 28 Jul 2016 11:22:53 -0700 Subject: gpu: nvgpu: Greatly simplify the semaphore detection Greatly simplify and make more robust the gpu semaphore detection in sync_fences. Instead of using a magic number use the parent timeline of sync_pts. This will also work with multi-GPU setups using nvgpu since the timeline ops pointer will be the same across all instances of nvgpu. Bug 1732449 Reviewed-on: http://git-master/r/1203834 (cherry picked from commit 66eeb577eae5d10741fd15f3659e843c70792cd6) Change-Id: I4c6619d70b5531e2676e18d1330724e8f8b9bcb3 Signed-off-by: Alex Waterman Reviewed-on: http://git-master/r/1221042 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c index 98363c88..0eff4e2f 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c @@ -510,24 +510,7 @@ static int gk20a_channel_semaphore_wait_syncpt( return -ENODEV; } -/* - * UGHHH - the sync_fence underlying implementation changes from 3.10 to 3.18. - * But since there's no API for getting the underlying sync_pts we have to do - * some conditional compilation. - */ #ifdef CONFIG_SYNC -static struct gk20a_semaphore *sema_from_sync_fence(struct sync_fence *f) -{ -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,0) - struct sync_pt *pt; - - pt = list_first_entry(&f->pt_list_head, struct sync_pt, pt_list); - return gk20a_sync_pt_inst_get_sema(pt); -#else - return gk20a_sync_pt_inst_get_sema(f->cbs[0].sync_pt); -#endif -} - /* * Attempt a fast path for waiting on a sync_fence. Basically if the passed * sync_fence is backed by a gk20a_semaphore then there's no reason to go @@ -551,7 +534,7 @@ static int __semaphore_wait_fd_fast_path(struct channel_gk20a *c, if (!gk20a_is_sema_backed_sync_fence(fence)) return -ENODEV; - sema = sema_from_sync_fence(fence); + sema = gk20a_sync_fence_get_sema(fence); /* * If there's no underlying sema then that means the underlying sema has -- cgit v1.2.2