[PATCH 02/13] drm/scheduler: add drm_sched_job_add_resv_dependencies

Christian König christian.koenig at amd.com
Fri Sep 30 12:12:13 UTC 2022


Well this won't be fixed on older kernel like 5.4 or 5.15.

You at least need something like 5.19 and even then you need to look 
into backporting that stuff.

Regards,
Christian.

Am 30.09.22 um 04:05 schrieb Chien, WenChieh (Jay):
> [AMD Official Use Only - General]
>
> Hi Christian
>
> This looks on kernel revision 5.15, currently, the Zork use 5.4
> Google also comment that kernel 5.15 fix the issue.
>
> I'm not sure the kernel  have rev plan to 5.15 or not
> We will discuss this on 10/3.
>
> Do you suggest that use kernel 5.15 and merge patch to test  ?
>
> Jay
>
>
>
> -----Original Message-----
> From: Christian König <ckoenig.leichtzumerken at gmail.com>
> Sent: Thursday, September 29, 2022 9:21 PM
> To: dri-devel at lists.freedesktop.org
> Cc: Grodzovsky, Andrey <Andrey.Grodzovsky at amd.com>; Chien, WenChieh (Jay) <WenChieh.Chien at amd.com>; Wang, Chester <shansheng.wang at amd.com>; Tuikov, Luben <Luben.Tuikov at amd.com>; Koenig, Christian <Christian.Koenig at amd.com>
> Subject: [PATCH 02/13] drm/scheduler: add drm_sched_job_add_resv_dependencies
>
> Add a new function to update job dependencies from a resv obj.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>   drivers/gpu/drm/scheduler/sched_main.c | 49 ++++++++++++++++++--------
>   include/drm/gpu_scheduler.h            |  5 +++
>   2 files changed, 39 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
> index e0ab14e0fb6b..6e2cd0f906b2 100644
> --- a/drivers/gpu/drm/scheduler/sched_main.c
> +++ b/drivers/gpu/drm/scheduler/sched_main.c
> @@ -685,32 +685,28 @@ int drm_sched_job_add_dependency(struct drm_sched_job *job,  EXPORT_SYMBOL(drm_sched_job_add_dependency);
>   
>   /**
> - * drm_sched_job_add_implicit_dependencies - adds implicit dependencies as job
> - *   dependencies
> + * drm_sched_job_add_resv_dependencies - add all fences from the resv
> + to the job
>    * @job: scheduler job to add the dependencies to
> - * @obj: the gem object to add new dependencies from.
> - * @write: whether the job might write the object (so we need to depend on
> - * shared fences in the reservation object).
> + * @resv: the dma_resv object to get the fences from
> + * @usage: the dma_resv_usage to use to filter the fences
>    *
> - * This should be called after drm_gem_lock_reservations() on your array of
> - * GEM objects used in the job but before updating the reservations with your
> - * own fences.
> + * This adds all fences matching the given usage from @resv to @job.
> + * Must be called with the @resv lock held.
>    *
>    * Returns:
>    * 0 on success, or an error on failing to expand the array.
>    */
> -int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
> -					    struct drm_gem_object *obj,
> -					    bool write)
> +int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
> +					struct dma_resv *resv,
> +					enum dma_resv_usage usage)
>   {
>   	struct dma_resv_iter cursor;
>   	struct dma_fence *fence;
>   	int ret;
>   
> -	dma_resv_assert_held(obj->resv);
> +	dma_resv_assert_held(resv);
>   
> -	dma_resv_for_each_fence(&cursor, obj->resv, dma_resv_usage_rw(write),
> -				fence) {
> +	dma_resv_for_each_fence(&cursor, resv, usage, fence) {
>   		/* Make sure to grab an additional ref on the added fence */
>   		dma_fence_get(fence);
>   		ret = drm_sched_job_add_dependency(job, fence); @@ -721,8 +717,31 @@ int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
>   	}
>   	return 0;
>   }
> -EXPORT_SYMBOL(drm_sched_job_add_implicit_dependencies);
> +EXPORT_SYMBOL(drm_sched_job_add_resv_dependencies);
>   
> +/**
> + * drm_sched_job_add_implicit_dependencies - adds implicit dependencies as job
> + *   dependencies
> + * @job: scheduler job to add the dependencies to
> + * @obj: the gem object to add new dependencies from.
> + * @write: whether the job might write the object (so we need to depend
> +on
> + * shared fences in the reservation object).
> + *
> + * This should be called after drm_gem_lock_reservations() on your
> +array of
> + * GEM objects used in the job but before updating the reservations
> +with your
> + * own fences.
> + *
> + * Returns:
> + * 0 on success, or an error on failing to expand the array.
> + */
> +int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
> +					    struct drm_gem_object *obj,
> +					    bool write)
> +{
> +	return drm_sched_job_add_resv_dependencies(job, obj->resv,
> +						   dma_resv_usage_rw(write));
> +}
> +EXPORT_SYMBOL(drm_sched_job_add_implicit_dependencies);
>   
>   /**
>    * drm_sched_job_cleanup - clean up scheduler job resources diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h index 0fca8f38bee4..3315e5be7791 100644
> --- a/include/drm/gpu_scheduler.h
> +++ b/include/drm/gpu_scheduler.h
> @@ -32,6 +32,8 @@
>   
>   #define MAX_WAIT_SCHED_ENTITY_Q_EMPTY msecs_to_jiffies(1000)
>   
> +enum dma_resv_usage;
> +struct dma_resv;
>   struct drm_gem_object;
>   
>   struct drm_gpu_scheduler;
> @@ -474,6 +476,9 @@ int drm_sched_job_init(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,
>   				 struct dma_fence *fence);
> +int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
> +					struct dma_resv *resv,
> +					enum dma_resv_usage usage);
>   int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
>   					    struct drm_gem_object *obj,
>   					    bool write);
> --
> 2.25.1



More information about the dri-devel mailing list