qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* Re: [Qemu-devel] [PATCH v2 2/2] hw/vfio/display: add ramfb support
       [not found] ` <20180917061729.22407-3-kraxel@redhat.com>
@ 2018-10-11 21:19   ` Alex Williamson
  2018-10-12  8:43     ` Gerd Hoffmann
  0 siblings, 1 reply; 3+ messages in thread
From: Alex Williamson @ 2018-10-11 21:19 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel, Paolo Bonzini

On Mon, 17 Sep 2018 08:17:29 +0200
Gerd Hoffmann <kraxel@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 <kraxel@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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/2] hw/vfio/display: add ramfb support
  2018-10-11 21:19   ` [Qemu-devel] [PATCH v2 2/2] hw/vfio/display: add ramfb support Alex Williamson
@ 2018-10-12  8:43     ` Gerd Hoffmann
  2018-10-12 13:05       ` Alex Williamson
  0 siblings, 1 reply; 3+ messages in thread
From: Gerd Hoffmann @ 2018-10-12  8:43 UTC (permalink / raw)
  To: Alex Williamson; +Cc: qemu-devel, Paolo Bonzini

  Hi,

> >      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.

I've grouped it with the display option because it is display related
too, but if you prefer to group the bools instead this is fine with me.

> 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,

Yes, seabios (and vgabios) bundled with 3.0 (and master branch) should work fine.

There is a standalone device you can use for testing (-vga none -device
ramfb), to see whenever the firmware side of things works correctly.

OVMF has ramfb support too btw (merged a few months back).

> -device vfio-pci-nohotplug,id=hostdev0,sysfsdev=...,display=on,bus=pci.0,addr=0x9 \

>     <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>

Hmm, that actually uses vfio-pci-nohotplug?
But when ramfb=on doesn't throw an error, then yes, appearently.

>   <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>

I have this (additionally):

    <qemu:arg value='-set'/>
    <qemu:arg value='device.hostdev0.driver=vfio-pci-nohotplug'/>

> 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?

Yes, you should see both.

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/2] hw/vfio/display: add ramfb support
  2018-10-12  8:43     ` Gerd Hoffmann
@ 2018-10-12 13:05       ` Alex Williamson
  0 siblings, 0 replies; 3+ messages in thread
From: Alex Williamson @ 2018-10-12 13:05 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel, Paolo Bonzini

On Fri, 12 Oct 2018 10:43:02 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

>   Hi,
> 
> > >      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.  
> 
> I've grouped it with the display option because it is display related
> too, but if you prefer to group the bools instead this is fine with me.

Not so much grouping the bools as simply making the struct a bit more
space efficient by not adding obvious alignment holes.

> > 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,  
> 
> Yes, seabios (and vgabios) bundled with 3.0 (and master branch) should work fine.
> 
> There is a standalone device you can use for testing (-vga none -device
> ramfb), to see whenever the firmware side of things works correctly.
> 
> OVMF has ramfb support too btw (merged a few months back).

Yes, I'm also trying with an OVMF build from your firmware repo.

> > -device vfio-pci-nohotplug,id=hostdev0,sysfsdev=...,display=on,bus=pci.0,addr=0x9 \  
> 
> >     <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>  
> 
> Hmm, that actually uses vfio-pci-nohotplug?
> But when ramfb=on doesn't throw an error, then yes, appearently.

That's where my wrapper script was replacing
s/vfio-pci/vfio-pci-nohotplug/, I didn't know about the driver override
you list below, that's much cleaner.
 
> >   <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>  
> 
> I have this (additionally):
> 
>     <qemu:arg value='-set'/>
>     <qemu:arg value='device.hostdev0.driver=vfio-pci-nohotplug'/>
> 
> > 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?  
> 
> Yes, you should see both.

Ok, I'll update my xml and also try the raw ramfb device and see if I
can make it work.  Thanks,

Alex

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-10-12 13:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20180917061729.22407-1-kraxel@redhat.com>
     [not found] ` <20180917061729.22407-3-kraxel@redhat.com>
2018-10-11 21:19   ` [Qemu-devel] [PATCH v2 2/2] hw/vfio/display: add ramfb support Alex Williamson
2018-10-12  8:43     ` Gerd Hoffmann
2018-10-12 13:05       ` Alex Williamson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).