diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_scheduler.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_scheduler.c | 52 | 
1 files changed, 6 insertions, 46 deletions
| diff --git a/drivers/gpu/drm/i915/i915_scheduler.c b/drivers/gpu/drm/i915/i915_scheduler.c index 7144239f08df..efa638c3acc7 100644 --- a/drivers/gpu/drm/i915/i915_scheduler.c +++ b/drivers/gpu/drm/i915/i915_scheduler.c @@ -43,7 +43,7 @@ static inline struct i915_priolist *to_priolist(struct rb_node *rb)  static void assert_priolists(struct intel_engine_execlists * const execlists)  {  	struct rb_node *rb; -	long last_prio, i; +	long last_prio;  	if (!IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))  		return; @@ -57,14 +57,6 @@ static void assert_priolists(struct intel_engine_execlists * const execlists)  		GEM_BUG_ON(p->priority > last_prio);  		last_prio = p->priority; - -		GEM_BUG_ON(!p->used); -		for (i = 0; i < ARRAY_SIZE(p->requests); i++) { -			if (list_empty(&p->requests[i])) -				continue; - -			GEM_BUG_ON(!(p->used & BIT(i))); -		}  	}  } @@ -75,14 +67,10 @@ i915_sched_lookup_priolist(struct intel_engine_cs *engine, int prio)  	struct i915_priolist *p;  	struct rb_node **parent, *rb;  	bool first = true; -	int idx, i;  	lockdep_assert_held(&engine->active.lock);  	assert_priolists(execlists); -	/* buckets sorted from highest [in slot 0] to lowest priority */ -	idx = I915_PRIORITY_COUNT - (prio & I915_PRIORITY_MASK) - 1; -	prio >>= I915_USER_PRIORITY_SHIFT;  	if (unlikely(execlists->no_priolist))  		prio = I915_PRIORITY_NORMAL; @@ -99,7 +87,7 @@ find_priolist:  			parent = &rb->rb_right;  			first = false;  		} else { -			goto out; +			return &p->requests;  		}  	} @@ -125,15 +113,12 @@ find_priolist:  	}  	p->priority = prio; -	for (i = 0; i < ARRAY_SIZE(p->requests); i++) -		INIT_LIST_HEAD(&p->requests[i]); +	INIT_LIST_HEAD(&p->requests); +  	rb_link_node(&p->node, rb, parent);  	rb_insert_color_cached(&p->node, &execlists->queue, first); -	p->used = 0; -out: -	p->used |= BIT(idx); -	return &p->requests[idx]; +	return &p->requests;  }  void __i915_priolist_free(struct i915_priolist *p) @@ -363,30 +348,6 @@ void i915_schedule(struct i915_request *rq, const struct i915_sched_attr *attr)  	spin_unlock_irq(&schedule_lock);  } -static void __bump_priority(struct i915_sched_node *node, unsigned int bump) -{ -	struct i915_sched_attr attr = node->attr; - -	if (attr.priority & bump) -		return; - -	attr.priority |= bump; -	__i915_schedule(node, &attr); -} - -void i915_schedule_bump_priority(struct i915_request *rq, unsigned int bump) -{ -	unsigned long flags; - -	GEM_BUG_ON(bump & ~I915_PRIORITY_MASK); -	if (READ_ONCE(rq->sched.attr.priority) & bump) -		return; - -	spin_lock_irqsave(&schedule_lock, flags); -	__bump_priority(&rq->sched, bump); -	spin_unlock_irqrestore(&schedule_lock, flags); -} -  void i915_sched_node_init(struct i915_sched_node *node)  {  	INIT_LIST_HEAD(&node->signalers_list); @@ -553,8 +514,7 @@ int __init i915_global_scheduler_init(void)  	if (!global.slab_dependencies)  		return -ENOMEM; -	global.slab_priorities = KMEM_CACHE(i915_priolist, -					    SLAB_HWCACHE_ALIGN); +	global.slab_priorities = KMEM_CACHE(i915_priolist, 0);  	if (!global.slab_priorities)  		goto err_priorities; | 
