On Mon, 17 Sep 2018 08:17:29 +0200 Gerd Hoffmann <kra...@redhat.com> wrote:
> So we have a boot display when using a vgpu as primary display. > > ramfb depends on a fw_cfg file. fw_cfg files can not be added and > removed at runtime, therefore a ramfb-enabled vfio device can't be > hotplugged. > > Add a nohotplug variant of the vfio-pci device (as child class). Add > the ramfb property to the nohotplug variant only. So to enable the vgpu > display with boot support use this: > > -device vfio-pci-nohotplug,display=on,ramfb=on,sysfsdev=... > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > hw/vfio/pci.h | 1 + > include/hw/vfio/vfio-common.h | 2 ++ > hw/vfio/display.c | 12 ++++++++++++ > hw/vfio/pci.c | 25 +++++++++++++++++++++++++ > 4 files changed, 40 insertions(+) > > diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h > index 52b065421a..904e286586 100644 > --- a/hw/vfio/pci.h > +++ b/hw/vfio/pci.h > @@ -149,6 +149,7 @@ typedef struct VFIOPCIDevice { > #define VFIO_FEATURE_ENABLE_IGD_OPREGION \ > (1 << VFIO_FEATURE_ENABLE_IGD_OPREGION_BIT) > OnOffAuto display; > + bool enable_ramfb; > int32_t bootindex; > uint32_t igd_gms; > OffAutoPCIBAR msix_relo; Hi Gerd, One tiny nit here, we can move this new bool down in the struct with the rest of the bools for better alignment. I can change that on commit. However, I'm not having luck getting ramfb to work; the display is only getting initialized once the guest driver loads. This is a 440FX/SeaBIOS VM, it looks like you've already updated bios.bin in qemu.git with ramfb support, but I also see the same results with bios.bin from your seabios.git package. I'm using libvirt to launch the guest with a wrapper around qemu-system-x86_64 to replace vfio-pci with vfio-pci-nohotplug, resulting in a command line including: -bios /usr/share/seabios.git/bios.bin \ -spice port=0,disable-ticketing,gl=on,rendernode=/dev/dri/by-path/pci-0000:00:02.0-render,seamless-migration=on \ -device vfio-pci-nohotplug,id=hostdev0,sysfsdev=...,display=on,bus=pci.0,addr=0x9 \ -set device.hostdev0.x-igd-opregion=on \ -set device.hostdev0.ramfb=on \ Relevant XML blobs: <graphics type='spice'> <listen type='none'/> <gl enable='yes' rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/> </graphics> <video> <model type='none'/> </video> <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'> <source> <address uuid='cd4fa69f-c24c-476f-a61d-abca705e2a13'/> </source> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </hostdev> ... <qemu:commandline> <qemu:arg value='-set'/> <qemu:arg value='device.hostdev0.x-igd-opregion=on'/> <qemu:arg value='-set'/> <qemu:arg value='device.hostdev0.ramfb=on'/> </qemu:commandline> This is a Windows 10 VM, but as I understand this ramfb support, I think I'm still supposed to see SeaBIOS boot messages and perhaps even the Windows boot animation before the guest driver takes over, is that correct? What am I missing? Thanks, Alex