[vfio-users] USB card prevents qemu finding its harddrive

Volker Rümelin vr_qemu at t-online.de
Sun Dec 29 17:47:51 UTC 2019


Hi Ede,

I can reproduce the problem with my old VL800 USB 3.0 pcie card, which I 
replaced years ago with a renesas card.

It seems the problem is a memory layout problem in seabios. The seabios 
config variable BUILD_MAX_HIGHTABLE is too small for this card.

If you don't want to boot your VM from your USB card and your keyboard 
isn't connected to this card, a workaround would be to use the 128k 
seabios rom. This version doesn't initialize XHCI interfaces. Just use 
-bios bios.bin on the qemu command line.

Another option is to build your own seabios version with a larger 
BUILD_MAX_HIGHTABLE value.

Here is a part of the seabios debug log if you want to file a bug report:
Machine UUID 8c0d584b-8330-4a8c-bae0-c83f8029d52f
init usb
phys_alloc zone=0x7ffbfe84, free=131072
phys_alloc zone=0x7ffbfe84 size=72 align=10 ret=7ffdffb0 (detail=0x7ffa9ce0)
XHCI init on dev 00:06.0: regs @ 0xfc053000, 5 ports, 16 slots, 32 byte 
contexts
XHCI extcap 0x1 @ 0xfc0530a0
XHCI protocol USB 2.00, 1 ports (offset 1), def 6
XHCI protocol USB 3.00, 4 ports (offset 2), def 0
phys_alloc zone=0x7ffbfe78, free=2146049248
phys_alloc zone=0x7ffbfe78 size=4096 align=1000 ret=7ffa7000 
(detail=0x7ffa9cb0)
/7ffa7000\ Start thread
|7ffa7000| phys_alloc zone=0x7ffbfe84, free=130992
|7ffa7000| phys_alloc zone=0x7ffbfe84 size=136 align=40 ret=7ffdff00 
(detail=0x7ffa9c80)
|7ffa7000| phys_alloc zone=0x7ffbfe84, free=130816
|7ffa7000| phys_alloc zone=0x7ffbfe84 size=16 align=40 ret=7ffdfec0 
(detail=0x7ffa9c50)
|7ffa7000| phys_alloc zone=0x7ffbfe84, free=130752
|7ffa7000| phys_alloc zone=0x7ffbfe84 size=288 align=100 ret=7ffdfd00 
(detail=0x7ffa9c20)
|7ffa7000| phys_alloc zone=0x7ffbfe84, free=130304
|7ffa7000| phys_alloc zone=0x7ffbfe84 size=288 align=100 ret=7ffdfb00 
(detail=0x7ffa9bf0)
|7ffa7000| configure_xhci: resetting
...
|7ffa7000| configure_xhci: setup 31 scratch pad buffers
|7ffa7000| phys_alloc zone=0x7ffbfe84, free=129792
|7ffa7000| phys_alloc zone=0x7ffbfe84 size=248 align=40 ret=7ffdfa00 
(detail=0x7ffa9b50)
|7ffa7000| phys_alloc zone=0x7ffbfe84, free=129536
|7ffa7000| phys_alloc zone=0x7ffbfe84 size=126976 align=1000 
ret=7ffc0000 (detail=0x7ffa9b20)

The 31 scratch pad buffers for the VL800 USB card need 126976 bytes of 
262144 (BUILD_MAX_HIGHTABLE) bytes. My renesas card only uses 4 scratch 
pad buffers.

init virtio-blk
phys_alloc zone=0x7ffbfe78, free=2146049248
phys_alloc zone=0x7ffbfe78 size=4096 align=1000 ret=7ffa4000 
(detail=0x7ffa99b0)
/7ffa4000\ Start thread
|7ffa4000| found virtio-blk at 00:04.0
|7ffa4000| phys_alloc zone=0x7ffbfe88, free=62640
|7ffa4000| phys_alloc zone=0x7ffbfe88 size=95 align=10 ret=e8c60 
(detail=0x7ffa9980)
|7ffa4000| pci dev 00:04.0 virtio cap at 0x84 type 5 [pci cfg access]
|7ffa4000| pci dev 00:04.0 virtio cap at 0x70 type 2 bar 4 at 0xfebfc000 
off +0x3000 [mmio]
|7ffa4000| pci dev 00:04.0 virtio cap at 0x60 type 4 bar 4 at 0xfebfc000 
off +0x2000 [mmio]
|7ffa4000| pci dev 00:04.0 virtio cap at 0x50 type 3 bar 4 at 0xfebfc000 
off +0x1000 [mmio]
|7ffa4000| pci dev 00:04.0 virtio cap at 0x40 type 1 bar 4 at 0xfebfc000 
off +0x0000 [mmio]
|7ffa4000| pci dev 00:04.0 using modern (1.0) virtio mode
|7ffa4000| phys_alloc zone=0x7ffbfe84, free=2560
|7ffa4000| WARNING - Unable to allocate resource at vp_find_vq:301!
|7ffa4000| fail to find vq for virtio-blk 00:04.0
|7ffa4000| phys_free e8c60 (detail=0x7ffa9980)
\7ffa4000/ End thread

Seabios ran out of memory here.

With best regards,
Volker





More information about the vfio-users mailing list