[PATCH v4 2/5] drm/virtio: Add a helper to map and note the dma addrs and lengths

Dmitry Osipenko dmitry.osipenko at collabora.com
Wed Nov 27 11:49:40 UTC 2024


On 11/27/24 09:20, Kasireddy, Vivek wrote:
...
>> Recap of the DG2 problem:
>>
>> The virtio-gpu PCIe accesses in guest are becoming rejected as soon as Intel
>> driver (either i915 or Xe) is probed. My theory is that Intel driver causes PCIe
>> config change that indirectly breaks virtio-gpu PCIe. This problem isn't
>> observed by swapping DG2 card with AMD card. AMD setup works perfectly
>> fine on the same machine with GPU card plugged into the same PCIe slot as
>> DG2 was on host.
>>
>> $ lspci | grep DG2
>> 0c:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A750] (rev 08)
>> 0d:00.0 Audio device: Intel Corporation DG2 Audio Controller
> Looks like the GPU and the audio devices are on different buses (I see the same
> in my setup as well) but you are making them appear as different functions of
> the same device in Guest VM:
> 01:00.0 VGA compatible controller [0300]: Intel Corporation DG2 [Intel Graphics] [8086:56bd] (rev 05) (prog-if 00 [VGA controller])
>         Subsystem: Intel Corporation Device [8086:1211]
>         Physical Slot: 0
>         Kernel driver in use: i915
>         Kernel modules: i915, xe
> 01:00.1 Audio device [0403]: Intel Corporation DG2 Audio Controller [8086:4f92]
>         Subsystem: Intel Corporation Device [8086:1211]
>         Physical Slot: 0
> 
> I am not sure if this a valid config or not. Regardless, the presence of i915 preventing
> virtio-gpu from probing correctly in this situation is indeed a problem that I am able
> to see in my setup as well (with your Qemu parameters, especially the pcie-port ones).
> I'll definitely take a look at this issue next week. 

Great, thank you

>> qemu-system-x86_64 \
>> -kernel linux-guest/arch/x86_64/boot/bzImage \
>> -append "console=ttyS0 nokaslr root=/dev/sda init=/lib/systemd/systemd
>> vt.global_cursor_default=0 log_buf_len=16M" \
>> -netdev user,id=u1,hostfwd=tcp::10022-:22 \
>> -device virtio-net-pci,netdev=u1 \
>> -serial mon:stdio -m 24G \
>> --enable-kvm \
>> -cpu host,host-phys-bits=on,host-phys-bits-limit=39 \
>> -device virtio-vga,max_outputs=1,xres=1920,yres=1080,blob=true \
>> -device virtio-tablet-pci \
>> -device virtio-balloon \
>> -device virtio-keyboard-pci \
>> -display gtk,gl=on \
>> -smp 16 \
>> -machine q35,accel=kvm,kernel-irqchip=split,memory-backend=mem1 \
>> -object memory-backend-memfd,id=mem1,size=24G \
>> -d guest_errors \
>> -drive file=disk.img,format=raw \
>> -device pcie-root-
>> port,id=pcie.1,bus=pcie.0,addr=1c.0,slot=1,chassis=1,multifunction=on \
>> -device vfio-pci,host=0c:00.0,bus=pcie.1,addr=00.0,x-
>> vga=on,multifunction=on \
>> -device vfio-pci,host=0d:00.0,bus=pcie.1,addr=00.1
> Passthrough'ng the devices directly instead of creating a new pcie root port
> enables virtio-gpu to work correctly in my setup. That is, having just
> -device vfio-pci,host=0c:00.0,x-vga=on -device vfio-pci,host=0d:00.0
> 
> instead of the last few lines in your Qemu parameters list makes virtio-gpu
> to work as expected. Could you please try it out and let me know if it works?

Indeed, that worked! With AMD card all GPU devices are on the same bus
and I was re-using same QEMU command without noticing it. Good catch :)

-- 
Best regards,
Dmitry


More information about the dri-devel mailing list