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>
This commit is contained in:
Maarten Lankhorst 2025-08-29 15:17:02 +02:00
parent ed1fbee3de
commit 76e46dbf80

View File

@ -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);
}