Bug 40868

Summary: xorg-server: segfault при запуске на device tree системе с дискретной PCIe видеокартой
Product: Branch p9 Reporter: jqt4
Component: xorg-serverAssignee: Alexey Sheplyakov <asheplyakov>
Status: CLOSED FIXED QA Contact: qa-p9 <qa-p9>
Severity: major    
Priority: P5 CC: aen, asheplyakov, asheplyakov, iv, shrek, sin
Version: не указана   
Hardware: aarch64   
OS: Linux   

Description jqt4 2021-09-06 16:47:06 MSK
В плату TF307-MB-S-D с прошивкой SDK5.2 установлена видеокарта Radeon R7 240.
На эту систему установлен образ alt-workstation-9.2-aarch64.iso
При установке создан файл:
/etc/X11/xorg.conf
Section "Device"
    Identifier "Card0"
    Driver "fbdev"
    BusID "PCI:1:1:0"
EndSection
Это не позволяет использовать аппаратное ускорение.

После удаления файла /etc/X11/xorg.conf при перезапуске xorg-server возникает сбой:
[  2041.732] (EE) Backtrace:
[  2041.732] (EE) 0: X (xorg_backtrace+0x5c) [0x58fd84]
[  2041.732] (EE) 1: X (0x400000+0x193b78) [0x593b78]
[  2041.732] (EE) 2: linux-vdso.so.1 (__kernel_rt_sigreturn+0x0) [0xffffae3767d0]
[  2041.732] (EE) 3: X (0x400000+0x9afbc) [0x49afbc]
[  2041.732] (EE) 4: X (xf86CollectOptions+0x6c) [0x4800b4]
[  2041.732] (EE) 5: /usr/lib64/X11/modules/drivers/radeon_drv.so (0xffffacf17000+0x50268) [0xffffacf67268]
[  2041.732] (EE) 6: X (InitOutput+0x9d8) [0x4836b0]
[  2041.733] (EE) 7: X (0x400000+0x486ec) [0x4486ec]
[  2041.733] (EE) 8: /lib64/libc.so.6 (__libc_start_main+0xe4) [0xffffadbffae4]
[  2041.733] (EE) 9: X (0x400000+0x32360) [0x432360]
[  2041.733] (EE) 
[  2041.733] (EE) Segmentation fault at address 0x124
[  2041.733] (EE) 
Fatal server error:
[  2041.733] (EE) Caught signal 11 (Segmentation fault). Server aborting

Xorg-server был запущен под отладчиком. Результат следующий:
(gdb) set args -logverbose 8 :0
(gdb) run
Starting program: /usr/bin/X -logverbose 8 :0
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Missing separate debuginfo for /lib64/libgcc_s.so.1
Try to install the hash file /usr/lib/debug/.build-id/a4/da61bb993adcc95a6eaff904c0f184b5ce0e25.debug

X.Org X Server 1.20.8
X Protocol Version 11, Revision 0
Build Operating System: ALT p9 p9 (Vaccinium) aarch64
Current Operating System: Linux host-192 5.10.52-un-def-alt1 #1 SMP Wed Jul 21 10:14:42 UTC 2021 aarch64
Kernel command line: BOOT_IMAGE=/boot/vmlinuz root=UUID=e41ac917-f4e4-493f-a605-42f74e3c4410 ro resume=/dev/disk/by-uuid/c7eb2efa-9044-4eda-8315-10e557faf731 panic=30 splash
Build Date: 14 April 2021  07:26:50AM
 
Current version of pixman: 0.38.4
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Mon Sep  6 16:01:21 2021
(==) Using config directory: "/etc/X11/xorg.conf.d"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
Missing separate debuginfo for /usr/lib64/X11/modules/drivers/ati_drv.so
Try to install the hash file /usr/lib/debug/.build-id/9b/11e9453e7573b83764e53910418a84c7519fc2.debug
Missing separate debuginfo for /usr/lib64/X11/modules/drivers/fbdev_drv.so
Try to install the hash file /usr/lib/debug/.build-id/4e/212e58afaeefed28517b103febb62a45ca5247.debug
(II) [KMS] Kernel modesetting enabled.

Program received signal SIGSEGV, Segmentation fault.
0x000000000049afbc in xf86MergeOutputClassOptions (entityIndex=<optimized out>, options=options@entry=0x27f589a0) at xf86platformBus.c:368
368                 if (MATCH_PCI_DEVICES(xf86_platform_devices[i].pdev,
(gdb) bt
#0  0x000000000049afbc in xf86MergeOutputClassOptions (entityIndex=<optimized out>, options=options@entry=0x27f589a0) at xf86platformBus.c:368
#1  0x00000000004800b4 in xf86CollectOptions (pScrn=pScrn@entry=0x27f58620, extraOpts=extraOpts@entry=0x0) at xf86Option.c:83
#2  0x0000ffff8cf8c268 in RADEONPreInit_KMS (pScrn=0x27f58620, flags=<optimized out>) at radeon_kms.c:1805
#3  0x00000000004836b0 in InitOutput (pScreenInfo=pScreenInfo@entry=0x659020 <screenInfo>, argc=argc@entry=4, argv=argv@entry=0xfffffa19dc38) at xf86Init.c:536
#4  0x00000000004486ec in dix_main (argc=4, argv=0xfffffa19dc38, envp=0xfffffa19dc60) at main.c:193
#5  0x0000ffff8dc24ae4 in __libc_start_main (main=0x432310 <main>, argc=4, argv=0xfffffa19dc38, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, 
    stack_end=<optimized out>) at ../csu/libc-start.c:308
#6  0x0000000000432360 in _start () at ../sysdeps/aarch64/start.S:92
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Comment 1 jqt4 2021-09-06 17:47:35 MSK
Проблема воспроизводиться и с платой Radeon R5 230
Comment 2 Alexey Sheplyakov 2021-09-07 16:11:05 MSK
Скорее всего не хватает

commit 249a12c54a9316b089bd22683c011519348496df
Author: Huacai Chen <chenhc@lemote.com>
Date:   Sun Jul 5 05:59:58 2020 -0400

    linux: Fix platform device probe for DT-based PCI
    
    On a DT-base PCI platform, the sysfs path of vga device is like this:
    /sys/devices/platform/bus@10000000/1a000000.pci/pci0000:00/0000:00:11.0/0000:04:00.0.
    
    Then the ID_PATH from udev is platform-1a000000.pci-pci-0000:04:00.0 and
    the BusID will be pci-0000:04:00.0, which causes Xorg start fail. This
    is because config_udev_odev_setup_attribs() use strstr() to search the
    first "pci-" in ID_PATH. To fix this, we implement a strrstr() function
    and use it to search the last "pci-" in ID_PATH, which can get a correct
    BusID.
    
    (backported from commit 9fbd3e43dd9e13700df96b508c3d97f77e2b9f7e)
    
    Reviewed-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Huacai Chen <chenhc@lemote.com>
Comment 3 Alexey Sheplyakov 2021-09-08 13:49:25 MSK
Собственно запуск Xorg я починил:

#284832 TESTED #1 [test-only] p9 xorg-server.git=1.20.8-alt9

Но от этого не сильно легче. Наблюдаем артефакты, о которых упоминалось в рассылке:

> На обеих картах Radeon, при запуске X-сессии треугольники начинают
> рендерится в хаотичном порядке, что делает десктоп абсолютно
> неработоспособным (см. видео https://files.catbox.moe/xtgcm8.mp4 ).
> Причём проблема затрагивает только вершины непосредственно, а текстуры
> не бьются. При запуске X11, ещё до того, как успевает запуститься
> XFCE, на экране появляется разноцветный ярко выраженный шаблон, что
> сигнализирует, вероятно, о записи мусора в видеопамять каким-то из
> компонентов. В любом случае, блеклистинг всех модулей, относящихся к
> baikal, проблему не исправил.
Comment 4 AEN 2021-09-08 13:58:01 MSK
Валерий, прошу обратить внимание. Важно. 
Коллеги, следите за тоном обсуждения, пожалуйста.
Comment 5 Ivan A. Melnikov 2021-09-08 14:07:05 MSK
(In reply to Alexey Sheplyakov from comment #3)
> Собственно запуск Xorg я починил:
> 
> #284832 TESTED #1 [test-only] p9 xorg-server.git=1.20.8-alt9

https://drive.google.com/drive/folders/1LAdo5ik49hTJikWj0qYMBN23ldqaRmud
Comment 6 Ivan A. Melnikov 2021-09-08 14:08:18 MSK
(In reply to Ivan A. Melnikov from comment #5)
> 
> https://drive.google.com/drive/folders/1LAdo5ik49hTJikWj0qYMBN23ldqaRmud

^^ примеры треугольников на видео в папке.
Comment 7 Alexey Sheplyakov 2021-09-08 14:49:54 MSK
На другой плате (и с другой картой Radeon) артефактов пока не заметил.
НО не спешите радоваться!
При инициализации radeon и переключении видеовыходов (xrandr --output HDMI-1 --auto)
система зачастую перезагружается. В логах:

[   14.833379] [drm] radeon kernel modesetting enabled.
[   14.834180] [drm] initializing kernel modesetting (OLAND 0x1002:0x6617 0x1DA2:0xE263 0xC7).
[   15.076486] mitx2-bmc 0-0008: key change [17]
[   15.076509] mitx2-bmc 0-0008: PWROFF "irq" detected [17]
[   15.163665] ATOM BIOS: OLAND
[   15.163839] radeon 0001:01:00.0: VRAM: 4096M 0x0000000000000000 - 0x00000000FFFFFFFF (4096M used)
[   15.163845] radeon 0001:01:00.0: GTT: 2048M 0x0000000100000000 - 0x000000017FFFFFFF
[   15.163850] [drm] Detected VRAM RAM=4096M, BAR=256M
[   15.163854] [drm] RAM width 128bits DDR
[   15.164053] [TTM] Zone  kernel: Available graphics memory: 8043486 KiB
[   15.164058] [TTM] Zone   dma32: Available graphics memory: 2097152 KiB
[   15.164061] [TTM] Initializing pool allocator
[   15.164074] [TTM] Initializing DMA pool allocator
[   15.164125] [drm] radeon: 4096M of VRAM memory ready
[   15.164130] [drm] radeon: 2048M of GTT memory ready.
[   15.164167] [drm] Loading oland Microcode
[   15.178479] mitx2-bmc 0-0008: key change [0]

Кнопку я точно не нажимал. Кроме того, rmmod radeon && modprobe radeon -  снова сообщение "mitx2-bmc 0-0008: PWROFF "irq" detected [17]"

Предполагаю, что видеократа пишет по какому-то "левому" (физическому) адресу.
И так повезло, что именно в этот диапазон отображены регистры BMC.

Как-то стрёмно продолжать эксперименты. Кто знает, куда она ещё запишет, так и плату сжечь недолго.
Comment 8 Alexey Sheplyakov 2021-09-08 14:55:39 MSK
(In reply to Alexey Sheplyakov from comment #7)

> При инициализации radeon и переключении видеовыходов (xrandr --output HDMI-1
> --auto)
> система зачастую перезагружается. 

Круче. При перерисовке экрана, переключении между окнами - тот же эффект.
И ядро "думает", что нажата кнопка питания ("mitx2-bmc 0-0008: PWROFF "irq" detected")
Comment 9 Alexey Sheplyakov 2021-09-08 15:02:11 MSK
(In reply to Alexey Sheplyakov from comment #7)
> На другой плате (и с другой картой Radeon) артефактов пока не заметил.

0001:01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 6617 (rev c7) (prog-if 00 [VGA controller])
        Subsystem: Sapphire Technology Limited Device e263

она же (если в числовой форме)

0001:01:00.0 0300: 1002:6617 (rev c7) (prog-if 00 [VGA controller])
        Subsystem: 1da2:e263
Comment 10 Valery Inozemtsev 2021-09-08 15:27:21 MSK
так это уже к ядру и к радеоновским фирмварям
Comment 11 Alexey Sheplyakov 2021-09-08 15:34:42 MSK
(In reply to Valery Inozemtsev from comment #10)
> так это уже к ядру и к радеоновским фирмварям

Сомневаюсь. Это скорее к байкальему PCIe.
Comment 12 Alexey Sheplyakov 2021-09-08 15:40:27 MSK
(In reply to Alexey Sheplyakov from comment #11)
> (In reply to Valery Inozemtsev from comment #10)
> > так это уже к ядру и к радеоновским фирмварям
> 
> Сомневаюсь. Это скорее к байкальему PCIe.

Полагаю, что в обоих случаях проблема одна и та же - карта пыталась записать по одному адресу, а в произошла запись в другой адрес. Только в одном случае (артефакты) неправильный адрес всё-таки попал куда-то в память карты, а в другом (спонтанное выключение) - попал в то место, куда отображены регистры BMC.

Возможно, отображение адресов с (PCIe) шины к адресам процессора неправильно описано (в device tree). А возможно, само оборудование глючное.

Возможно отображение адресов с шины к CPU сломано. И в одном случае (артефакты "везёт"
Comment 13 Alexey Sheplyakov 2021-09-08 16:03:31 MSK
Проверил Xorg из задания #284832 на x86 компьютере [1].
Упорно делает вид, что работает


[1] Core i5-8400, материнская плата Gigabyte H310M S2H 2.0

00:02.0 0300: 8086:3e92 (prog-if 00 [VGA controller])
        DeviceName: Onboard - Video
        Subsystem: 1458:d000

00:02.0 VGA compatible controller: Intel Corporation CometLake-S GT2 [UHD Graphics 630] (prog-if 00 [VGA controller])
        DeviceName: Onboard - Video
        Subsystem: Gigabyte Technology Co., Ltd Device d000
Comment 14 Alexey Sheplyakov 2021-09-08 16:55:57 MSK
Проверил Xorg из задания #284832 на raspberry pi 4b (с 4ГБ памяти).
Запускается и упорно делает вид, что работает.
Аппаратное ускорение рендеринга доступно (судя по glxinfo и glmark2-es2).

$ glxinfo | grep Vendor
     Vendor: Broadcom (0x14e4)
Comment 15 jqt4 2021-09-08 17:31:47 MSK
Проверил Xorg из задания #284832 на raspberry pi 4b (с 8ГБ памяти), raspberry pi 3b V1.2, raspberry pi 400, на всех с ядрами 5.10.50-rpi-def 5.12.17-rpi-un.
Pаботает.
Аппаратное ускорение рендеринга доступно (судя glmark2-es2).
Comment 16 jqt4 2021-09-08 19:16:07 MSK
Проверил Xorg из задания #284832 на ноутбуке Dell Inspiron 15 7577, на 2-х мониторах - встроенном и подключенном к HDMI Type-C
Работает.
Comment 17 Valery Inozemtsev 2021-09-09 12:34:00 MSK
в таком случае эти комиты нужно вернуть в иксы в sisyphus/p10
Comment 18 Alexey Sheplyakov 2021-09-09 22:07:33 MSK
Протестировал на x86_64 виртуальных машинах с "видеокартами" qxl и virtio. Ядро 5.10.62-un-def-alt1.

Xorg запускается и упорно делает вид, что работает.
Comment 19 Repository Robot 2021-09-16 19:18:39 MSK
xorg-server-2:1.20.8-alt9 -> p9:

 Wed Sep 08 2021 Alexey Sheplyakov <asheplyakov@altlinux> 2:1.20.8-alt9
 - Fixed probing for device tree based PCIe buses (closes: #40868)