Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f7886d0 authored by Tvrtko Ursulin's avatar Tvrtko Ursulin
Browse files

drm/i915: Spinlocks in tasklets can use spin_(un)lock_irq



The tasklets callbacks are only called from tasklet context so
it is safe do to this.

Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/20170321105511.18269-1-tvrtko.ursulin@linux.intel.com
parent fe085f13
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -573,7 +573,6 @@ static bool i915_guc_dequeue(struct intel_engine_cs *engine)
{
	struct execlist_port *port = engine->execlist_port;
	struct drm_i915_gem_request *last = port[0].request;
	unsigned long flags;
	struct rb_node *rb;
	bool submit = false;

@@ -589,7 +588,7 @@ static bool i915_guc_dequeue(struct intel_engine_cs *engine)
	if (!READ_ONCE(engine->execlist_first))
		return false;

	spin_lock_irqsave(&engine->timeline->lock, flags);
	spin_lock_irq(&engine->timeline->lock);
	rb = engine->execlist_first;
	while (rb) {
		struct drm_i915_gem_request *rq =
@@ -619,7 +618,7 @@ static bool i915_guc_dequeue(struct intel_engine_cs *engine)
		nested_enable_signaling(last);
		engine->execlist_first = rb;
	}
	spin_unlock_irqrestore(&engine->timeline->lock, flags);
	spin_unlock_irq(&engine->timeline->lock);

	return submit;
}
+2 −3
Original line number Diff line number Diff line
@@ -399,7 +399,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
{
	struct drm_i915_gem_request *last;
	struct execlist_port *port = engine->execlist_port;
	unsigned long flags;
	struct rb_node *rb;
	bool submit = false;

@@ -448,7 +447,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
	 * and context switches) submission.
	 */

	spin_lock_irqsave(&engine->timeline->lock, flags);
	spin_lock_irq(&engine->timeline->lock);
	rb = engine->execlist_first;
	while (rb) {
		struct drm_i915_gem_request *cursor =
@@ -500,7 +499,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
		i915_gem_request_assign(&port->request, last);
		engine->execlist_first = rb;
	}
	spin_unlock_irqrestore(&engine->timeline->lock, flags);
	spin_unlock_irq(&engine->timeline->lock);

	if (submit)
		execlists_submit_ports(engine);