[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