memcpy accessing GPU memory mappings using SSE instructions breaks in KVM
Submitted by max..@..ail.ru
Assigned to mes..@..op.org
Link to original bug (#111004)
Description
X crashes with any configuration on AMD RX590 except ESXi & Xen passthru (works in Windows 10). Replacing memcpy with custom impl partially solved the problem. Please see this thread on debian bugtracker: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=931066
Before (compiled radeonsi_dri from source): [ 131.909] (EE) 0: /usr/lib/xorg/Xorg (OsLookupColor+0x139) [0x55f57cf882c9] [ 131.909] (EE) 1: /lib/x86_64-linux-gnu/libpthread.so.0 (funlockfile+0x50) [0x7fbb6e85977f] [ 131.910] (EE) 2: /lib/x86_64-linux-gnu/libc.so.6 (memcpy+0x2d7) [0x7fbb6e7263b7] [ 131.910] (EE) 3: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (radeon_drm_winsys_create+0xc8c8e) [0x7fbb6ced280e] [ 131.910] (EE) 4: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (radeon_drm_winsys_create+0xa6220) [0x7fbb6ce8ced0] [ 131.911] (EE) 5: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (radeon_drm_winsys_create+0x96e35) [0x7fbb6ce6e865] [ 131.911] (EE) 6: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (radeon_drm_winsys_create+0x97b21) [0x7fbb6ce6fe51] [ 131.911] (EE) 7: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (amdgpu_winsys_create+0x3f1) [0x7fbb6ce40aa1] [ 131.911] (EE) unw_get_proc_name failed: no unwind info found [-10] [ 131.911] (EE) 8: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (?+0x0) [0x7fbb6cc22100] [ 131.912] (EE) 9: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (__driDriverGetExtensions_virtio_gpu+0x9d698) [0x7fbb6cd5d288] [ 131.912] (EE) 10: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (__driDriverGetExtensions_virtio_gpu+0x40ea) [0x7fbb6cc2a6da] [ 131.912] (EE) 11: /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so (__driDriverGetExtensions_virtio_gpu+0x12f8) [0x7fbb6cc24968] [ 131.912] (EE) 12: /usr/lib/x86_64-linux-gnu/libgbm.so.1 (gbm_surface_has_free_buffers+0x1b06) [0x7fbb6da271b6] [ 131.913] (EE) 13: /usr/lib/x86_64-linux-gnu/libgbm.so.1 (gbm_surface_has_free_buffers+0x1e83) [0x7fbb6da27833] [ 131.913] (EE) 14: /usr/lib/x86_64-linux-gnu/libgbm.so.1 (gbm_create_device+0x57) [0x7fbb6da235d7] [ 131.913] (EE) unw_get_proc_name failed: no unwind info found [-10] [ 131.913] (EE) 15: /usr/lib/xorg/modules/drivers/amdgpu_drv.so (?+0x0) [0x7fbb6da3d650] [ 131.913] (EE) 16: /usr/lib/xorg/Xorg (InitOutput+0x9c0) [0x55f57ce6a6a0] [ 131.913] (EE) 17: /usr/lib/xorg/Xorg (InitFonts+0x1cf) [0x55f57ce2d76f] [ 131.914] (EE) 18: /lib/x86_64-linux-gnu/libc.so.6 (__libc_start_main+0xeb) [0x7fbb6e6a809b] [ 131.914] (EE) 19: /usr/lib/xorg/Xorg (_start+0x2a) [0x55f57ce1767a] [ 131.914] (EE) [ 131.914] (EE) Illegal instruction at address 0x7fbb6e7262f7
After (replace memcpy in mesa libs in radeonsi with custom simple impl): X boots ok but error in amdgpu dmesg (hangs): [ 3473.934176] [drm:amdgpu_job_timedout [amdgpu]] ERROR ring gfx timeout, signaled seq=2, emitted seq=3 [ 3473.934234] [drm:amdgpu_job_timedout [amdgpu]] ERROR Process information: process Xorg pid 17702 thread Xorg:cs0 pid 17703 [ 3473.934239] amdgpu 0000:01:00.0: GPU reset begin! [ 3474.466516] amdgpu 0000:01:00.0: GPU pci config reset
Tested both on current & latest kernels, oibaf drivers don't help.
Thanks.
Version: git