All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/sched: Add helper to check job dependencies
@ 2025-01-13 10:33 Tvrtko Ursulin
  2025-01-13 10:33 ` [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper Tvrtko Ursulin
  2025-01-13 13:12 ` [PATCH 1/2] drm/sched: Add helper to check job dependencies Danilo Krummrich
  0 siblings, 2 replies; 7+ messages in thread
From: Tvrtko Ursulin @ 2025-01-13 10:33 UTC (permalink / raw)
  To: dri-devel
  Cc: kernel-dev, Tvrtko Ursulin, Christian König,
	Danilo Krummrich, Matthew Brost, Philipp Stanner, Matt Coster

Lets isolate scheduler internals from drivers such as pvr which currently
walks the dependency array to look for fences.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Danilo Krummrich <dakr@redhat.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Philipp Stanner <pstanner@redhat.com>
Reviewed-by: Matt Coster <matt.coster@imgtec.com>
---
 drivers/gpu/drm/scheduler/sched_main.c | 23 +++++++++++++++++++++++
 include/drm/gpu_scheduler.h            |  3 ++-
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index 57da84908752..e6f1f2a8e033 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -997,6 +997,29 @@ int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
 }
 EXPORT_SYMBOL(drm_sched_job_add_implicit_dependencies);
 
+/**
+ * drm_sched_job_has_dependency - check whether fence is the job's dependency
+ * @job: scheduler job to check
+ * @fence: fence to look for
+ *
+ * Returns:
+ * True if @fence is found within the job's dependencies, or otherwise false.
+ */
+bool drm_sched_job_has_dependency(struct drm_sched_job *job,
+				  struct dma_fence *fence)
+{
+	struct dma_fence *f;
+	unsigned long index;
+
+	xa_for_each(&job->dependencies, index, f) {
+		if (f == fence)
+			return true;
+	}
+
+	return false;
+}
+EXPORT_SYMBOL(drm_sched_job_has_dependency);
+
 /**
  * drm_sched_job_cleanup - clean up scheduler job resources
  * @job: scheduler job to clean up
diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
index 95e17504e46a..d118a0a57ab1 100644
--- a/include/drm/gpu_scheduler.h
+++ b/include/drm/gpu_scheduler.h
@@ -577,7 +577,8 @@ int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
 int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
 					    struct drm_gem_object *obj,
 					    bool write);
-
+bool drm_sched_job_has_dependency(struct drm_sched_job *job,
+				  struct dma_fence *fence);
 
 void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
 				    struct drm_gpu_scheduler **sched_list,
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper
  2025-01-13 10:33 [PATCH 1/2] drm/sched: Add helper to check job dependencies Tvrtko Ursulin
@ 2025-01-13 10:33 ` Tvrtko Ursulin
  2025-01-16 10:02   ` Philipp Stanner
  2025-01-13 13:12 ` [PATCH 1/2] drm/sched: Add helper to check job dependencies Danilo Krummrich
  1 sibling, 1 reply; 7+ messages in thread
From: Tvrtko Ursulin @ 2025-01-13 10:33 UTC (permalink / raw)
  To: dri-devel
  Cc: kernel-dev, Tvrtko Ursulin, Christian König,
	Danilo Krummrich, Matthew Brost, Philipp Stanner, Frank Binns,
	Matt Coster

Instead of manually peeking into the DRM scheduler implementation details
lets use the previously added helper.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Danilo Krummrich <dakr@redhat.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Philipp Stanner <pstanner@redhat.com>
Cc: Frank Binns <frank.binns@imgtec.com>
Cc: Matt Coster <matt.coster@imgtec.com>
Reviewed-by: Matt Coster <matt.coster@imgtec.com>
---
 drivers/gpu/drm/imagination/pvr_job.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/imagination/pvr_job.c b/drivers/gpu/drm/imagination/pvr_job.c
index 618503a212a7..1cdb3cfd058d 100644
--- a/drivers/gpu/drm/imagination/pvr_job.c
+++ b/drivers/gpu/drm/imagination/pvr_job.c
@@ -597,8 +597,6 @@ update_job_resvs_for_each(struct pvr_job_data *job_data, u32 job_count)
 static bool can_combine_jobs(struct pvr_job *a, struct pvr_job *b)
 {
 	struct pvr_job *geom_job = a, *frag_job = b;
-	struct dma_fence *fence;
-	unsigned long index;
 
 	/* Geometry and fragment jobs can be combined if they are queued to the
 	 * same context and targeting the same HWRT.
@@ -609,13 +607,9 @@ static bool can_combine_jobs(struct pvr_job *a, struct pvr_job *b)
 	    a->hwrt != b->hwrt)
 		return false;
 
-	xa_for_each(&frag_job->base.dependencies, index, fence) {
-		/* We combine when we see an explicit geom -> frag dep. */
-		if (&geom_job->base.s_fence->scheduled == fence)
-			return true;
-	}
-
-	return false;
+	/* We combine when we see an explicit geom -> frag dep. */
+	return drm_sched_job_has_dependency(&frag_job->base,
+					    &geom_job->base.s_fence->scheduled);
 }
 
 static struct dma_fence *
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] drm/sched: Add helper to check job dependencies
  2025-01-13 10:33 [PATCH 1/2] drm/sched: Add helper to check job dependencies Tvrtko Ursulin
  2025-01-13 10:33 ` [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper Tvrtko Ursulin
@ 2025-01-13 13:12 ` Danilo Krummrich
  2025-01-14 10:54   ` Tvrtko Ursulin
  1 sibling, 1 reply; 7+ messages in thread
From: Danilo Krummrich @ 2025-01-13 13:12 UTC (permalink / raw)
  To: Tvrtko Ursulin
  Cc: kernel-dev, Christian König, Matthew Brost, Philipp Stanner,
	Matt Coster, dri-devel

On 13.01.2025 11:33, Tvrtko Ursulin wrote:
> Lets isolate scheduler internals from drivers such as pvr which currently
> walks the dependency array to look for fences.
> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Danilo Krummrich <dakr@redhat.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Philipp Stanner <pstanner@redhat.com>
> Reviewed-by: Matt Coster <matt.coster@imgtec.com>

Acked-by: Danilo Krummrich <dakr@kernel.org>

> ---
>  drivers/gpu/drm/scheduler/sched_main.c | 23 +++++++++++++++++++++++
>  include/drm/gpu_scheduler.h            |  3 ++-
>  2 files changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
> index 57da84908752..e6f1f2a8e033 100644
> --- a/drivers/gpu/drm/scheduler/sched_main.c
> +++ b/drivers/gpu/drm/scheduler/sched_main.c
> @@ -997,6 +997,29 @@ int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
>  }
>  EXPORT_SYMBOL(drm_sched_job_add_implicit_dependencies);
>  
> +/**
> + * drm_sched_job_has_dependency - check whether fence is the job's dependency
> + * @job: scheduler job to check
> + * @fence: fence to look for
> + *
> + * Returns:
> + * True if @fence is found within the job's dependencies, or otherwise false.
> + */
> +bool drm_sched_job_has_dependency(struct drm_sched_job *job,
> +				  struct dma_fence *fence)
> +{
> +	struct dma_fence *f;
> +	unsigned long index;
> +
> +	xa_for_each(&job->dependencies, index, f) {
> +		if (f == fence)
> +			return true;
> +	}
> +
> +	return false;
> +}
> +EXPORT_SYMBOL(drm_sched_job_has_dependency);
> +
>  /**
>   * drm_sched_job_cleanup - clean up scheduler job resources
>   * @job: scheduler job to clean up
> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
> index 95e17504e46a..d118a0a57ab1 100644
> --- a/include/drm/gpu_scheduler.h
> +++ b/include/drm/gpu_scheduler.h
> @@ -577,7 +577,8 @@ int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
>  int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
>  					    struct drm_gem_object *obj,
>  					    bool write);
> -
> +bool drm_sched_job_has_dependency(struct drm_sched_job *job,
> +				  struct dma_fence *fence);
>  
>  void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
>  				    struct drm_gpu_scheduler **sched_list,


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] drm/sched: Add helper to check job dependencies
  2025-01-13 13:12 ` [PATCH 1/2] drm/sched: Add helper to check job dependencies Danilo Krummrich
@ 2025-01-14 10:54   ` Tvrtko Ursulin
  0 siblings, 0 replies; 7+ messages in thread
From: Tvrtko Ursulin @ 2025-01-14 10:54 UTC (permalink / raw)
  To: Danilo Krummrich
  Cc: kernel-dev, Christian König, Matthew Brost, Philipp Stanner,
	Matt Coster, dri-devel


Hi,

On 13/01/2025 13:12, Danilo Krummrich wrote:
> On 13.01.2025 11:33, Tvrtko Ursulin wrote:
>> Lets isolate scheduler internals from drivers such as pvr which currently
>> walks the dependency array to look for fences.
>>
>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
>> Cc: Christian König <christian.koenig@amd.com>
>> Cc: Danilo Krummrich <dakr@redhat.com>
>> Cc: Matthew Brost <matthew.brost@intel.com>
>> Cc: Philipp Stanner <pstanner@redhat.com>
>> Reviewed-by: Matt Coster <matt.coster@imgtec.com>
> 
> Acked-by: Danilo Krummrich <dakr@kernel.org>

Thanks! Would you also be happy to merge the two?

Regards,

Tvrtko

>> ---
>>   drivers/gpu/drm/scheduler/sched_main.c | 23 +++++++++++++++++++++++
>>   include/drm/gpu_scheduler.h            |  3 ++-
>>   2 files changed, 25 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
>> index 57da84908752..e6f1f2a8e033 100644
>> --- a/drivers/gpu/drm/scheduler/sched_main.c
>> +++ b/drivers/gpu/drm/scheduler/sched_main.c
>> @@ -997,6 +997,29 @@ int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
>>   }
>>   EXPORT_SYMBOL(drm_sched_job_add_implicit_dependencies);
>>   
>> +/**
>> + * drm_sched_job_has_dependency - check whether fence is the job's dependency
>> + * @job: scheduler job to check
>> + * @fence: fence to look for
>> + *
>> + * Returns:
>> + * True if @fence is found within the job's dependencies, or otherwise false.
>> + */
>> +bool drm_sched_job_has_dependency(struct drm_sched_job *job,
>> +				  struct dma_fence *fence)
>> +{
>> +	struct dma_fence *f;
>> +	unsigned long index;
>> +
>> +	xa_for_each(&job->dependencies, index, f) {
>> +		if (f == fence)
>> +			return true;
>> +	}
>> +
>> +	return false;
>> +}
>> +EXPORT_SYMBOL(drm_sched_job_has_dependency);
>> +
>>   /**
>>    * drm_sched_job_cleanup - clean up scheduler job resources
>>    * @job: scheduler job to clean up
>> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
>> index 95e17504e46a..d118a0a57ab1 100644
>> --- a/include/drm/gpu_scheduler.h
>> +++ b/include/drm/gpu_scheduler.h
>> @@ -577,7 +577,8 @@ int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
>>   int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job,
>>   					    struct drm_gem_object *obj,
>>   					    bool write);
>> -
>> +bool drm_sched_job_has_dependency(struct drm_sched_job *job,
>> +				  struct dma_fence *fence);
>>   
>>   void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
>>   				    struct drm_gpu_scheduler **sched_list,
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper
  2025-01-13 10:33 ` [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper Tvrtko Ursulin
@ 2025-01-16 10:02   ` Philipp Stanner
  2025-01-16 12:58     ` Matt Coster
  0 siblings, 1 reply; 7+ messages in thread
From: Philipp Stanner @ 2025-01-16 10:02 UTC (permalink / raw)
  To: Tvrtko Ursulin, dri-devel
  Cc: kernel-dev, Christian König, Danilo Krummrich, Matthew Brost,
	Frank Binns, Matt Coster

On Mon, 2025-01-13 at 10:33 +0000, Tvrtko Ursulin wrote:
> Instead of manually peeking into the DRM scheduler implementation
> details
> lets use the previously added helper.
> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Danilo Krummrich <dakr@redhat.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Philipp Stanner <pstanner@redhat.com>
> Cc: Frank Binns <frank.binns@imgtec.com>
> Cc: Matt Coster <matt.coster@imgtec.com>
> Reviewed-by: Matt Coster <matt.coster@imgtec.com>

Matt, just to be sure, you're OK with me pulling those two into drm-
misc-next, aren't you?

P.

> ---
>  drivers/gpu/drm/imagination/pvr_job.c | 12 +++---------
>  1 file changed, 3 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/imagination/pvr_job.c
> b/drivers/gpu/drm/imagination/pvr_job.c
> index 618503a212a7..1cdb3cfd058d 100644
> --- a/drivers/gpu/drm/imagination/pvr_job.c
> +++ b/drivers/gpu/drm/imagination/pvr_job.c
> @@ -597,8 +597,6 @@ update_job_resvs_for_each(struct pvr_job_data
> *job_data, u32 job_count)
>  static bool can_combine_jobs(struct pvr_job *a, struct pvr_job *b)
>  {
>  	struct pvr_job *geom_job = a, *frag_job = b;
> -	struct dma_fence *fence;
> -	unsigned long index;
>  
>  	/* Geometry and fragment jobs can be combined if they are
> queued to the
>  	 * same context and targeting the same HWRT.
> @@ -609,13 +607,9 @@ static bool can_combine_jobs(struct pvr_job *a,
> struct pvr_job *b)
>  	    a->hwrt != b->hwrt)
>  		return false;
>  
> -	xa_for_each(&frag_job->base.dependencies, index, fence) {
> -		/* We combine when we see an explicit geom -> frag
> dep. */
> -		if (&geom_job->base.s_fence->scheduled == fence)
> -			return true;
> -	}
> -
> -	return false;
> +	/* We combine when we see an explicit geom -> frag dep. */
> +	return drm_sched_job_has_dependency(&frag_job->base,
> +					    &geom_job->base.s_fence-
> >scheduled);
>  }
>  
>  static struct dma_fence *


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper
  2025-01-16 10:02   ` Philipp Stanner
@ 2025-01-16 12:58     ` Matt Coster
  2025-01-20  8:24       ` Philipp Stanner
  0 siblings, 1 reply; 7+ messages in thread
From: Matt Coster @ 2025-01-16 12:58 UTC (permalink / raw)
  To: Philipp Stanner, Tvrtko Ursulin, dri-devel@lists.freedesktop.org
  Cc: kernel-dev@igalia.com, Christian König, Danilo Krummrich,
	Matthew Brost, Frank Binns


[-- Attachment #1.1: Type: text/plain, Size: 2252 bytes --]

On 16/01/2025 10:02, Philipp Stanner wrote:
> On Mon, 2025-01-13 at 10:33 +0000, Tvrtko Ursulin wrote:
>> Instead of manually peeking into the DRM scheduler implementation
>> details
>> lets use the previously added helper.
>>
>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
>> Cc: Christian König <christian.koenig@amd.com>
>> Cc: Danilo Krummrich <dakr@redhat.com>
>> Cc: Matthew Brost <matthew.brost@intel.com>
>> Cc: Philipp Stanner <pstanner@redhat.com>
>> Cc: Frank Binns <frank.binns@imgtec.com>
>> Cc: Matt Coster <matt.coster@imgtec.com>
>> Reviewed-by: Matt Coster <matt.coster@imgtec.com>
> 
> Matt, just to be sure, you're OK with me pulling those two into drm-
> misc-next, aren't you?

Yup, all good! Thanks for checking :)

-- 
Matt Coster
E: matt.coster@imgtec.com

> 
> P.
> 
>> ---
>>  drivers/gpu/drm/imagination/pvr_job.c | 12 +++---------
>>  1 file changed, 3 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/imagination/pvr_job.c
>> b/drivers/gpu/drm/imagination/pvr_job.c
>> index 618503a212a7..1cdb3cfd058d 100644
>> --- a/drivers/gpu/drm/imagination/pvr_job.c
>> +++ b/drivers/gpu/drm/imagination/pvr_job.c
>> @@ -597,8 +597,6 @@ update_job_resvs_for_each(struct pvr_job_data
>> *job_data, u32 job_count)
>>  static bool can_combine_jobs(struct pvr_job *a, struct pvr_job *b)
>>  {
>>  	struct pvr_job *geom_job = a, *frag_job = b;
>> -	struct dma_fence *fence;
>> -	unsigned long index;
>>  
>>  	/* Geometry and fragment jobs can be combined if they are
>> queued to the
>>  	 * same context and targeting the same HWRT.
>> @@ -609,13 +607,9 @@ static bool can_combine_jobs(struct pvr_job *a,
>> struct pvr_job *b)
>>  	    a->hwrt != b->hwrt)
>>  		return false;
>>  
>> -	xa_for_each(&frag_job->base.dependencies, index, fence) {
>> -		/* We combine when we see an explicit geom -> frag
>> dep. */
>> -		if (&geom_job->base.s_fence->scheduled == fence)
>> -			return true;
>> -	}
>> -
>> -	return false;
>> +	/* We combine when we see an explicit geom -> frag dep. */
>> +	return drm_sched_job_has_dependency(&frag_job->base,
>> +					    &geom_job->base.s_fence-
>>> scheduled);
>>  }
>>  
>>  static struct dma_fence *
> 

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 236 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper
  2025-01-16 12:58     ` Matt Coster
@ 2025-01-20  8:24       ` Philipp Stanner
  0 siblings, 0 replies; 7+ messages in thread
From: Philipp Stanner @ 2025-01-20  8:24 UTC (permalink / raw)
  To: Matt Coster, Tvrtko Ursulin, dri-devel@lists.freedesktop.org
  Cc: kernel-dev@igalia.com, Christian König, Danilo Krummrich,
	Matthew Brost, Frank Binns

On Thu, 2025-01-16 at 12:58 +0000, Matt Coster wrote:
> On 16/01/2025 10:02, Philipp Stanner wrote:
> > On Mon, 2025-01-13 at 10:33 +0000, Tvrtko Ursulin wrote:
> > > Instead of manually peeking into the DRM scheduler implementation
> > > details
> > > lets use the previously added helper.
> > > 
> > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
> > > Cc: Christian König <christian.koenig@amd.com>
> > > Cc: Danilo Krummrich <dakr@redhat.com>
> > > Cc: Matthew Brost <matthew.brost@intel.com>
> > > Cc: Philipp Stanner <pstanner@redhat.com>
> > > Cc: Frank Binns <frank.binns@imgtec.com>
> > > Cc: Matt Coster <matt.coster@imgtec.com>
> > > Reviewed-by: Matt Coster <matt.coster@imgtec.com>

Applied to drm-misc-next

Thx
P.

> > 
> > Matt, just to be sure, you're OK with me pulling those two into
> > drm-
> > misc-next, aren't you?
> 
> Yup, all good! Thanks for checking :)
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-01-20  8:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-13 10:33 [PATCH 1/2] drm/sched: Add helper to check job dependencies Tvrtko Ursulin
2025-01-13 10:33 ` [PATCH 2/2] drm/imagination: Use the drm_sched_job_has_dependency helper Tvrtko Ursulin
2025-01-16 10:02   ` Philipp Stanner
2025-01-16 12:58     ` Matt Coster
2025-01-20  8:24       ` Philipp Stanner
2025-01-13 13:12 ` [PATCH 1/2] drm/sched: Add helper to check job dependencies Danilo Krummrich
2025-01-14 10:54   ` Tvrtko Ursulin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.