On Fri, Mar 17, 2017 at 11:17:54PM +0200, ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > The plane updates are still taking far too long, at least with > heavy kernel debug knobs turned on. Using kms_atomic_transitions > I'm currently seeing numbers as high as 170 usec on my VLV. > > To combat lockdep the most beneficial thing is taking the > uncore.lock around the entire pipe update. Combined with all > the other optimizations here I was able to push the max > duration below 60 usec with my debug kernel. > > The pre-compute stuff isn't supremely important with lockdep/etc. > turned on, but once those are turned off the few usec saved by > the other optimizations start to matter. With all the optimization > and a less debug heavy kernel I was able to get the max duration > to around 15 usec. It was around 25 usec with the current code. > > Mika was saying that he's still seeing huge numbers (as high > as 400 usec) with the current drm-tip, and that wasn't even with > a particularly debug heavy kernel. One theory is that there's > contention on the uncore.lock. So I'm thinking we may want to > split the lock into two; one for gt, the other for display. Not > starving the GPU by hogging the shared lock for display stuff > might also be a good thing. I've not tried playing with more > GPU heavy scenarios yet > > Anyways, running out of time to play with this more today so > I figured I'd post what I have now. > > Series available here: > git://github.com/vsyrjala/linux.git plane_update_optimization > > Ville Syrjälä (14): > drm/i915: Extract skl_plane_ctl() > drm/i915: Use skl_plane_ctl() for the SKL "sprite" planes > drm/i915: Extract vlv_sprite_ctl() > drm/i915: Extract ivb_sprite_ctl() > drm/i915: Extract ilk_sprite_ctl() > drm/i915: Extract i845_cursor_ctl() and i9xx_cursor_ctl() I've pushed these to dinq. Thanks for the review. > drm/i915: Extract i9xx_plane_ctl() > drm/i915: Pre-compute plane control register value > drm/i915: Introduce i9xx_check_plane_surface() > drm/i915: Eliminate ironlake_update_primary_plane() > drm/i915: Use i9xx_check_plane_surface() for sprite planes as well I'll repost these as new series. > drm/i915: Keep vblanks enabled during the entire pipe update > WIP/drm/i915: Protect the entire pipe update with uncore.lock > WIP/drm/i915: Nuke posting reads from plane updates And these I'll probably leave out from the next series, and repost separately later. > > drivers/gpu/drm/i915/i915_irq.c | 66 ++++-- > drivers/gpu/drm/i915/i915_trace.h | 28 +-- > drivers/gpu/drm/i915/intel_display.c | 436 +++++++++++++++++------------------ > drivers/gpu/drm/i915/intel_drv.h | 16 +- > drivers/gpu/drm/i915/intel_pm.c | 11 +- > drivers/gpu/drm/i915/intel_sprite.c | 355 ++++++++++++---------------- > 6 files changed, 440 insertions(+), 472 deletions(-) > > -- > 2.10.2 -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx