mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
drm/sched: Create wrapper to add a syncobj dependency to job
In order to add a syncobj's fence as a dependency to a job, it is necessary to call drm_syncobj_find_fence() to find the fence and then add the dependency with drm_sched_job_add_dependency(). So, wrap these steps in one single function, drm_sched_job_add_syncobj_dependency(). Reviewed-by: Christian König <christian.koenig@amd.com> Reviewed-by: Luben Tuikov <luben.tuikov@amd.com> Signed-off-by: Maíra Canal <mcanal@igalia.com> Signed-off-by: Maíra Canal <mairacanal@riseup.net> Link: https://patchwork.freedesktop.org/patch/msgid/20230209124447.467867-2-mcanal@igalia.com
This commit is contained in:
@@ -53,6 +53,7 @@
|
|||||||
|
|
||||||
#include <drm/drm_print.h>
|
#include <drm/drm_print.h>
|
||||||
#include <drm/drm_gem.h>
|
#include <drm/drm_gem.h>
|
||||||
|
#include <drm/drm_syncobj.h>
|
||||||
#include <drm/gpu_scheduler.h>
|
#include <drm/gpu_scheduler.h>
|
||||||
#include <drm/spsc_queue.h>
|
#include <drm/spsc_queue.h>
|
||||||
|
|
||||||
@@ -718,6 +719,34 @@ int drm_sched_job_add_dependency(struct drm_sched_job *job,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_sched_job_add_dependency);
|
EXPORT_SYMBOL(drm_sched_job_add_dependency);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_sched_job_add_syncobj_dependency - adds a syncobj's fence as a job dependency
|
||||||
|
* @job: scheduler job to add the dependencies to
|
||||||
|
* @file_private: drm file private pointer
|
||||||
|
* @handle: syncobj handle to lookup
|
||||||
|
* @point: timeline point
|
||||||
|
*
|
||||||
|
* This adds the fence matching the given syncobj to @job.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, or an error on failing to expand the array.
|
||||||
|
*/
|
||||||
|
int drm_sched_job_add_syncobj_dependency(struct drm_sched_job *job,
|
||||||
|
struct drm_file *file,
|
||||||
|
u32 handle,
|
||||||
|
u32 point)
|
||||||
|
{
|
||||||
|
struct dma_fence *fence;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = drm_syncobj_find_fence(file, handle, point, 0, &fence);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return drm_sched_job_add_dependency(job, fence);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_sched_job_add_syncobj_dependency);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* drm_sched_job_add_resv_dependencies - add all fences from the resv to the job
|
* drm_sched_job_add_resv_dependencies - add all fences from the resv to the job
|
||||||
* @job: scheduler job to add the dependencies to
|
* @job: scheduler job to add the dependencies to
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ struct drm_gem_object;
|
|||||||
struct drm_gpu_scheduler;
|
struct drm_gpu_scheduler;
|
||||||
struct drm_sched_rq;
|
struct drm_sched_rq;
|
||||||
|
|
||||||
|
struct drm_file;
|
||||||
|
|
||||||
/* These are often used as an (initial) index
|
/* These are often used as an (initial) index
|
||||||
* to an array, and as such should start at 0.
|
* to an array, and as such should start at 0.
|
||||||
*/
|
*/
|
||||||
@@ -515,6 +517,10 @@ int drm_sched_job_init(struct drm_sched_job *job,
|
|||||||
void drm_sched_job_arm(struct drm_sched_job *job);
|
void drm_sched_job_arm(struct drm_sched_job *job);
|
||||||
int drm_sched_job_add_dependency(struct drm_sched_job *job,
|
int drm_sched_job_add_dependency(struct drm_sched_job *job,
|
||||||
struct dma_fence *fence);
|
struct dma_fence *fence);
|
||||||
|
int drm_sched_job_add_syncobj_dependency(struct drm_sched_job *job,
|
||||||
|
struct drm_file *file,
|
||||||
|
u32 handle,
|
||||||
|
u32 point);
|
||||||
int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
|
int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
|
||||||
struct dma_resv *resv,
|
struct dma_resv *resv,
|
||||||
enum dma_resv_usage usage);
|
enum dma_resv_usage usage);
|
||||||
|
|||||||
Reference in New Issue
Block a user