* [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 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
* 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
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.