mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 02:22:34 +03:00
gpu: nvgpu: create sync_fence only if needed
Currently, we create sync_fence (from nvhost_sync_create_fence()) for every submit But not all submits request for a sync_fence. Also, nvhost_sync_create_fence() API takes about 1/3rd of the total submit path. Hence to optimize, we can allocate sync_fence only when user explicitly asks for it using (NVGPU_SUBMIT_GPFIFO_FLAGS_FENCE_GET && NVGPU_SUBMIT_GPFIFO_FLAGS_SYNC_FENCE) Also, in CDE path from gk20a_prepare_compressible_read(), we reuse existing fence stored in "state" and that can result into not returning sync_fence_fd when user asked for it Hence, force allocation of sync_fence when job submission comes from CDE path Bug 200141116 Change-Id: Ia921701bf0e2432d6b8a5e8b7d91160e7f52db1e Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/812845 (cherry picked from commit 5fd47015eeed00352cc8473eff969a66c94fee98) Reviewed-on: http://git-master/r/837662 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Sachin Nikam <snikam@nvidia.com>
This commit is contained in:
committed by
Sachin Nikam
parent
937de14907
commit
52753b51f1
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* GK20A Channel Synchronization Abstraction
|
||||
*
|
||||
* Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
|
||||
* Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
@@ -54,7 +54,8 @@ struct gk20a_channel_sync {
|
||||
*/
|
||||
int (*incr)(struct gk20a_channel_sync *s,
|
||||
struct priv_cmd_entry **entry,
|
||||
struct gk20a_fence **fence);
|
||||
struct gk20a_fence **fence,
|
||||
bool need_sync_fence);
|
||||
|
||||
/* Increment syncpoint/semaphore, preceded by a wfi.
|
||||
* Returns
|
||||
@@ -76,7 +77,8 @@ struct gk20a_channel_sync {
|
||||
int wait_fence_fd,
|
||||
struct priv_cmd_entry **entry,
|
||||
struct gk20a_fence **fence,
|
||||
bool wfi);
|
||||
bool wfi,
|
||||
bool need_sync_fence);
|
||||
|
||||
/* Reset the channel syncpoint/semaphore. */
|
||||
void (*set_min_eq_max)(struct gk20a_channel_sync *s);
|
||||
|
||||
Reference in New Issue
Block a user