diff options
| author | Maarten Lankhorst <dev@lankhorst.se> | 2025-08-29 15:17:02 +0200 |
|---|---|---|
| committer | Maarten Lankhorst <dev@lankhorst.se> | 2025-10-09 16:10:37 +0200 |
| commit | 76e46dbf80918ef0dc8e489f88959bab48b6b9ce (patch) | |
| tree | ea074396ec3ed3c58b958d490c886bfcc7ebabed /drivers/gpu/drm/i915/display/intel_crtc.c | |
| parent | ed1fbee3debbfcf6fd69a69509545ace00118f82 (diff) | |
drm/i915/display: Make intel_crtc_get_vblank_counter safe on PREEMPT_RT
drm_crtc_accurate_vblank_count takes a spinlock, which we should avoid
in tracepoints and debug functions.
This also prevents taking the spinlock 2x during the critical
section of pipe updates for DSI updates.
Acked-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://lore.kernel.org/r/20250829131701.15607-2-dev@lankhorst.se
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_crtc.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_crtc.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c index a187db6df2d3..c0329e132462 100644 --- a/drivers/gpu/drm/i915/display/intel_crtc.c +++ b/drivers/gpu/drm/i915/display/intel_crtc.c @@ -84,8 +84,13 @@ u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc) if (!crtc->active) return 0; - if (!vblank->max_vblank_count) - return (u32)drm_crtc_accurate_vblank_count(&crtc->base); + if (!vblank->max_vblank_count) { + /* On preempt-rt we cannot take the vblank spinlock since this function is called from tracepoints */ + if (IS_ENABLED(CONFIG_PREEMPT_RT)) + return (u32)drm_crtc_vblank_count(&crtc->base); + else + return (u32)drm_crtc_accurate_vblank_count(&crtc->base); + } return crtc->base.funcs->get_vblank_counter(&crtc->base); } |