Commit 068c3304 authored by Nayan Deshmukh's avatar Nayan Deshmukh Committed by Alex Deucher

drm/scheduler: remove sched field from the entity

The scheduler of the entity is decided by the run queue on which
it is queued. This patch avoids us the effort required to maintain
a sync between rq and sched field when we start shifting entites
among different rqs.
Signed-off-by: default avatarNayan Deshmukh <nayan26deshmukh@gmail.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarEric Anholt <eric@anholt.net>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent cdc50176
...@@ -1262,7 +1262,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, ...@@ -1262,7 +1262,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
priority = job->base.s_priority; priority = job->base.s_priority;
drm_sched_entity_push_job(&job->base, entity); drm_sched_entity_push_job(&job->base, entity);
ring = to_amdgpu_ring(entity->sched); ring = to_amdgpu_ring(entity->rq->sched);
amdgpu_ring_priority_get(ring, priority); amdgpu_ring_priority_get(ring, priority);
ttm_eu_fence_buffer_objects(&p->ticket, &p->validated, p->fence); ttm_eu_fence_buffer_objects(&p->ticket, &p->validated, p->fence);
......
...@@ -143,7 +143,7 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity, ...@@ -143,7 +143,7 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
priority = job->base.s_priority; priority = job->base.s_priority;
drm_sched_entity_push_job(&job->base, entity); drm_sched_entity_push_job(&job->base, entity);
ring = to_amdgpu_ring(entity->sched); ring = to_amdgpu_ring(entity->rq->sched);
amdgpu_ring_priority_get(ring, priority); amdgpu_ring_priority_get(ring, priority);
return 0; return 0;
...@@ -167,7 +167,7 @@ int amdgpu_job_submit_direct(struct amdgpu_job *job, struct amdgpu_ring *ring, ...@@ -167,7 +167,7 @@ int amdgpu_job_submit_direct(struct amdgpu_job *job, struct amdgpu_ring *ring,
static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job, static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
struct drm_sched_entity *s_entity) struct drm_sched_entity *s_entity)
{ {
struct amdgpu_ring *ring = to_amdgpu_ring(s_entity->sched); struct amdgpu_ring *ring = to_amdgpu_ring(s_entity->rq->sched);
struct amdgpu_job *job = to_amdgpu_job(sched_job); struct amdgpu_job *job = to_amdgpu_job(sched_job);
struct amdgpu_vm *vm = job->vm; struct amdgpu_vm *vm = job->vm;
struct dma_fence *fence; struct dma_fence *fence;
......
...@@ -387,7 +387,7 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev, ...@@ -387,7 +387,7 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev,
ats_entries = 0; ats_entries = 0;
} }
ring = container_of(vm->entity.sched, struct amdgpu_ring, sched); ring = container_of(vm->entity.rq->sched, struct amdgpu_ring, sched);
r = reservation_object_reserve_shared(bo->tbo.resv); r = reservation_object_reserve_shared(bo->tbo.resv);
if (r) if (r)
...@@ -1113,7 +1113,7 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev, ...@@ -1113,7 +1113,7 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
struct amdgpu_ring *ring; struct amdgpu_ring *ring;
struct dma_fence *fence; struct dma_fence *fence;
ring = container_of(vm->entity.sched, struct amdgpu_ring, ring = container_of(vm->entity.rq->sched, struct amdgpu_ring,
sched); sched);
amdgpu_ring_pad_ib(ring, params.ib); amdgpu_ring_pad_ib(ring, params.ib);
...@@ -1403,7 +1403,7 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev, ...@@ -1403,7 +1403,7 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
addr, flags); addr, flags);
} }
ring = container_of(vm->entity.sched, struct amdgpu_ring, sched); ring = container_of(vm->entity.rq->sched, struct amdgpu_ring, sched);
nptes = last - start + 1; nptes = last - start + 1;
......
...@@ -185,7 +185,6 @@ int drm_sched_entity_init(struct drm_sched_entity *entity, ...@@ -185,7 +185,6 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
memset(entity, 0, sizeof(struct drm_sched_entity)); memset(entity, 0, sizeof(struct drm_sched_entity));
INIT_LIST_HEAD(&entity->list); INIT_LIST_HEAD(&entity->list);
entity->rq = rq_list[0]; entity->rq = rq_list[0];
entity->sched = rq_list[0]->sched;
entity->guilty = guilty; entity->guilty = guilty;
entity->last_scheduled = NULL; entity->last_scheduled = NULL;
...@@ -210,8 +209,8 @@ EXPORT_SYMBOL(drm_sched_entity_init); ...@@ -210,8 +209,8 @@ EXPORT_SYMBOL(drm_sched_entity_init);
static bool drm_sched_entity_is_initialized(struct drm_gpu_scheduler *sched, static bool drm_sched_entity_is_initialized(struct drm_gpu_scheduler *sched,
struct drm_sched_entity *entity) struct drm_sched_entity *entity)
{ {
return entity->sched == sched && return entity->rq != NULL &&
entity->rq != NULL; entity->rq->sched == sched;
} }
/** /**
...@@ -278,7 +277,7 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout) ...@@ -278,7 +277,7 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
struct drm_gpu_scheduler *sched; struct drm_gpu_scheduler *sched;
long ret = timeout; long ret = timeout;
sched = entity->sched; sched = entity->rq->sched;
if (!drm_sched_entity_is_initialized(sched, entity)) if (!drm_sched_entity_is_initialized(sched, entity))
return ret; return ret;
/** /**
...@@ -317,7 +316,7 @@ void drm_sched_entity_fini(struct drm_sched_entity *entity) ...@@ -317,7 +316,7 @@ void drm_sched_entity_fini(struct drm_sched_entity *entity)
{ {
struct drm_gpu_scheduler *sched; struct drm_gpu_scheduler *sched;
sched = entity->sched; sched = entity->rq->sched;
drm_sched_entity_set_rq(entity, NULL); drm_sched_entity_set_rq(entity, NULL);
/* Consumption of existing IBs wasn't completed. Forcefully /* Consumption of existing IBs wasn't completed. Forcefully
...@@ -388,7 +387,7 @@ static void drm_sched_entity_wakeup(struct dma_fence *f, struct dma_fence_cb *cb ...@@ -388,7 +387,7 @@ static void drm_sched_entity_wakeup(struct dma_fence *f, struct dma_fence_cb *cb
container_of(cb, struct drm_sched_entity, cb); container_of(cb, struct drm_sched_entity, cb);
entity->dependency = NULL; entity->dependency = NULL;
dma_fence_put(f); dma_fence_put(f);
drm_sched_wakeup(entity->sched); drm_sched_wakeup(entity->rq->sched);
} }
static void drm_sched_entity_clear_dep(struct dma_fence *f, struct dma_fence_cb *cb) static void drm_sched_entity_clear_dep(struct dma_fence *f, struct dma_fence_cb *cb)
...@@ -438,7 +437,7 @@ EXPORT_SYMBOL(drm_sched_entity_set_rq); ...@@ -438,7 +437,7 @@ EXPORT_SYMBOL(drm_sched_entity_set_rq);
bool drm_sched_dependency_optimized(struct dma_fence* fence, bool drm_sched_dependency_optimized(struct dma_fence* fence,
struct drm_sched_entity *entity) struct drm_sched_entity *entity)
{ {
struct drm_gpu_scheduler *sched = entity->sched; struct drm_gpu_scheduler *sched = entity->rq->sched;
struct drm_sched_fence *s_fence; struct drm_sched_fence *s_fence;
if (!fence || dma_fence_is_signaled(fence)) if (!fence || dma_fence_is_signaled(fence))
...@@ -455,7 +454,7 @@ EXPORT_SYMBOL(drm_sched_dependency_optimized); ...@@ -455,7 +454,7 @@ EXPORT_SYMBOL(drm_sched_dependency_optimized);
static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity) static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity)
{ {
struct drm_gpu_scheduler *sched = entity->sched; struct drm_gpu_scheduler *sched = entity->rq->sched;
struct dma_fence * fence = entity->dependency; struct dma_fence * fence = entity->dependency;
struct drm_sched_fence *s_fence; struct drm_sched_fence *s_fence;
...@@ -500,7 +499,7 @@ static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity) ...@@ -500,7 +499,7 @@ static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity)
static struct drm_sched_job * static struct drm_sched_job *
drm_sched_entity_pop_job(struct drm_sched_entity *entity) drm_sched_entity_pop_job(struct drm_sched_entity *entity)
{ {
struct drm_gpu_scheduler *sched = entity->sched; struct drm_gpu_scheduler *sched = entity->rq->sched;
struct drm_sched_job *sched_job = to_drm_sched_job( struct drm_sched_job *sched_job = to_drm_sched_job(
spsc_queue_peek(&entity->job_queue)); spsc_queue_peek(&entity->job_queue));
...@@ -744,7 +743,7 @@ int drm_sched_job_init(struct drm_sched_job *job, ...@@ -744,7 +743,7 @@ int drm_sched_job_init(struct drm_sched_job *job,
struct drm_sched_entity *entity, struct drm_sched_entity *entity,
void *owner) void *owner)
{ {
struct drm_gpu_scheduler *sched = entity->sched; struct drm_gpu_scheduler *sched = entity->rq->sched;
job->sched = sched; job->sched = sched;
job->entity = entity; job->entity = entity;
......
...@@ -161,7 +161,7 @@ struct drm_sched_fence *drm_sched_fence_create(struct drm_sched_entity *entity, ...@@ -161,7 +161,7 @@ struct drm_sched_fence *drm_sched_fence_create(struct drm_sched_entity *entity,
return NULL; return NULL;
fence->owner = owner; fence->owner = owner;
fence->sched = entity->sched; fence->sched = entity->rq->sched;
spin_lock_init(&fence->lock); spin_lock_init(&fence->lock);
seq = atomic_inc_return(&entity->fence_seq); seq = atomic_inc_return(&entity->fence_seq);
......
...@@ -52,7 +52,6 @@ enum drm_sched_priority { ...@@ -52,7 +52,6 @@ enum drm_sched_priority {
* runqueue. * runqueue.
* @rq: runqueue to which this entity belongs. * @rq: runqueue to which this entity belongs.
* @rq_lock: lock to modify the runqueue to which this entity belongs. * @rq_lock: lock to modify the runqueue to which this entity belongs.
* @sched: the scheduler instance to which this entity is enqueued.
* @job_queue: the list of jobs of this entity. * @job_queue: the list of jobs of this entity.
* @fence_seq: a linearly increasing seqno incremented with each * @fence_seq: a linearly increasing seqno incremented with each
* new &drm_sched_fence which is part of the entity. * new &drm_sched_fence which is part of the entity.
...@@ -76,7 +75,6 @@ struct drm_sched_entity { ...@@ -76,7 +75,6 @@ struct drm_sched_entity {
struct list_head list; struct list_head list;
struct drm_sched_rq *rq; struct drm_sched_rq *rq;
spinlock_t rq_lock; spinlock_t rq_lock;
struct drm_gpu_scheduler *sched;
struct spsc_queue job_queue; struct spsc_queue job_queue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment