e-mail snafu, sent it too early by accident, and from a gmail web interface which i'm apparently incapable of using properly... The second fix should look like this: > A simple fix in static void vblank_disable_and_save() would be to > replace the new... > > if (!vblank->enabled) { > > ... check by ... if (!vblank->enabled && drm_get_last_vbltimestamp(dev, crtc, &tvblank, 0)) { ... We need to make sure timestamp queries work and are actually locked to the vblank, otherwise we can't do that last update there in vblank_disable_and_save(). With these two fixes or similar applied i'd be happy, otherwise it will inflict pain and real bugs on real users. thanks, -mario On Wed, Sep 10, 2014 at 4:19 PM, Mario Kleiner <mario.kleiner.de@xxxxxxxxx> wrote: > Hmm, not quite an ack from my side for the pull in its current form. I > said if the two remaining issues i mentioned are addressed, then i'm > happy with it and can have my reviewed/acked-by. Looking at the code > they haven't been adressed. > > However, this is easily fixable on top of the current patches: > > 1. A vblank_disable_timeout module parameter of zero should always > leave vblank irq's enabled and also override the drivers choice, > otherwise a user can't override the driver on a broken driver/gpu > combo, which is the only use case for having that module parameter. > Currenty the disable_immediately flag overrides the users override -> > Ouch. > > So in drm_vblank_put(): > > ... > > /* Last user schedules interrupt disable */ > if (atomic_dec_and_test(&vblank->refcount)) { >>>> Insert zero -> opt-out check <<< > if (drm_vblank_offdelay == 0) > return; >>>> Remaining code continues <<< > if (dev->vblank_disable_immediate || drm_vblank_offdelay < 0) > vblank_disable_fn((unsigned long)vblank); > else if (drm_vblank_offdelay > 0) > mod_timer(&vblank->disable_timer, jiffies + > ((drm_vblank_offdelay * HZ)/1000)); > > ... > > 2. For the "drm: Have the vblank counter account for the time ... " > patch, we must opt-out of that last timestamp/counter update/bump if > the driver doesn't support high-precision vblank timestamping, > otherwise the vblank count and timestamp will be inconsistent with > each other - or outright wrong in case of the timestamp. Rather > deliver a slightly outdated, but correct count+timestamp pair to > userspace, which is still useable for practical purposes, than a pair > that's outright wrong and will definitely confuse clients. > > A simple fix in static void vblank_disable_and_save() would be to > replace the new... > > if (!vblank->enabled) { > > ... check by ... > > if (!vblank->enabled && > ) { > > > On Wed, Sep 10, 2014 at 2:05 PM, Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: >> Hi Dave, >> >> So here's the final bits of Ville's vblank rework with a bit of cleanup >> from Mario on top. >> >> The neat thing this finally allows is to immediately disable the vblank >> interrupt on the last drm_vblank_put if the hardware has perfectly >> accurate vblank counter and timestamp readout support. On i915 that >> required piles of small adjustements from Ville since depending upon the >> platform and port the vblank happens at different scanout lines. >> >> Of course this is fully opt-in and per-device (we need that since gen2 >> doesn't have a hw vblank counter). >> >> Mario reviewed the entire pile too and after some initial hesitation >> (about drivers without accurate timestampt support) acked it. >> >> Cheers, Daniel >> >> >> The following changes since commit 21d70354bba9965a098382fc4d7fb17e138111f3: >> >> drm: move drm_stub.c to drm_drv.c (2014-08-06 19:10:44 +1000) >> >> are available in the git repository at: >> >> git://anongit.freedesktop.org/drm-intel tags/topic/vblank-rework-2014-09-10 >> >> for you to fetch changes up to 2368ffb18b1d2b04eb80478d225676caa7a3c4c8: >> >> drm: Use vblank_disable_and_save in drm_vblank_cleanup() (2014-09-10 09:41:29 +0200) >> >> ---------------------------------------------------------------- >> Mario Kleiner (2): >> drm: Remove drm_vblank_cleanup from drm_vblank_init error path. >> drm: Use vblank_disable_and_save in drm_vblank_cleanup() >> >> Ville Syrjälä (16): >> drm: Always reject drm_vblank_get() after drm_vblank_off() >> drm/i915: Warn if drm_vblank_get() still works after drm_vblank_off() >> drm: Don't clear vblank timestamps when vblank interrupt is disabled >> drm: Move drm_update_vblank_count() >> drm: Have the vblank counter account for the time between vblank irq disable and drm_vblank_off() >> drm: Avoid random vblank counter jumps if the hardware counter has been reset >> drm: Reduce the amount of dev->vblank[crtc] in the code >> drm: Fix deadlock between event_lock and vbl_lock/vblank_time_lock >> drm: Fix race between drm_vblank_off() and drm_queue_vblank_event() >> drm: Disable vblank interrupt immediately when drm_vblank_offdelay<0 >> drm: Add dev->vblank_disable_immediate flag >> drm/i915: Opt out of vblank disable timer on >gen2 >> drm: Kick start vblank interrupts at drm_vblank_on() >> drm/i915: Update scanline_offset only for active crtcs >> drm: Fix confusing debug message in drm_update_vblank_count() >> drm: Store the vblank timestamp when adjusting the counter during disable >> >> Documentation/DocBook/drm.tmpl | 7 + >> drivers/gpu/drm/drm_drv.c | 4 +- >> drivers/gpu/drm/drm_irq.c | 345 ++++++++++++++++++++++------------- >> drivers/gpu/drm/i915/i915_irq.c | 8 + >> drivers/gpu/drm/i915/intel_display.c | 17 +- >> include/drm/drmP.h | 12 +- >> 6 files changed, 256 insertions(+), 137 deletions(-) >> >> -- >> Daniel Vetter >> Software Engineer, Intel Corporation >> +41 (0) 79 365 57 48 - http://blog.ffwll.ch >> _______________________________________________ >> Intel-gfx mailing list >> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx