mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 18:16:01 +03:00
The pre-fence wait for semaphores in the submit path has supported a fast path for fences that have only one underlying semaphore. The fast path just inserts the wait on this sema to the pushbuffer directly. For other fences, the path has been using a CPU wait indirection, signaling another semaphore when we get the CPU-side callback. Instead of only supporting prefences with one sema, unroll all the individual semaphores and insert waits for each to a pushbuffer, like we've already been doing with syncpoints. Now all sema-backed syncs get the fast path. This simplifies the logic and makes it more explicit that only foreign fences need the CPU wait. There is no need to hold references to the sync fence or the semas inside: this submitted job only needs the global read-only sema mapping that is guaranteed to stay alive while the VM of this channel stays alive, and the job does not outlive this channel. Jira NVGPU-43 Jira NVGPU-66 Jira NVGPU-513 Change-Id: I7cfbb510001d998a864aed8d6afd1582b9adb80d Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1636345 Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
57 lines
2.1 KiB
C
57 lines
2.1 KiB
C
/*
|
|
* drivers/video/tegra/host/gk20a/sync_gk20a.h
|
|
*
|
|
* GK20A Sync Framework Integration
|
|
*
|
|
* Copyright (c) 2014-2018, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#ifndef _GK20A_SYNC_H_
|
|
#define _GK20A_SYNC_H_
|
|
|
|
struct sync_timeline;
|
|
struct sync_fence;
|
|
struct sync_pt;
|
|
struct nvgpu_semaphore;
|
|
struct fence;
|
|
|
|
#ifdef CONFIG_SYNC
|
|
struct sync_timeline *gk20a_sync_timeline_create(const char *fmt, ...);
|
|
void gk20a_sync_timeline_destroy(struct sync_timeline *);
|
|
void gk20a_sync_timeline_signal(struct sync_timeline *);
|
|
struct sync_fence *gk20a_sync_fence_create(
|
|
struct gk20a *g,
|
|
struct sync_timeline *,
|
|
struct nvgpu_semaphore *,
|
|
const char *fmt, ...);
|
|
struct sync_fence *gk20a_sync_fence_fdget(int fd);
|
|
struct nvgpu_semaphore *gk20a_sync_pt_sema(struct sync_pt *spt);
|
|
#else
|
|
static inline void gk20a_sync_timeline_destroy(struct sync_timeline *obj) {}
|
|
static inline void gk20a_sync_timeline_signal(struct sync_timeline *obj) {}
|
|
static inline struct sync_fence *gk20a_sync_fence_fdget(int fd)
|
|
{
|
|
return NULL;
|
|
}
|
|
#endif
|
|
|
|
#endif
|