Bug 84269

Summary: [ALL regression]igt/kms_cursor_crc cursor position range checking broken
Product: DRI Reporter: Guo Jinxian <jinxianx.guo>
Component: DRM/IntelAssignee: Matt Roper <matthew.d.roper>
Status: CLOSED FIXED QA Contact: Intel GFX Bugs mailing list <intel-gfx-bugs>
Severity: normal    
Priority: high CC: hengx.ding, huax.lu, intel-gfx-bugs
Version: unspecified   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
dmesg
none
dmesg none

Description Guo Jinxian 2014-09-24 08:33:03 UTC
Created attachment 106768 [details]
dmesg

==System Environment==
--------------------------
Regression: No.
They are new cases.

Non-working platforms: BYT BSW

==kernel==
--------------------------
origin/drm-intel-nightly: 1c38dbc94bc61e685c72994cc9e634d4eb8c4da1(fails)
    drm-intel-nightly: 2014y-09m-23d-14h-26m-24s UTC integration manifest
origin/drm-intel-next-queued: 9adccc6063d1cf6ba38a5a26b87001554105be18(fails)
    drm/i915: add SW tracking to FBC enabling
origin/drm-intel-fixes: c84db77010877da6c5da119868ed54c43d59e726(fails)
    drm/i915/hdmi: fix hdmi audio state readout

==Bug detailed description==
-----------------------------
igt/kms_cursor_crc some subcases fail

Case lise:
igt/kms_cursor_crc/cursor-128x128-offscreen
igt/kms_cursor_crc/cursor-128x128-onscreen
igt/kms_cursor_crc/cursor-128x128-random
igt/kms_cursor_crc/cursor-128x128-sliding
igt/kms_cursor_crc/cursor-256x256-offscreen
igt/kms_cursor_crc/cursor-256x256-onscreen
igt/kms_cursor_crc/cursor-256x256-random
igt/kms_cursor_crc/cursor-256x256-sliding
igt/kms_cursor_crc/cursor-64x64-offscreen
igt/kms_cursor_crc/cursor-64x64-onscreen
igt/kms_cursor_crc/cursor-64x64-random
igt/kms_cursor_crc/cursor-64x64-sliding

Output:
root@x-byt06:/GFX/Test/Intel_gpu_tools/intel-gpu-tools/tests# ./kms_cursor_crc --run-subtest cursor-128x128-offscreen
IGT-Version: 1.8-g4b81e9c (x86_64) (Linux: 3.17.0-rc6_drm-intel-nightly_1c38db_20140924+ x86_64)
Beginning cursor-128x128-offscreen on pipe A, connector eDP-1
.Test assertion failure function do_single_test, file kms_cursor_crc.c:132:
Failed assertion: igt_crc_equal(&crc, &ref_crc)
Subtest cursor-128x128-offscreen: FAIL (3.260s)

==Reproduce steps==
---------------------------- 
1. ./kms_cursor_crc --run-subtest cursor-128x128-offscree
Comment 1 lu hua 2014-11-05 07:53:22 UTC
Test on BYT with latest -nightly kernel, it sporadically fails.
output:
root@x-bytm02:/GFX/Test/Intel_gpu_tools/intel-gpu-tools/tests# ./kms_cursor_crc --run-subtest cursor-256x256-onscreen
IGT-Version: 1.8-ge622850 (x86_64) (Linux: 3.18.0-rc3_drm-intel-nightly_f56717_20141105+ x86_64)
Beginning cursor-256x256-onscreen on pipe A, connector eDP-1
............................
cursor-256x256-onscreen on pipe A, connector eDP-1: PASSED

Beginning cursor-256x256-onscreen on pipe B, connector eDP-1
............................
cursor-256x256-onscreen on pipe B, connector eDP-1: PASSED

Subtest cursor-256x256-onscreen: SUCCESS (115.736s)
root@x-bytm02:/GFX/Test/Intel_gpu_tools/intel-gpu-tools/tests# ./kms_cursor_crc --run-subtest cursor-256x256-onscreen
IGT-Version: 1.8-ge622850 (x86_64) (Linux: 3.18.0-rc3_drm-intel-nightly_f56717_20141105+ x86_64)
Beginning cursor-256x256-onscreen on pipe A, connector eDP-1
..Test assertion failure function do_single_test, file kms_cursor_crc.c:131:
Failed assertion: igt_crc_equal(&crc, &ref_crc)
Subtest cursor-256x256-onscreen: FAIL (5.051s)
root@x-bytm02:/GFX/Test/Intel_gpu_tools/intel-gpu-tools/tests# ./kms_cursor_crc --run-subtest cursor-256x256-onscreen
IGT-Version: 1.8-ge622850 (x86_64) (Linux: 3.18.0-rc3_drm-intel-nightly_f56717_20141105+ x86_64)
Beginning cursor-256x256-onscreen on pipe A, connector eDP-1
..Test assertion failure function do_single_test, file kms_cursor_crc.c:131:
Failed assertion: igt_crc_equal(&crc, &ref_crc)
Subtest cursor-256x256-onscreen: FAIL (5.058s)
Comment 2 Daniel Vetter 2014-11-25 09:59:36 UTC
Please retest with latest igt, specifically

commit 57259d714d3fe1170cf931af72648219856a9918
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Mon Nov 24 16:08:32 2014 +0100

    lib/igt_debugfs: Don't setup crc in _new
Comment 3 lu hua 2014-12-22 07:13:44 UTC
Created attachment 111147 [details]
dmesg

Test on latest -nightly kernel and igt.
It still sporadically fails, Fail rate 1/4.

output:
IGT-Version: 1.9-gc537cdb (x86_64) (Linux: 3.18.0_drm-intel-nightly_4fa231_20141222+ x86_64)
Beginning cursor-128x128-random on pipe A, connector eDP-1
................Test assertion failure function do_single_test, file kms_cursor_crc.c:139:
Failed assertion: igt_crc_equal(&crc, &ref_crc)
Subtest cursor-128x128-random: FAIL (3.343s)
Comment 4 Jesse Barnes 2015-04-02 17:12:45 UTC
Looks like it still happens:

[root@jbarnes-byt tests]$ ./kms_cursor_crc --run-subtest cursor-128x128-offscreen
IGT-Version: 1.10-g590e47c (x86_64) (Linux: 4.0.0-rc6+ x86_64)
Beginning cursor-128x128-offscreen on pipe A, connector HDMI-A-1
.........................................................Test assertion failure function do_fail_test, file kms_cursor_crc.c:188:
Failed assertion: ret == expect
error: 0 != -34
Stack trace:
  #0 [__igt_fail_assert+0xfc]
  #1 [test_crc_offscreen+0x355]
  #2 [run_test.constprop.3+0x212]
  #3 [run_test_generic.constprop.1+0x5f2]
  #4 [__real_main556+0x133]
  #5 [main+0x21]
  #6 [__libc_start_main+0xf5]
  #7 [_start+0x29]
  #8 [<unknown>+0x29]
Subtest cursor-128x128-offscreen failed.
**** DEBUG ****
    HDMI-A-1: SetCursor pipe A, fb 1 128x128
display:     HDMI-A-1: MoveCursor pipe A, (2147483519, 2147483519)
display: }
display: A.3: plane_set_fb(0)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, disabling
display: }
display: commit {
display:     HDMI-A-1: Selecting pipe A
display: }
display: A.3: plane_set_fb(64)
display: A.3: plane_set_size(128,128)
display: A.3: plane_set_position(-2147483648,2147483519)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, fb 1 128x128
display:     HDMI-A-1: MoveCursor pipe A, (-2147483648, 2147483519)
display: }
display: A.3: plane_set_fb(0)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, disabling
display: }
display: commit {
display:     HDMI-A-1: Selecting pipe A
display: }
display: A.3: plane_set_fb(64)
display: A.3: plane_set_size(128,128)
display: A.3: plane_set_position(-32768,-32768)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, fb 1 128x128
display:     HDMI-A-1: MoveCursor pipe A, (-32768, -32768)
display: }
display: A.3: plane_set_fb(0)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, disabling
display: }
display: commit {
display:     HDMI-A-1: Selecting pipe A
display: }
display: A.3: plane_set_fb(64)
display: A.3: plane_set_size(128,128)
display: A.3: plane_set_position(32767,-32768)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, fb 1 128x128
display:     HDMI-A-1: MoveCursor pipe A, (32767, -32768)
display: }
display: A.3: plane_set_fb(0)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, disabling
display: }
display: commit {
display:     HDMI-A-1: Selecting pipe A
display: }
display: A.3: plane_set_fb(64)
display: A.3: plane_set_size(128,128)
display: A.3: plane_set_position(32767,32767)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, fb 1 128x128
display:     HDMI-A-1: MoveCursor pipe A, (32767, 32767)
display: }
display: A.3: plane_set_fb(0)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, disabling
display: }
display: commit {
display:     HDMI-A-1: Selecting pipe A
display: }
display: A.3: plane_set_fb(64)
display: A.3: plane_set_size(128,128)
display: A.3: plane_set_position(-32768,32767)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, fb 1 128x128
display:     HDMI-A-1: MoveCursor pipe A, (-32768, 32767)
display: }
display: A.3: plane_set_fb(0)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, disabling
display: }
display: commit {
display:     HDMI-A-1: Selecting pipe A
display: }
display: A.3: plane_set_fb(64)
display: A.3: plane_set_size(128,128)
display: A.3: plane_set_position(2147483520,2147483520)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, fb 1 128x128
display:     HDMI-A-1: MoveCursor pipe A, (2147483520, 2147483520)
display: }
display: A.3: plane_set_position(0,0)
display: A.3: plane_set_fb(0)
display: commit {
display:     HDMI-A-1: Selecting pipe A
display:     HDMI-A-1: SetCursor pipe A, disabling
display:     HDMI-A-1: MoveCursor pipe A, (0, 0)
display: }
Test assertion failure function do_fail_test, file kms_cursor_crc.c:188:
Failed assertion: ret == expect
error: 0 != -34
****  END  ****
Subtest cursor-128x128-offscreen: FAIL (38.532s)


It appears the universal plane code doesn't check for bounds in the same way as the old cursor code.  Matt, is this still valid?
Comment 5 Jesse Barnes 2015-04-02 20:36:35 UTC
*** Bug 89528 has been marked as a duplicate of this bug. ***
Comment 6 Jesse Barnes 2015-04-02 20:38:18 UTC
*** Bug 89630 has been marked as a duplicate of this bug. ***
Comment 7 Matt Roper 2015-04-03 22:07:24 UTC
(In reply to Jesse Barnes from comment #4)
...
> It appears the universal plane code doesn't check for bounds in the same way
> as the old cursor code.  Matt, is this still valid?

I think this patch should fix it:
  http://patchwork.freedesktop.org/patch/46469/

Please re-open if the problem still exists.
Comment 8 Gordon Jin 2015-04-04 12:45:50 UTC
(In reply to Matt Roper from comment #7)
> (In reply to Jesse Barnes from comment #4)
> ...
> > It appears the universal plane code doesn't check for bounds in the same way
> > as the old cursor code.  Matt, is this still valid?
> 
> I think this patch should fix it:
>   http://patchwork.freedesktop.org/patch/46469/
> 
> Please re-open if the problem still exists.

Matt, has this patch been committed? We should change the status to RESOLVED-FIXED after the patch landed.
Comment 9 Matt Roper 2015-04-06 15:23:55 UTC
(In reply to Gordon Jin from comment #8)
> (In reply to Matt Roper from comment #7)
> > (In reply to Jesse Barnes from comment #4)
> > ...
> > > It appears the universal plane code doesn't check for bounds in the same way
> > > as the old cursor code.  Matt, is this still valid?
> > 
> > I think this patch should fix it:
> >   http://patchwork.freedesktop.org/patch/46469/
> > 
> > Please re-open if the problem still exists.
> 
> Matt, has this patch been committed? We should change the status to
> RESOLVED-FIXED after the patch landed.

Sorry, no; I jumped the gun on this one.  I'll set it back to assigned for now until it has been merged.
Comment 10 Matt Roper 2015-04-14 14:04:03 UTC
(In reply to Matt Roper from comment #9)
> (In reply to Gordon Jin from comment #8)
> > (In reply to Matt Roper from comment #7)
> > > (In reply to Jesse Barnes from comment #4)
> > > ...
> > > > It appears the universal plane code doesn't check for bounds in the same way
> > > > as the old cursor code.  Matt, is this still valid?
> > > 
> > > I think this patch should fix it:
> > >   http://patchwork.freedesktop.org/patch/46469/
> > > 
> > > Please re-open if the problem still exists.
> > 
> > Matt, has this patch been committed? We should change the status to
> > RESOLVED-FIXED after the patch landed.
> 
> Sorry, no; I jumped the gun on this one.  I'll set it back to assigned for
> now until it has been merged.

Okay, fix merged for real now:

http://patchwork.freedesktop.org/patch/47031/
Comment 11 xubin 2015-04-16 09:30:00 UTC
1.igt/kms_cursor_crc/cursor-128x128-offscreen
2.igt/kms_cursor_crc/cursor-128x128-onscreen
3.igt/kms_cursor_crc/cursor-128x128-random
4.igt/kms_cursor_crc/cursor-128x128-sliding
5.igt/kms_cursor_crc/cursor-256x256-offscreen
6.igt/kms_cursor_crc/cursor-64x64-offscreen
7.igt/kms_cursor_crc/cursor-64x64-onscreen
8.igt/kms_cursor_crc/cursor-64x64-random
9.igt/kms_cursor_crc/cursor-64x64-sliding
Result:
Above 9 cases pass on both BSW and BYT.

---------------------------- 
1. igt/kms_cursor_crc/cursor-256x256-onscreen
2. igt/kms_cursor_crc/cursor-256x256-random
3. igt/kms_cursor_crc/cursor-256x256-sliding2.

Result:
These three tests fail on the BSW, but pass on BYT.

IGT-Version: 1.10-g992f9f6 (x86_64) (Linux: 4.0.0_drm-intel-nightly_5ea91d_20150415+ x86_64)
Beginning cursor-256x256-onscreen on pipe A, connector eDP-1
.Test assertion failure function igt_assert_crc_equal, file igt_debugfs.c:207:
Failed assertion: a->crc[i] == b->crc[i]
error: 0x3220ae != 0x506a68
Stack trace:
  #0 [__igt_fail_assert+0xfc]
  #1 [igt_assert_crc_equal+0x82]
  #2 [do_single_test+0x138]
  #3 [do_test+0x1e]
  #4 [test_crc_onscreen+0x4d]
  #5 [run_test.constprop.3+0x212]
  #6 [run_test_generic.constprop.1+0x572]
  #7 [__real_main556+0x120]
  #8 [main+0x21]
  #9 [__libc_start_main+0xf5]
  #10 [_start+0x29]
  #11 [<unknown>+0x29]
Subtest cursor-256x256-onscreen failed.
**** DEBUG ****
Test requirement passed: cursor_w <= data->cursor_max_w && cursor_h <= data->cursor_max_h
display: eDP-1: set_pipe(A)
display: A.3: plane_set_fb(0)
display: commit {
display:     eDP-1: Selecting pipe A
display:     eDP-1: SetCursor pipe A, disabling
display: }
igt_create_fb_with_bo_size(width=1920, height=1080, format=0x34325258 [bpp=32], tiling=0x0, size=0
igt_create_fb_with_bo_size(handle=2, pitch=7680)
display: A.0: plane_set_fb(53)
display: commit {
display:     eDP-1: Selecting pipe A
display:     eDP-1: SetCrtc pipe A, fb 53, panning (0, 0), mode 1920x1080
display: }
display: A.3: plane_set_fb(0)
Beginning cursor-256x256-onscreen on pipe A, connector eDP-1
display: A.3: plane_set_fb(51)
display: A.3: plane_set_size(256,256)
display: A.3: plane_set_position(0,0)
display: commit {
display:     eDP-1: Selecting pipe A
display:     eDP-1: SetCursor pipe A, fb 1 256x256
display:     eDP-1: MoveCursor pipe A, (0, 0)
display: }
display: A.3: plane_set_fb(0)
display: commit {
display:     eDP-1: Selecting pipe A
display:     eDP-1: SetCursor pipe A, disabling
display: }
display: commit {
display:     eDP-1: Selecting pipe A
display: }
Test assertion failure function igt_assert_crc_equal, file igt_debugfs.c:207:
Failed assertion: a->crc[i] == b->crc[i]
error: 0x3220ae != 0x506a68
****  END  ****
Subtest cursor-256x256-onscreen: FAIL (2.700s)
Comment 12 Matt Roper 2015-04-16 14:33:31 UTC
> 1. igt/kms_cursor_crc/cursor-256x256-onscreen
> 2. igt/kms_cursor_crc/cursor-256x256-random
> 3. igt/kms_cursor_crc/cursor-256x256-sliding2.
> 
> Result:
> These three tests fail on the BSW, but pass on BYT.

This looks like a new bug, unrelated to the previous issues.  We should probably open a new bugzilla entry for this, especially since the new problem seems to be platform-specific.
Comment 13 xubin 2015-05-18 11:36:20 UTC
For this looks like a new bug,I open a new bugzilla entry for it .
And the bugzilla entry is :

Bug 90507 - [BSW] igt/kms_cursor_crc some subcases fail
Comment 14 Elizabeth 2017-10-06 14:35:21 UTC
Closing old verified.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.