[PATCH v5 0/7] drm/mgag200: Implement VBLANK support

Tony Luck tony.luck at intel.com
Tue Oct 1 22:41:25 UTC 2024


My system threw out a bunch of stack traces while booting
v6.12-rc1 and hung.

First of these looks like this:

[   33.639799] fbcon: mgag200drmfb (fb0) is primary device
[   33.651573] ixgbe 0000:03:00.0: Intel(R) 10 Gigabit Network Connection
[   33.652092] ixgbe 0000:03:00.1: enabling device (0100 -> 0102)
[   33.818328] ------------[ cut here ]------------
[   33.818362] [CRTC:34:crtc-0] vblank wait timed out
[   33.818422] WARNING: CPU: 44 PID: 1815 at drivers/gpu/drm/drm_atomic_helper.c:1682 drm_atomic_helper_wait_for_vblanks.part.0+0x245/0x250 [drm_kms_helper]
[   33.818447] Modules linked in: crct10dif_pclmul mgag200(+) crc32_pclmul i2c_algo_bit crc32c_intel drm_shmem_helper ghash_clmulni_intel sha512_ssse3 drm_kms_helper sha256_ssse3 sha1_ssse3 ixgbe(+) mpt3sas mdio drm raid_class dca scsi_transport_sas wmi fuse
[   33.818475] CPU: 44 PID: 1815 Comm: systemd-udevd Not tainted 6.10.0-rc1+ #168
[   33.818478] Hardware name: Intel Corporation BRICKLAND/BRICKLAND, BIOS BRBDXSD1.86B.0338.V01.1603162127 03/16/2016
[   33.818481] RIP: 0010:drm_atomic_helper_wait_for_vblanks.part.0+0x245/0x250 [drm_kms_helper]
[   33.818490] Code: 00 48 8d 7b 08 e8 2b 7e 61 da 45 85 ff 0f 85 d3 fe ff ff 49 8b 56 20 41 8b b6 d8 00 00 00 48 c7 c7 38 52 ba c0 e8 8b 53 59 da <0f> 0b e9 b5 fe ff ff 0f 1f 40 00 90 90 90 90 90 90 90 90 90 90 90
[   33.818493] RSP: 0018:ffffbf61a3faf690 EFLAGS: 00010282
[   33.818496] RAX: 0000000000000026 RBX: ffff99be04ad3028 RCX: 0000000000000000
[   33.818499] RDX: 0000000000000002 RSI: ffffffff9c9fd7c8 RDI: 00000000ffffffff
[   33.818501] RBP: ffff99be08a76c00 R08: 0000000000000001 R09: 0000000000000000
[   33.818503] R10: 0000000000000001 R11: ffff99f1011fffe8 R12: 0000000000000000
[   33.818504] R13: 0000000000000000 R14: ffff99be0bcf93f8 R15: 0000000000000000
[   33.818506] FS:  00007fbe18e7db40(0000) GS:ffff99ca61c00000(0000) knlGS:0000000000000000
[   33.818509] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   33.818510] CR2: 000055b77636c1f8 CR3: 000000000e486004 CR4: 00000000003706f0
[   33.818513] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   33.818514] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   33.818516] Call Trace:
[   33.818519]  <TASK>
[   33.818521]  ? __warn+0x8b/0x190
[   33.818535]  ? drm_atomic_helper_wait_for_vblanks.part.0+0x245/0x250 [drm_kms_helper]
[   33.818545]  ? report_bug+0x1c3/0x1d0
[   33.818559]  ? handle_bug+0x42/0x70
[   33.818571]  ? exc_invalid_op+0x14/0x70
[   33.818575]  ? asm_exc_invalid_op+0x16/0x20
[   33.818589]  ? drm_atomic_helper_wait_for_vblanks.part.0+0x245/0x250 [drm_kms_helper]
[   33.818602]  ? __pfx_autoremove_wake_function+0x10/0x10
[   33.818614]  drm_atomic_helper_commit_tail+0x71/0x80 [drm_kms_helper]
[   33.818625]  mgag200_mode_config_helper_atomic_commit_tail+0x28/0x40 [mgag200]
[   33.818633]  commit_tail+0x94/0x130 [drm_kms_helper]
[   33.818644]  drm_atomic_helper_commit+0x13e/0x170 [drm_kms_helper]
[   33.818655]  drm_atomic_commit+0x97/0xb0 [drm]
[   33.818717]  ? __pfx___drm_printfn_info+0x10/0x10 [drm]
[   33.818750]  drm_client_modeset_commit_atomic+0x207/0x250 [drm]
[   33.818783]  drm_client_modeset_commit_locked+0x5b/0x190 [drm]
[   33.818807]  drm_client_modeset_commit+0x24/0x50 [drm]
[   33.818829]  __drm_fb_helper_restore_fbdev_mode_unlocked+0x92/0xc0 [drm_kms_helper]
[   33.818841]  drm_fb_helper_set_par+0x2e/0x40 [drm_kms_helper]
[   33.818850]  fbcon_init+0x2a8/0x560
[   33.818860]  visual_init+0xc4/0x120
[   33.818867]  do_bind_con_driver.isra.0+0x1a1/0x3d0
[   33.818875]  do_take_over_console+0x10b/0x1a0
[   33.818880]  do_fbcon_takeover+0x5c/0xc0
[   33.818883]  fbcon_fb_registered+0x49/0x70
[   33.818886]  register_framebuffer+0x190/0x250
[   33.818896]  __drm_fb_helper_initial_config_and_unlock+0x345/0x590 [drm_kms_helper]
[   33.818906]  ? drm_client_register+0x33/0xc0 [drm]
[   33.818934]  drm_fbdev_shmem_client_hotplug+0x6c/0xc0 [drm_shmem_helper]
[   33.818939]  drm_client_register+0x7b/0xc0 [drm]
[   33.818963]  mgag200_pci_probe+0x90/0x180 [mgag200]
[   33.818970]  local_pci_probe+0x46/0xa0
[   33.818978]  pci_device_probe+0xb5/0x230
[   33.818986]  really_probe+0xd9/0x380
[   33.818993]  __driver_probe_device+0x78/0x150
[   33.818997]  driver_probe_device+0x1e/0x90
[   33.819000]  __driver_attach+0xd6/0x1d0
[   33.819003]  ? __pfx___driver_attach+0x10/0x10
[   33.819005]  bus_for_each_dev+0x66/0xa0
[   33.819012]  bus_add_driver+0x111/0x240
[   33.819018]  driver_register+0x5c/0x120
[   33.819021]  ? __pfx_mgag200_pci_driver_init+0x10/0x10 [mgag200]
[   33.819026]  do_one_initcall+0x62/0x3a0
[   33.819035]  ? kmalloc_trace_noprof+0x2a0/0x340
[   33.819048]  do_init_module+0x64/0x240
[   33.819058]  init_module_from_file+0x7a/0xa0
[   33.819072]  idempotent_init_module+0x15a/0x210
[   33.819079]  ? __startup_64+0x70/0x3f0
[   33.819086]  __x64_sys_finit_module+0x5a/0xb0
[   33.819092]  do_syscall_64+0x73/0x190
[   33.819098]  entry_SYSCALL_64_after_hwframe+0x76/0x7e

I peeked at changes to this driver between v6.11 and v6.12-rc1 and saw
this set:

$ git log --oneline linus ^v6.11 -- drivers/gpu/drm/mgag200
219b45d023ed drm/mgag200: Remove BMC output
0f9ff361ad82 drm/mgag200: vga-bmc: Control BMC scanout from encoder
9d09cac47de5 drm/mgag200: vga-bmc: Control CRTC VIDRST flag from encoder
dc06efbb7934 drm/mgag200: vga-bmc: Transparently handle BMC
f5510726608f drm/mgag200: Add VGA-BMC output
6c9e14ee9f51 drm/mgag200: Fix VBLANK interrupt handling
d5070c9b2944 drm/mgag200: Implement struct drm_crtc_funcs.get_vblank_timestamp
89c6ea2006e2 drm/mgag200: Add vblank support
5cd522b5331b drm/mgag200: Add dedicted variable for <linecomp> field
d6460bd52c27 drm/mgag200: Add dedicated variables for blanking fields
e8f834b55962 drm/mgag200: Use adjusted mode values for CRTCs
b345b3542d66 drm/mgag200: Align register field names with documentation
754c9129b949 drm/mgag200: Use hexadecimal register indeces
3ac9384061b2 drm/mgag200: Rename BMC vidrst names
7bb97cf91588 drm/mgag200: Remove vidrst callbacks from struct mgag200_device_funcs
cd3a2e8b0a03 drm/mgag200: Only set VIDRST bits in CRTC modesetting

I tried a mini-bisct across these changes and found the system boots
normally with:

5cd522b5331b drm/mgag200: Add dedicted variable for <linecomp> field

and fails with:

89c6ea2006e2 drm/mgag200: Add vblank support

I do see that there is a subsequent "Fix VBLANK" patch, but it appears
that whatever it fixed didn't help on my system.

-Tony


More information about the dri-devel mailing list