[PATCH 0/5] drm: Allow vblank interrupts during modeset and make the code less racy

ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Fri Feb 21 11:03:30 PST 2014


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



More information about the dri-devel mailing list