[PATCH 0/5] drm: Allow vblank interrupts during modeset and make the code less racy (original) (raw)
ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Fri Feb 21 11:03:30 PST 2014
- Previous message: [PATCH] drm/radeon: use variable UVD clocks
- Next message: [PATCH 1/5] drm: Use correct spinlock flavor in drm_vblank_get()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
From: Ville Syrjälä <ville.syrjala at linux.intel.com>
I'm going to require vblank interrupts during modeset in i915 soon, however the drm vblank code won't currently allow it. It simply refuses to re-enable the vblank interrupts whenever they were disable and the refcount is already elevated. That means anyone holding a vblank reference across a modeset/dpms cycle can prevent the driver from operating correctly.
The same problem can also cause wait for vblank ioctls issued soon after a modeset to fail. I've cooked up a few i-g-t/kms_flip subtests to excercise this.
I don't want to be responsible for potentially breaking every other drm driver, so I've made the new behaviour opt in. If the driver uses the new way of doing things, vblank interrupts (and ioctls) are allowed everywhere except between drm_vblank_off() and drm_vblanl_on(). Any wait for vblank ioctl currently pending will get completed when drm_vblank_off() is called, including blocking waits which previously could have just sat there until the timeout expired.
I also fixed the vblank disable timer to act predictably when multiple crtcs are involved , and I hoovered up an old patch from Peter Hurley to skip the double irqsave in drm_vblank_get().
Peter Hurley (1): drm: Use correct spinlock flavor in drm_vblank_get()
Ville Syrjälä (4): drm: Make the vblank disable timer per-crtc drm: Allow the driver to reject vblank requests only when it really has the vblank interrupts disabled drm: Allow reenabling of vblank interrupts even if refcount>0 drm/i915: Allow vblank interrupts during modeset and eliminate some vblank races
drivers/gpu/drm/armada/armada_crtc.c | 2 +- drivers/gpu/drm/drm_irq.c | 78 ++++++++++++++++++++++---------- drivers/gpu/drm/exynos/exynos_drm_crtc.c | 2 +- drivers/gpu/drm/gma500/gma_display.c | 2 +- drivers/gpu/drm/i915/i915_dma.c | 6 +++ drivers/gpu/drm/i915/intel_display.c | 23 ++++++---- drivers/gpu/drm/tegra/dc.c | 2 +- include/drm/drmP.h | 14 +++++- 8 files changed, 91 insertions(+), 38 deletions(-)
-- 1.8.3.2
- Previous message: [PATCH] drm/radeon: use variable UVD clocks
- Next message: [PATCH 1/5] drm: Use correct spinlock flavor in drm_vblank_get()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]