ARGB16161616F causes a kernel panic in dce110_set_input_transfer_func
Brief summary of the problem:
Attaching a ARGB16161616F buffer to the primary plane results in a kernel panic.
Hardware description:
- CPU: AMD Ryzen 5 3600
- GPU: 07:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (rev e7)
- System Memory: N/A
- Display(s): BenQ EL2870U
- Type of Diplay Connection: DP
System information:
- Distro name and Version: Arch Linux
- Kernel version: 5.10.16-arch1-1
- Custom kernel: N/A
- AMD package version: N/A
How to reproduce the issue:
- Create an
ARGB16161616F
dRM dumb buffer. - Try to submit it on the primary plane, which lists it as a possible input format.
- A kernel panic occurs:
[233526.712634] ------------[ cut here ]------------
[233526.712766] WARNING: CPU: 5 PID: 311526 at drivers/gpu/drm/amd/amdgpu/../display/dc/dce110/dce110_hw_sequencer.c:270 dce110_set_input_transfer_func+0xfb/0x1d0 [amdgpu]
[233526.712792] Modules linked in: wacom ccm xt_tcpudp xt_state xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_filter ext4 crc16 mbcache jbd2 nls_iso8859_1 vfat fat snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg soundwire_intel soundwire_generic_allocation soundwire_cadence iwl4965 snd_hda_codec snd_hda_core amdgpu iwlegacy snd_hwdep soundwire_bus edac_mce_amd snd_soc_core mac80211 wmi_bmof gpu_sched snd_compress i2c_algo_bit ac97_bus kvm_amd ttm snd_pcm_dmaengine cfg80211 kvm snd_pcm drm_kms_helper sp5100_tco r8169 snd_timer cec realtek snd mdio_devres syscopyarea joydev xpad sysfillrect rfkill irqbypass mousedev sysimgblt soundcore libphy k10temp rapl ff_memless pcspkr i2c_piix4 fb_sys_fops libarc4 gpio_amdpt pinctrl_amd gpio_generic mac_hid acpi_cpufreq wmi drm fuse agpgart bpf_preload ip_tables x_tables btrfs blake2b_generic libcrc32c crc32c_generic xor raid6_pq dm_crypt cbc encrypted_keys dm_mod trusted tpm
[233526.713461] usbhid crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel aesni_intel crypto_simd cryptd glue_helper ccp rng_core xhci_pci xhci_pci_renesas
[233526.713473] CPU: 5 PID: 311526 Comm: tentative Not tainted 5.10.16-arch1-1 #1
[233526.713475] Hardware name: Gigabyte Technology Co., Ltd. B450M DS3H/B450M DS3H-CF, BIOS F42h 10/18/2019
[233526.713606] RIP: 0010:dce110_set_input_transfer_func+0xfb/0x1d0 [amdgpu]
[233526.713610] Code: 39 48 8b 4c 24 08 65 48 2b 0c 25 28 00 00 00 0f 85 d8 00 00 00 48 83 c4 10 5b 5d 41 5c c3 83 e0 fd 83 f8 08 0f 84 86 00 00 00 <0f> 0b e9 7b ff ff ff 83 f8 02 74 5e 31 c0 eb c7 48 8b 45 10 be 01
[233526.713611] RSP: 0018:ffffbf8a0a233710 EFLAGS: 00010202
[233526.713613] RAX: 0000000000000009 RBX: ffff9e94711a7800 RCX: 0000000000000000
[233526.713615] RDX: ffff9e94711a7800 RSI: ffff9e921b8601b8 RDI: ffff9e93365b0000
[233526.713616] RBP: ffff9e933988d4c0 R08: 0000000000000008 R09: ffffbf8a0a233638
[233526.713617] R10: 0000000000000004 R11: 0000000000001a60 R12: ffff9e9333c68000
[233526.713618] R13: ffff9e94711a7800 R14: ffff9e9329639200 R15: ffff9e94711a7918
[233526.713620] FS: 00007f0ba856f7c0(0000) GS:ffff9e960e940000(0000) knlGS:0000000000000000
[233526.713621] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[233526.713623] CR2: 00007f0ba9b4e148 CR3: 0000000321c22000 CR4: 0000000000350ee0
[233526.713624] Call Trace:
[233526.713755] dce110_program_front_end_for_pipe+0x2c7/0x490 [amdgpu]
[233526.713880] dce110_apply_ctx_for_surface+0xbe/0x1b0 [amdgpu]
[233526.714001] dc_commit_updates_for_stream+0x10b6/0x1bf0 [amdgpu]
[233526.714133] amdgpu_dm_atomic_commit_tail+0x1575/0x2450 [amdgpu]
[233526.714153] commit_tail+0x94/0x130 [drm_kms_helper]
[233526.714164] drm_atomic_helper_commit+0x113/0x140 [drm_kms_helper]
[233526.714185] drm_mode_atomic_ioctl+0x8f8/0x9e0 [drm]
[233526.714205] ? drm_atomic_set_property+0xae0/0xae0 [drm]
[233526.714223] drm_ioctl_kernel+0xb2/0x100 [drm]
[233526.714241] drm_ioctl+0x215/0x390 [drm]
[233526.714258] ? drm_atomic_set_property+0xae0/0xae0 [drm]
[233526.714352] amdgpu_drm_ioctl+0x49/0x80 [amdgpu]
[233526.714358] __x64_sys_ioctl+0x83/0xb0
[233526.714362] do_syscall_64+0x33/0x40
[233526.714365] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[233526.714367] RIP: 0033:0x7f0ba89dae6b
[233526.714370] Code: ff ff ff 85 c0 79 8b 49 c7 c4 ff ff ff ff 5b 5d 4c 89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d d5 af 0c 00 f7 d8 64 89 01 48
[233526.714371] RSP: 002b:00007ffe13a85cb8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
[233526.714373] RAX: ffffffffffffffda RBX: 00007ffe13a85dc0 RCX: 00007f0ba89dae6b
[233526.714374] RDX: 00007ffe13a85dc0 RSI: 00000000c03864bc RDI: 0000000000000004
[233526.714375] RBP: 00007ffe13a85d70 R08: 0000000000000002 R09: 0000000000000002
[233526.714376] R10: 00007f0ba961c050 R11: 0000000000000246 R12: 00000000c03864bc
[233526.714377] R13: 00007ffe13a85dc0 R14: 0000000000000004 R15: 00006060000003e0
[233526.714380] ---[ end trace d714c65d40c43289 ]---
It seems build_prescale_params
has a typo and uses SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616
instead of SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616F
(notice the missing F
at the end).
The format ABGR16161616F
doesn't cause the panic.
A quick grep shows that SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616
appears elsewhere too:
display/dc/dc_hw_types.h
183: SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616,
display/dc/dcn30/dcn30_dpp.c
247: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn30/dcn30_hwseq.c
739: (dc->current_state->stream_status[0].plane_states[0]->format >= SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616 ?
display/dc/calcs/dcn_calcs.c
238: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
377: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn10/dcn10_hubbub.c
787: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/calcs/dce_calcs.c
2834: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
2937: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn10/dcn10_dpp.c
260: else if (input_format == SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616)
370: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dce110/dce110_mem_input_v.c
394: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn10/dcn10_hubp.c
279: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn20/dcn20_resource.c
2358: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn20/dcn20_dpp.c
168: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn20/dcn20_hubbub.c
160: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dcn20/dcn20_hubp.c
462: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/dce/dce_mem_input.c
90: if (format >= SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616)
608: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
display/dc/core/dc_resource.c
564: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
2980: case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616: