Skip to content

Commit b37aced

Browse files
Nirmoy Dasalexdeucher
authored andcommitted
drm/scheduler: implement a function to modify sched list
Implement drm_sched_entity_modify_sched() which modifies existing sched_list with a different one. This is going to be helpful when userspace changes priority of a ctx/entity then the driver can switch to the corresponding HW scheduler list for that priority. Signed-off-by: Nirmoy Das <[email protected]> Reviewed-by: Christian König <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 33abcb1 commit b37aced

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

drivers/gpu/drm/scheduler/sched_entity.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,24 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
8383
}
8484
EXPORT_SYMBOL(drm_sched_entity_init);
8585

86+
/**
87+
* drm_sched_entity_modify_sched - Modify sched of an entity
88+
* @entity: scheduler entity to init
89+
* @sched_list: the list of new drm scheds which will replace
90+
* existing entity->sched_list
91+
* @num_sched_list: number of drm sched in sched_list
92+
*/
93+
void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
94+
struct drm_gpu_scheduler **sched_list,
95+
unsigned int num_sched_list)
96+
{
97+
WARN_ON(!num_sched_list || !sched_list);
98+
99+
entity->sched_list = sched_list;
100+
entity->num_sched_list = num_sched_list;
101+
}
102+
EXPORT_SYMBOL(drm_sched_entity_modify_sched);
103+
86104
/**
87105
* drm_sched_entity_is_idle - Check if entity is idle
88106
*

include/drm/gpu_scheduler.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,10 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched);
297297
int drm_sched_job_init(struct drm_sched_job *job,
298298
struct drm_sched_entity *entity,
299299
void *owner);
300+
void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
301+
struct drm_gpu_scheduler **sched_list,
302+
unsigned int num_sched_list);
303+
300304
void drm_sched_job_cleanup(struct drm_sched_job *job);
301305
void drm_sched_wakeup(struct drm_gpu_scheduler *sched);
302306
void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad);

0 commit comments

Comments
 (0)