55 lines
2.2 KiB
Diff
55 lines
2.2 KiB
Diff
From e8f64f55f1dab003349825781f5baa1537fcf7bc Mon Sep 17 00:00:00 2001
|
|
Message-Id: <e8f64f55f1dab003349825781f5baa1537fcf7bc.1599166691.git.zanussi@kernel.org>
|
|
In-Reply-To: <56457dc415803c8abc5acb513ada877a79596f05.1599166690.git.zanussi@kernel.org>
|
|
References: <56457dc415803c8abc5acb513ada877a79596f05.1599166690.git.zanussi@kernel.org>
|
|
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Date: Wed, 10 Apr 2019 11:01:37 +0200
|
|
Subject: [PATCH 264/333] drm/i915: Don't disable interrupts independently of
|
|
the lock
|
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.142-rt63.tar.xz
|
|
|
|
The locks (timeline->lock and rq->lock) need to be taken with disabled
|
|
interrupts. This is done in __retire_engine_request() by disabling the
|
|
interrupts independently of the locks itself.
|
|
While local_irq_disable()+spin_lock() equals spin_lock_irq() on vanilla
|
|
it does not on RT. Also, it is not obvious if there is a special reason
|
|
to why the interrupts are disabled independently of the lock.
|
|
|
|
Enable/disable interrupts as part of the locking instruction.
|
|
|
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
---
|
|
drivers/gpu/drm/i915/i915_request.c | 8 ++------
|
|
1 file changed, 2 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
|
|
index 5c2c93cbab12..7124510b9131 100644
|
|
--- a/drivers/gpu/drm/i915/i915_request.c
|
|
+++ b/drivers/gpu/drm/i915/i915_request.c
|
|
@@ -356,9 +356,7 @@ static void __retire_engine_request(struct intel_engine_cs *engine,
|
|
|
|
GEM_BUG_ON(!i915_request_completed(rq));
|
|
|
|
- local_irq_disable();
|
|
-
|
|
- spin_lock(&engine->timeline.lock);
|
|
+ spin_lock_irq(&engine->timeline.lock);
|
|
GEM_BUG_ON(!list_is_first(&rq->link, &engine->timeline.requests));
|
|
list_del_init(&rq->link);
|
|
spin_unlock(&engine->timeline.lock);
|
|
@@ -372,9 +370,7 @@ static void __retire_engine_request(struct intel_engine_cs *engine,
|
|
GEM_BUG_ON(!atomic_read(&rq->i915->gt_pm.rps.num_waiters));
|
|
atomic_dec(&rq->i915->gt_pm.rps.num_waiters);
|
|
}
|
|
- spin_unlock(&rq->lock);
|
|
-
|
|
- local_irq_enable();
|
|
+ spin_unlock_irq(&rq->lock);
|
|
|
|
/*
|
|
* The backing object for the context is done after switching to the
|
|
--
|
|
2.17.1
|
|
|