mirror of
https://github.com/OpenVoiceOS/OpenVoiceOS
synced 2024-12-13 09:27:30 +01:00
62 lines
2.1 KiB
Diff
62 lines
2.1 KiB
Diff
From b309895649470ce9b30b47fb3e9e33e31adcc4b6 Mon Sep 17 00:00:00 2001
|
|
From: Mike Galbraith <umgwanakikbuti@gmail.com>
|
|
Date: Sat, 27 Feb 2016 08:09:11 +0100
|
|
Subject: [PATCH 23/62] drm/i915: Use preempt_disable/enable_rt() where
|
|
recommended
|
|
|
|
Mario Kleiner suggest in commit
|
|
ad3543ede630f ("drm/intel: Push get_scanout_position() timestamping into kms driver.")
|
|
|
|
a spots where preemption should be disabled on PREEMPT_RT. The
|
|
difference is that on PREEMPT_RT the intel_uncore::lock disables neither
|
|
preemption nor interrupts and so region remains preemptible.
|
|
|
|
The area covers only register reads and writes. The part that worries me
|
|
is:
|
|
- __intel_get_crtc_scanline() the worst case is 100us if no match is
|
|
found.
|
|
|
|
- intel_crtc_scanlines_since_frame_timestamp() not sure how long this
|
|
may take in the worst case.
|
|
|
|
It was in the RT queue for a while and nobody complained.
|
|
Disable preemption on PREEPMPT_RT during timestamping.
|
|
|
|
[bigeasy: patch description.]
|
|
|
|
Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
|
|
Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
---
|
|
drivers/gpu/drm/i915/i915_irq.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
|
|
index f93ffa6626a5..6e9d033cf808 100644
|
|
--- a/drivers/gpu/drm/i915/i915_irq.c
|
|
+++ b/drivers/gpu/drm/i915/i915_irq.c
|
|
@@ -917,7 +917,8 @@ static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc,
|
|
*/
|
|
spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
|
|
|
|
- /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */
|
|
+ if (IS_ENABLED(CONFIG_PREEMPT_RT))
|
|
+ preempt_disable();
|
|
|
|
/* Get optional system timestamp before query. */
|
|
if (stime)
|
|
@@ -981,7 +982,8 @@ static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc,
|
|
if (etime)
|
|
*etime = ktime_get();
|
|
|
|
- /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */
|
|
+ if (IS_ENABLED(CONFIG_PREEMPT_RT))
|
|
+ preempt_enable();
|
|
|
|
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
|
|
|
|
--
|
|
2.43.0
|
|
|