mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
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 <alexw@nvidia.com> Reviewed-on: http://git-master/r/1221042 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
9bd76b7fa0
commit
7b8cbd2be3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user