[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v5] xen: fix build without pci passthrough
> -----Original Message----- > From: Xen-devel <xen-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of Anthony > PERARD > Sent: 02 July 2020 15:26 > To: Paul Durrant <paul.durrant@xxxxxxxxxx> Emails to this address are probably going to /dev/null by now :-) > Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx; Roger Pau Monné <roger.pau@xxxxxxxxxx> > Subject: Re: [PATCH v5] xen: fix build without pci passthrough > > On Thu, Jun 04, 2020 at 02:31:41PM -0400, Paolo Bonzini wrote: > > From: Anthony PERARD <anthony.perard@xxxxxxxxxx> > > > > Xen PCI passthrough support may not be available and thus the global > > variable "has_igd_gfx_passthru" might be compiled out. Common code > > should not access it in that case. > > > > Unfortunately, we can't use CONFIG_XEN_PCI_PASSTHROUGH directly in > > xen-common.c so this patch instead move access to the > > has_igd_gfx_passthru variable via function and those functions are > > also implemented as stubs. The stubs will be used when QEMU is built > > without passthrough support. > > > > Now, when one will want to enable igd-passthru via the -machine > > property, they will get an error message if QEMU is built without > > passthrough support. > > > > Fixes: 46472d82322d0 ('xen: convert "-machine igd-passthru" to an > > accelerator property') > > Reported-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> > > Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> > > Message-Id: <20200603160442.3151170-1-anthony.perard@xxxxxxxxxx> > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > > Hi Paul, > > Can I backport this patch to qemu-xen-4.14? It allows to build qemu > without pci passthrough support which seems to be important for FreeBSD > as PT with QEMU is only available on Linux. > > (There's a fix to the patch that I would backport as well. "xen: > Actually fix build without passthrough") > > Thanks. I have no objection to make this fix for 4.14. Cheers, Paul > > > --- > > accel/xen/xen-all.c | 4 ++-- > > hw/Makefile.objs | 2 +- > > hw/i386/pc_piix.c | 2 +- > > hw/xen/Makefile.objs | 3 ++- > > hw/xen/xen_pt.c | 12 +++++++++++- > > hw/xen/xen_pt.h | 6 ++++-- > > hw/xen/xen_pt_stub.c | 22 ++++++++++++++++++++++ > > 7 files changed, 43 insertions(+), 8 deletions(-) > > create mode 100644 hw/xen/xen_pt_stub.c > > > > diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c > > index f3edc65ec9..0c24d4b191 100644 > > --- a/accel/xen/xen-all.c > > +++ b/accel/xen/xen-all.c > > @@ -137,12 +137,12 @@ static void xen_change_state_handler(void *opaque, > > int running, > > > > static bool xen_get_igd_gfx_passthru(Object *obj, Error **errp) > > { > > - return has_igd_gfx_passthru; > > + return xen_igd_gfx_pt_enabled(); > > } > > > > static void xen_set_igd_gfx_passthru(Object *obj, bool value, Error **errp) > > { > > - has_igd_gfx_passthru = value; > > + xen_igd_gfx_pt_set(value, errp); > > } > > > > static void xen_setup_post(MachineState *ms, AccelState *accel) > > diff --git a/hw/Makefile.objs b/hw/Makefile.objs > > index 660e2b4373..4cbe5e4e57 100644 > > --- a/hw/Makefile.objs > > +++ b/hw/Makefile.objs > > @@ -35,7 +35,7 @@ devices-dirs-y += usb/ > > devices-dirs-$(CONFIG_VFIO) += vfio/ > > devices-dirs-y += virtio/ > > devices-dirs-y += watchdog/ > > -devices-dirs-y += xen/ > > +devices-dirs-$(CONFIG_XEN) += xen/ > > devices-dirs-$(CONFIG_MEM_DEVICE) += mem/ > > devices-dirs-$(CONFIG_NUBUS) += nubus/ > > devices-dirs-y += semihosting/ > > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > > index eea964e72b..054d3aa9f7 100644 > > --- a/hw/i386/pc_piix.c > > +++ b/hw/i386/pc_piix.c > > @@ -377,7 +377,7 @@ static void pc_init_isa(MachineState *machine) > > #ifdef CONFIG_XEN > > static void pc_xen_hvm_init_pci(MachineState *machine) > > { > > - const char *pci_type = has_igd_gfx_passthru ? > > + const char *pci_type = xen_igd_gfx_pt_enabled() ? > > TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE : > > TYPE_I440FX_PCI_DEVICE; > > > > pc_init1(machine, > > diff --git a/hw/xen/Makefile.objs b/hw/xen/Makefile.objs > > index 340b2c5096..3fc715e595 100644 > > --- a/hw/xen/Makefile.objs > > +++ b/hw/xen/Makefile.objs > > @@ -1,6 +1,7 @@ > > # xen backend driver support > > -common-obj-$(CONFIG_XEN) += xen-legacy-backend.o xen_devconfig.o > > xen_pvdev.o xen-bus.o xen-bus- > helper.o xen-backend.o > > +common-obj-y += xen-legacy-backend.o xen_devconfig.o xen_pvdev.o xen-bus.o > > xen-bus-helper.o xen- > backend.o > > > > obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen-host-pci-device.o > > obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen_pt.o xen_pt_config_init.o > > xen_pt_graphics.o xen_pt_msi.o > > obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen_pt_load_rom.o > > +obj-$(call $(lnot, $(CONFIG_XEN_PCI_PASSTHROUGH))) += xen_pt_stub.o > > diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c > > index 81d5ad8da7..ab84443d5e 100644 > > --- a/hw/xen/xen_pt.c > > +++ b/hw/xen/xen_pt.c > > @@ -65,7 +65,17 @@ > > #include "qemu/range.h" > > #include "exec/address-spaces.h" > > > > -bool has_igd_gfx_passthru; > > +static bool has_igd_gfx_passthru; > > + > > +bool xen_igd_gfx_pt_enabled(void) > > +{ > > + return has_igd_gfx_passthru; > > +} > > + > > +void xen_igd_gfx_pt_set(bool value, Error **errp) > > +{ > > + has_igd_gfx_passthru = value; > > +} > > > > #define XEN_PT_NR_IRQS (256) > > static uint8_t xen_pt_mapped_machine_irq[XEN_PT_NR_IRQS] = {0}; > > diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h > > index 179775db7b..6e9cec95f3 100644 > > --- a/hw/xen/xen_pt.h > > +++ b/hw/xen/xen_pt.h > > @@ -5,6 +5,9 @@ > > #include "hw/pci/pci.h" > > #include "xen-host-pci-device.h" > > > > +bool xen_igd_gfx_pt_enabled(void); > > +void xen_igd_gfx_pt_set(bool value, Error **errp); > > + > > void xen_pt_log(const PCIDevice *d, const char *f, ...) GCC_FMT_ATTR(2, 3); > > > > #define XEN_PT_ERR(d, _f, _a...) xen_pt_log(d, "%s: Error: "_f, __func__, > > ##_a) > > @@ -322,10 +325,9 @@ extern void *pci_assign_dev_load_option_rom(PCIDevice > > *dev, > > unsigned int domain, > > unsigned int bus, unsigned int > > slot, > > unsigned int function); > > -extern bool has_igd_gfx_passthru; > > static inline bool is_igd_vga_passthrough(XenHostPCIDevice *dev) > > { > > - return (has_igd_gfx_passthru > > + return (xen_igd_gfx_pt_enabled() > > && ((dev->class_code >> 0x8) == PCI_CLASS_DISPLAY_VGA)); > > } > > int xen_pt_register_vga_regions(XenHostPCIDevice *dev); > > diff --git a/hw/xen/xen_pt_stub.c b/hw/xen/xen_pt_stub.c > > new file mode 100644 > > index 0000000000..2d8cac8d54 > > --- /dev/null > > +++ b/hw/xen/xen_pt_stub.c > > @@ -0,0 +1,22 @@ > > +/* > > + * Copyright (C) 2020 Citrix Systems UK Ltd. > > + * > > + * This work is licensed under the terms of the GNU GPL, version 2 or > > later. > > + * See the COPYING file in the top-level directory. > > + */ > > + > > +#include "qemu/osdep.h" > > +#include "hw/xen/xen_pt.h" > > +#include "qapi/error.h" > > + > > +bool xen_igd_gfx_pt_enabled(void) > > +{ > > + return false; > > +} > > + > > +void xen_igd_gfx_pt_set(bool value, Error **errp) > > +{ > > + if (value) { > > + error_setg(errp, "Xen PCI passthrough support not built in"); > > + } > > +} > > -- > > 2.26.2 > > > > > > -- > Anthony PERARD
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |