[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4] xen: fix build without pci passthrough
On 04/06/20 15:30, Anthony PERARD wrote: > - fix build when Xen headers aren't available. > By building stubs/xen-pt.c only when CONFIG_XEN=y > (The alternative would be to move the prototypes used by the stub into > xen.h, which doesn't depends on xen headers.) Good catch. I think we can also drop the whole hw/xen/ directory when CONFIG_XEN=n, and move stubs/xen-pt.c there. I'll send a v5 myself. Paolo > Changes in v3: > - reworked to use stubs instead of #ifdef CONFIG_XEN_PCI_PASSTHROUGH > CONFIG_XEN_PCI_PASSTHROUGH isn't available in xen-common.c > > moving CONFIG_XEN_PCI_PASSTHROUGH to be in config_host_mak isn't > really possible, or at least I didn't managed to make that work. > > hw/i386/pc_piix.c | 2 +- > hw/xen/xen-common.c | 4 ++-- > hw/xen/xen_pt.c | 12 +++++++++++- > hw/xen/xen_pt.h | 6 ++++-- > stubs/Makefile.objs | 1 + > stubs/xen-pt.c | 22 ++++++++++++++++++++++ > 6 files changed, 41 insertions(+), 6 deletions(-) > create mode 100644 stubs/xen-pt.c > > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > index f66e1d73ce0b..347fb8c6c807 100644 > --- a/hw/i386/pc_piix.c > +++ b/hw/i386/pc_piix.c > @@ -375,7 +375,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/xen-common.c b/hw/xen/xen-common.c > index 70564cc952d5..dd2c22cc4c0b 100644 > --- a/hw/xen/xen-common.c > +++ b/hw/xen/xen-common.c > @@ -129,12 +129,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/xen/xen_pt.c b/hw/xen/xen_pt.c > index 81d5ad8da7f0..ab84443d5ec8 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 179775db7b22..6e9cec95f3b7 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/stubs/Makefile.objs b/stubs/Makefile.objs > index 6a9e3135e8f9..e0427158132f 100644 > --- a/stubs/Makefile.objs > +++ b/stubs/Makefile.objs > @@ -40,6 +40,7 @@ stub-obj-y += target-get-monitor-def.o > stub-obj-y += vmgenid.o > stub-obj-y += xen-common.o > stub-obj-y += xen-hvm.o > +stub-obj-$(CONFIG_XEN) += xen-pt.o > stub-obj-y += pci-host-piix.o > stub-obj-y += ram-block.o > stub-obj-y += ramfb.o > diff --git a/stubs/xen-pt.c b/stubs/xen-pt.c > new file mode 100644 > index 000000000000..2d8cac8d54b9 > --- /dev/null > +++ b/stubs/xen-pt.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"); > + } > +} >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |