diff options
author | Sachit Kadle <skadle@nvidia.com> | 2016-08-22 21:06:30 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-10-20 11:14:04 -0400 |
commit | 63e8592e06939e20c7b9e56b430353ebbee31ad6 (patch) | |
tree | b91247eebf886f4e987d38eb4069aceace284ecf /drivers/gpu/nvgpu/gk20a/fence_gk20a.h | |
parent | 3c2656c8c6ebf7cef7376d3a28451249643121c4 (diff) |
gpu: nvgpu: use inplace allocation in sync framework
This change is the first of a series of changes to
support the usage of pre-allocated job tracking resources
in the submit path. With this change, we still maintain a
dynamically-allocated joblist, but make the necessary changes
in the channel_sync & fence framework to use in-place
allocations. Specifically, we:
1) Update channel sync framework routines to take in
pre-allocated priv_cmd_entry(s) & gk20a_fence(s) rather
than dynamically allocating themselves
2) Move allocation of priv_cmd_entry(s) & gk20a_fence(s)
to gk20a_submit_prepare_syncs
3) Modify fence framework to have seperate allocation
and init APIs. We expose allocation as a seperate API, so
the client can allocate the object before passing it into
the channel sync framework.
4) Fix clean_up logic in channel sync framework
Bug 1795076
Change-Id: I96db457683cd207fd029c31c45f548f98055e844
Signed-off-by: Sachit Kadle <skadle@nvidia.com>
Reviewed-on: http://git-master/r/1206725
(cherry picked from commit 9d196fd10db6c2f934c2a53b1fc0500eb4626624)
Reviewed-on: http://git-master/r/1223933
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fence_gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fence_gk20a.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fence_gk20a.h b/drivers/gpu/nvgpu/gk20a/fence_gk20a.h index 35488ea3..3fe2d8b2 100644 --- a/drivers/gpu/nvgpu/gk20a/fence_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fence_gk20a.h | |||
@@ -31,6 +31,7 @@ struct gk20a_fence_ops; | |||
31 | 31 | ||
32 | struct gk20a_fence { | 32 | struct gk20a_fence { |
33 | /* Valid for all fence types: */ | 33 | /* Valid for all fence types: */ |
34 | bool valid; | ||
34 | struct kref ref; | 35 | struct kref ref; |
35 | bool wfi; | 36 | bool wfi; |
36 | struct sync_fence *sync_fence; | 37 | struct sync_fence *sync_fence; |
@@ -47,21 +48,25 @@ struct gk20a_fence { | |||
47 | }; | 48 | }; |
48 | 49 | ||
49 | /* Fences can be created from semaphores or syncpoint (id, value) pairs */ | 50 | /* Fences can be created from semaphores or syncpoint (id, value) pairs */ |
50 | struct gk20a_fence *gk20a_fence_from_semaphore( | 51 | int gk20a_fence_from_semaphore( |
52 | struct gk20a_fence *fence_out, | ||
51 | struct sync_timeline *timeline, | 53 | struct sync_timeline *timeline, |
52 | struct gk20a_semaphore *semaphore, | 54 | struct gk20a_semaphore *semaphore, |
53 | wait_queue_head_t *semaphore_wq, | 55 | wait_queue_head_t *semaphore_wq, |
54 | struct sync_fence *dependency, | 56 | struct sync_fence *dependency, |
55 | bool wfi, bool need_sync_fence); | 57 | bool wfi, bool need_sync_fence); |
56 | 58 | ||
57 | struct gk20a_fence *gk20a_fence_from_syncpt( | 59 | int gk20a_fence_from_syncpt( |
60 | struct gk20a_fence *fence_out, | ||
58 | struct platform_device *host1x_pdev, | 61 | struct platform_device *host1x_pdev, |
59 | u32 id, u32 value, bool wfi, | 62 | u32 id, u32 value, bool wfi, |
60 | bool need_sync_fence); | 63 | bool need_sync_fence); |
61 | 64 | ||
62 | struct gk20a_fence *gk20a_alloc_fence(const struct gk20a_fence_ops *ops, | 65 | struct gk20a_fence *gk20a_alloc_fence(struct channel_gk20a *c); |
63 | struct sync_fence *sync_fence, | 66 | |
64 | bool wfi); | 67 | void gk20a_init_fence(struct gk20a_fence *f, |
68 | const struct gk20a_fence_ops *ops, | ||
69 | struct sync_fence *sync_fence, bool wfi); | ||
65 | 70 | ||
66 | /* Fence operations */ | 71 | /* Fence operations */ |
67 | void gk20a_fence_put(struct gk20a_fence *f); | 72 | void gk20a_fence_put(struct gk20a_fence *f); |