[Intel-gfx] Possible 4.5 i915 Skylake regression

Andy Lutomirski luto at amacapital.net
Tue Feb 23 03:13:13 UTC 2016


On Wed, Feb 17, 2016 at 5:36 PM, Andy Lutomirski <luto at amacapital.net> wrote:
> On Wed, Feb 17, 2016 at 8:18 AM, Daniel Vetter <daniel at ffwll.ch> wrote:
>> On Tue, Feb 16, 2016 at 09:26:35AM -0800, Andy Lutomirski wrote:
>>> On Tue, Feb 16, 2016 at 9:12 AM, Andy Lutomirski <luto at amacapital.net> wrote:
>>> > On Tue, Feb 16, 2016 at 8:12 AM, Daniel Vetter <daniel at ffwll.ch> wrote:
>>> >> On Mon, Feb 15, 2016 at 06:58:33AM -0800, Andy Lutomirski wrote:
>>> >>> On Sun, Feb 14, 2016 at 6:59 PM, Andy Lutomirski <luto at kernel.org> wrote:
>>> >>> > Hi-
>>> >>> >
>>> >>> > On 4.5-rc3 on a Dell XPS 13 9350 (Skylake i915, no nvidia on this
>>> >>> > model), shortly after resume, I saw a single black flash on the
>>> >>> > screen.  The log said:
>>> >>> >
>>> >>> > [Feb13 07:05] [drm:intel_cpu_fifo_underrun_irq_handler [i915]] *ERROR*
>>> >>> > CPU pipe A FIFO underrun
>>> >>> >
>>> >>> > I haven't seen this on 4.4.
>>> >>> >
>>> >>> > I'd be happy to dig up debugging info, but I don't know what would be
>>> >>> > useful.  I have no i915 module options set.
>>> >>>
>>> >>> It's flashing quite frequently now, although I seem to get the
>>> >>> underrun warning only once per resume.
>>> >>
>>> >> We shut up the warning irq source to avoid hijacking an entire cpu core
>>> >> ;-)
>>> >>
>>> >> There's a fix from Matt right after 4.5-rc4 in Linus' branch. I'm hoping
>>> >> that should help.
>>> >
>>> > Do you mean:
>>> >
>>> > commit e2e407dc093f530b771ee8bf8fe1be41e3cea8b3
>>> > Author: Matt Roper <matthew.d.roper at intel.com>
>>> > Date:   Mon Feb 8 11:05:28 2016 -0800
>>> >
>>> >     drm/i915: Pretend cursor is always on for ILK-style WM calculations (v2)
>>> >
>>> > If so, it didn't help.  I'm currently doing a full rebuild just in
>>> > case I messed something up, though.
>>> >
>>>
>>> Definitely not fixed.  It seems to be okay after a reboot until the
>>> first suspend/resume.
>>>
>>> This happened after resuming.  Five cents says it's the root cause.
>>
>> That's interesting, but doesn't ring a bell unfortunately. Can you try to
>> attempt a bisect?
>
> I probably can, but it's very slow.  Is there a reasonably
> straightforward way to instrument the watermark computation to see
> what's going wrong?  I'm reasonably confident that the bug is in the
> resume code or in something that only happens on resume, since I still
> haven't seen underruns after rebooting before suspending.
>

With some instrumentation applied, I got this:

[  369.471064] skl_update_wm(crtc-0): computed update
[  369.471072] skl_update_other_pipe_wm(crtc-0): no change
[  369.471075] skl_write_wm_values...
[  369.471078]  CRTC crtc-0 pipe A
[  369.471083]   wm_linetime = 121
[  369.471086]   plane_wm level 0 plane 0 = 2147500036
[  369.471090]   plane_wm level 0 plane 1 = 0
[  369.471094]   plane_wm level 0 cursor = 2147500036
[  369.471097]   plane_wm level 1 plane 0 = 2147516439
[  369.471101]   plane_wm level 1 plane 1 = 0
[  369.471104]   plane_wm level 1 cursor = 2147516439
[  369.471108]   plane_wm level 2 plane 0 = 2147516448
[  369.471111]   plane_wm level 2 plane 1 = 0
[  369.471115]   plane_wm level 2 cursor = 0
[  369.471118]   plane_wm level 3 plane 0 = 2147532837
[  369.471121]   plane_wm level 3 plane 1 = 0
[  369.471125]   plane_wm level 3 cursor = 0
[  369.471128]   plane_wm level 4 plane 0 = 2147565639
[  369.471131]   plane_wm level 4 plane 1 = 0
[  369.471135]   plane_wm level 4 cursor = 0
[  369.471138]   plane_wm level 5 plane 0 = 2147582038
[  369.471141]   plane_wm level 5 plane 1 = 0
[  369.471145]   plane_wm level 5 cursor = 0
[  369.471148]   plane_wm level 6 plane 0 = 2147582044
[  369.471151]   plane_wm level 6 plane 1 = 0
[  369.471155]   plane_wm level 6 cursor = 0
[  369.471158]   plane_wm level 7 plane 0 = 2147598443
[  369.471161]   plane_wm level 7 plane 1 = 0
[  369.471164]   plane_wm level 7 cursor = 0
[  369.471168]   wm_trans plane 0 = 0
[  369.471171]   wm_trans plane 1 = 0
[  369.471174]   wm_trans cursor = 0
[  369.471182]  CRTC crtc-1 pipe B
[  369.471184]   clean
[  369.471186]  CRTC crtc-2 pipe C
[  369.471189]   clean
[  369.471226] skl_update_wm(crtc-0): no update
[  372.068755] [drm:intel_cpu_fifo_underrun_irq_handler [i915]]
*ERROR* CPU pipe A FIFO underrun
[  373.399396] skl_update_wm(crtc-0): computed update
[  373.399408] skl_update_other_pipe_wm(crtc-0): no change
[  373.399413] skl_write_wm_values...
[  373.399418]  CRTC crtc-0 pipe A
[  373.399426]   wm_linetime = 121
[  373.399431]   plane_wm level 0 plane 0 = 2147500036
[  373.399438]   plane_wm level 0 plane 1 = 0
[  373.399443]   plane_wm level 0 cursor = 16388
[  373.399449]   plane_wm level 1 plane 0 = 2147516439
[  373.399455]   plane_wm level 1 plane 1 = 0
[  373.399460]   plane_wm level 1 cursor = 32791
[  373.399465]   plane_wm level 2 plane 0 = 2147516448
[  373.399471]   plane_wm level 2 plane 1 = 0
[  373.399476]   plane_wm level 2 cursor = 0
[  373.399481]   plane_wm level 3 plane 0 = 2147532837
[  373.399486]   plane_wm level 3 plane 1 = 0
[  373.399491]   plane_wm level 3 cursor = 0
[  373.399497]   plane_wm level 4 plane 0 = 2147565639
[  373.399502]   plane_wm level 4 plane 1 = 0
[  373.399557]   plane_wm level 4 cursor = 0
[  373.399562]   plane_wm level 5 plane 0 = 2147582038
[  373.399568]   plane_wm level 5 plane 1 = 0
[  373.399573]   plane_wm level 5 cursor = 0
[  373.399578]   plane_wm level 6 plane 0 = 2147582044
[  373.399591]   plane_wm level 6 plane 1 = 0
[  373.399596]   plane_wm level 6 cursor = 0
[  373.399602]   plane_wm level 7 plane 0 = 2147598443
[  373.399607]   plane_wm level 7 plane 1 = 0
[  373.399612]   plane_wm level 7 cursor = 0
[  373.399617]   wm_trans plane 0 = 0
[  373.399623]   wm_trans plane 1 = 0
[  373.399627]   wm_trans cursor = 0
[  373.399638]  CRTC crtc-1 pipe B
[  373.399642]   clean
[  373.399646]  CRTC crtc-2 pipe C
[  373.399650]   clean

The diff between those two dumps was:

--- a.txt    2016-02-22 18:56:32.613058614 -0800
+++ b.txt    2016-02-22 18:56:49.219079057 -0800
@@ -3,10 +3,10 @@
   wm_linetime = 121
   plane_wm level 0 plane 0 = 2147500036
   plane_wm level 0 plane 1 = 0
-  plane_wm level 0 cursor = 2147500036
+  plane_wm level 0 cursor = 16388
   plane_wm level 1 plane 0 = 2147516439
   plane_wm level 1 plane 1 = 0
-  plane_wm level 1 cursor = 2147516439
+  plane_wm level 1 cursor = 32791
   plane_wm level 2 plane 0 = 2147516448
   plane_wm level 2 plane 1 = 0
   plane_wm level 2 cursor = 0


The code that generated this is attached.

Is the fix from Matt that you mentioned this one:

commit e2e407dc093f530b771ee8bf8fe1be41e3cea8b3
Author: Matt Roper <matthew.d.roper at intel.com>
Date:   Mon Feb 8 11:05:28 2016 -0800

    drm/i915: Pretend cursor is always on for ILK-style WM calculations (v2)

On brief inspection, it doesn't look like that patch will have any
effect on Skylake.

--Andy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: i915-dbg.patch
Type: text/x-patch
Size: 2823 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20160222/8fddfea6/attachment.bin>


More information about the Intel-gfx mailing list