[QUESTION] drmModeAtomicCommit returns -EINVAL on return

Sichem Zhou sichem.zh at gmail.com
Tue Jun 8 07:10:26 UTC 2021


Hi Michel,

Thanks for your answer, I just enabled the debug and captured a drm debug log
from dmesg, but I don't seem to find anything that looks like an
error, Is there anything specific I should be looking for?

Sorry for attaching my log here, here is the last drmModeAtomicCommit
where I had -einval.

[   56.005133] [drm:drm_atomic_state_init [drm]] Allocated atomic
state 00000000c20a40d6
[   56.005218] [drm:drm_mode_object_get [drm]] OBJ ID: 97 (3)
[   56.005297] [drm:drm_mode_object_get [drm]] OBJ ID: 97 (4)
[   56.005373] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:31:plane 1A] 0000000040b2d9eb state to 00000000c20a40d6
[   56.005457] [drm:drm_mode_object_get [drm]] OBJ ID: 122 (1)
[   56.005534] [drm:drm_atomic_get_crtc_state [drm]] Added
[CRTC:51:pipe A] 0000000073659c18 state to 00000000c20a40d6
[   56.005611] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:39:plane 2A] 0000000071f640c7 state to 00000000c20a40d6
[   56.005687] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:39:plane 2A] state 0000000071f640c7
[   56.005765] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:47:cursor A] 000000000ebe824b state to 00000000c20a40d6
[   56.005839] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:47:cursor A] state 000000000ebe824b
[   56.005911] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:52:plane 1B] 00000000b6f083af state to 00000000c20a40d6
[   56.005983] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:60:plane 2B] 00000000243f0105 state to 00000000c20a40d6
[   56.006055] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:60:plane 2B] state 00000000243f0105
[   56.006124] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:68:cursor B] 00000000c385344b state to 00000000c20a40d6
[   56.006196] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:68:cursor B] state 00000000c385344b
[   56.006264] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:73:plane 1C] 000000006229658a state to 00000000c20a40d6
[   56.006336] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:81:plane 2C] 0000000065fc3015 state to 00000000c20a40d6
[   56.006407] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:81:plane 2C] state 0000000065fc3015
[   56.006475] [drm:drm_atomic_get_plane_state [drm]] Added
[PLANE:89:cursor C] 00000000c5c2644d state to 00000000c20a40d6
[   56.006546] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:89:cursor C] state 00000000c5c2644d
[   56.006618] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [FB:97] for [PLANE:31:plane 1A] state 0000000040b2d9eb
[   56.006686] [drm:drm_mode_object_get [drm]] OBJ ID: 97 (5)
[   56.006763] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 97 (6)
[   56.006858] [drm:drm_atomic_add_affected_connectors [drm]] Adding
all current connectors for [CRTC:51:pipe A] to 00000000c20a40d6
[   56.006942] [drm:drm_mode_object_get [drm]] OBJ ID: 95 (4)
[   56.007019] [drm:drm_mode_object_get [drm]] OBJ ID: 95 (5)
[   56.007094] [drm:drm_atomic_get_connector_state [drm]] Added
[CONNECTOR:95:eDP-1] 0000000066710aab state to 00000000c20a40d6
[   56.007172] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 95 (5)
[   56.007250] i915 0000:00:02.0:
[drm:drm_atomic_set_crtc_for_connector [drm]] Link
[CONNECTOR:95:eDP-1] state 0000000066710aab to [NOCRTC]
[   56.007321] [drm:drm_mode_object_get [drm]] OBJ ID: 95 (4)
[   56.007397] i915 0000:00:02.0:
[drm:drm_atomic_set_crtc_for_connector [drm]] Link
[CONNECTOR:95:eDP-1] state 0000000066710aab to [CRTC:51:pipe A]
[   56.007471] [drm:drm_atomic_get_crtc_state [drm]] Added
[CRTC:72:pipe B] 0000000065ce9351 state to 00000000c20a40d6
[   56.007548] i915 0000:00:02.0: [drm:drm_atomic_set_mode_for_crtc
[drm]] Set [NOMODE] for [CRTC:72:pipe B] state 0000000065ce9351
[   56.007618] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:52:plane 1B] state 00000000b6f083af
[   56.007684] [drm:drm_atomic_add_affected_connectors [drm]] Adding
all current connectors for [CRTC:72:pipe B] to 00000000c20a40d6
[   56.007765] [drm:drm_atomic_get_crtc_state [drm]] Added
[CRTC:93:pipe C] 0000000067f37a81 state to 00000000c20a40d6
[   56.007838] i915 0000:00:02.0: [drm:drm_atomic_set_mode_for_crtc
[drm]] Set [NOMODE] for [CRTC:93:pipe C] state 0000000067f37a81
[   56.007907] i915 0000:00:02.0: [drm:drm_atomic_set_fb_for_plane
[drm]] Set [NOFB] for [PLANE:73:plane 1C] state 000000006229658a
[   56.007975] [drm:drm_atomic_add_affected_connectors [drm]] Adding
all current connectors for [CRTC:93:pipe C] to 00000000c20a40d6
[   56.008051] [drm:drm_atomic_check_only [drm]] checking 00000000c20a40d6
[   56.008133] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]]
Updating routing for [CONNECTOR:95:eDP-1]
[   56.008184] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]]
[CONNECTOR:95:eDP-1] keeps [ENCODER:94:DDI A/PHY A], now on
[CRTC:51:pipe A]
[   56.008232] [drm:drm_atomic_add_encoder_bridges [drm]] Adding all
bridges for [encoder:94:DDI A/PHY A] to 00000000c20a40d6
[   56.008311] [drm:drm_atomic_add_encoder_bridges [drm]] Adding all
bridges for [encoder:94:DDI A/PHY A] to 00000000c20a40d6
[   56.008390] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 97 (5)
[   56.008469] [drm:drm_mode_object_get [drm]] OBJ ID: 97 (4)
[   56.008554] i915 0000:00:02.0: [drm:intel_plane_atomic_calc_changes
[i915]] [CRTC:51:pipe A] with [PLANE:31:plane 1A] visible 1 -> 1, off
0, on 0, ms 0
[   56.008824] i915 0000:00:02.0:
[drm:intel_atomic_get_global_obj_state [i915]] Added new global object
000000008a949845 state 00000000a680ff36 to 00000000c20a40d6
[   56.009059] i915 0000:00:02.0:
[drm:intel_atomic_get_global_obj_state [i915]] Added new global object
00000000db701695 state 0000000099e760e4 to 00000000c20a40d6
[   56.009292] [drm:drm_atomic_commit [drm]] committing
00000000c20a40d6
[   56.009430] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,1029)@ 55.633486 -> 55.627611 [e 0 us, 0 rep]
[   56.009519] i915 0000:00:02.0: [drm:drm_vblank_restore [drm]]
missed 38 vblanks in 263172022 ns, frame duration=6943097 ns,
hw_diff=38
[   56.009599] i915 0000:00:02.0: [drm:drm_vblank_enable [drm]]
enabling vblank on crtc 0, ret: 0
[   56.009675] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,1071)@ 55.633731 -> 55.627616 [e 0 us, 0 rep]
[   56.009755] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,-131)@ 55.633811 -> 55.634559 [e 0 us, 0 rep]
[   56.009831] i915 0000:00:02.0: [drm:drm_update_vblank_count [drm]]
updating vblank count on crtc 0: current=7575, diff=1, hw=8436
hw_last=8435
[   56.009917] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,-103)@ 55.633970 -> 55.634558 [e 0 us, 0 rep]
[   56.010025] i915 0000:00:02.0: [drm:drm_update_vblank_count [drm]]
updating vblank count on crtc 0: current=7576, diff=0, hw=8436
hw_last=8436
[   56.010112] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,-68)@ 55.634168 -> 55.634556 [e 0 us, 0 rep]
[   56.010191] i915 0000:00:02.0: [drm:drm_update_vblank_count [drm]]
updating vblank count on crtc 0: current=7576, diff=0, hw=8436
hw_last=8436
[   56.016771] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,-118)@ 55.640809 -> 55.641483 [e 0 us, 0 rep]
[   56.016798] i915 0000:00:02.0: [drm:drm_update_vblank_count [drm]]
updating vblank count on crtc 0: current=7576, diff=1, hw=8437
hw_last=8436
[   56.016814] i915 0000:00:02.0: [drm:drm_handle_vblank [drm]] vblank
event on 7577, current 7577
[   56.016907] [drm:drm_atomic_state_default_clear [drm]] Clearing
atomic state 00000000c20a40d6
[   56.016927] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 95 (5)
[   56.016945] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 95 (4)
[   56.016964] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 122 (2)
[   56.016981] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 97 (5)
[   56.016997] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 97 (4)
[   56.017015] [drm:__drm_atomic_state_free [drm]] Freeing atomic
state 00000000c20a40d6
[   56.017034] [drm:drm_release_noglobal [drm]] driver lastclose
completed
[   56.023639] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,-131)@ 55.647660 -> 55.648408 [e 0 us, 0 rep]
[   56.023668] i915 0000:00:02.0: [drm:drm_update_vblank_count [drm]]
updating vblank count on crtc 0: current=7577, diff=1, hw=8438
hw_last=8437
[   56.023688] i915 0000:00:02.0: [drm:vblank_disable_fn [drm]]
disabling vblank on crtc 0
[   56.023706] i915 0000:00:02.0:
[drm:drm_crtc_vblank_helper_get_vblank_timestamp_internal [drm]] crtc
0 : v p(0,-119)@ 55.647729 -> 55.648408 [e 0 us, 0 rep]
[   56.023725] i915 0000:00:02.0: [drm:drm_update_vblank_count [drm]]
updating vblank count on crtc 0: current=7578, diff=0, hw=8438
hw_last=8438
[   57.924428] i915 0000:00:02.0: [drm:intel_pps_vdd_off_sync_unlocked
[i915]] Turning [ENCODER:94:DDI A/PHY A] VDD off
[   57.924748] i915 0000:00:02.0: [drm:intel_pps_vdd_off_sync_unlocked
[i915]] PP_STATUS: 0x80000008 PP_CONTROL: 0x00000067
[   57.924956] i915 0000:00:02.0:
[drm:__intel_display_power_put_domain [i915]] disabling DC off
[   57.925163] i915 0000:00:02.0: [drm:skl_enable_dc6 [i915]] Enabling DC6
[   57.925361] i915 0000:00:02.0: [drm:gen9_set_dc_state [i915]]
Setting DC state from 00 to 02

Best regards,
Sichem

On Mon, Jun 7, 2021 at 4:32 PM Michel Dänzer <michel at daenzer.net> wrote:
>
> On 2021-06-05 6:06 a.m., Sichem Zhou wrote:
> >
> > 1. Is there any way to debug when the functions like drmModeSetCrtc,
> > drmModePageFlip and drmModeAtomicCommit returns non zero, besides
> > getting the errno?
>
> Enable appropriate debugging bits in /sys/module/drm/parameters/debug, reproduce problem, (disable debugging bits again), check dmesg.
>
>
> > 4. Do I need to wait for vblank for modesetting? I know it will be an
> > error if I tried to do drmModePageFlip before the last one is handled
> > but what about drmModeSetCrtc? Do I need to wait for a vblank for the
> > last pageflip?
>
> Right now, if you don't wait for any pending page flip to complete before
> drmModeSetCrtc, the two may race, and the CRTC may end up scanning out from the FB set by the page flip.
>
> Maybe this race should be prevented in the kernel though.
>
> There's no need to wait for vblank.
>
>
> I have to defer to others for your other questions.
>
>
> --
> Earthling Michel Dänzer               |               https://redhat.com
> Libre software enthusiast             |             Mesa and X developer


More information about the dri-devel mailing list