Message ID | 20250307180337.14811-12-philmd@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | hw/vfio: Build various objects once | expand |
On 3/7/25 10:03, Philippe Mathieu-Daudé wrote: > Convert the compile time check on the CONFIG_IOMMUFD definition > by a runtime one by calling iommufd_builtin(). > > Since the file doesn't use any target-specific knowledge anymore, > move it to system_ss[] to build it once. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > hw/vfio/pci.c | 38 ++++++++++++++++++-------------------- > hw/vfio/meson.build | 2 +- > 2 files changed, 19 insertions(+), 21 deletions(-) > > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c > index 9872884ff8a..e83252766d1 100644 > --- a/hw/vfio/pci.c > +++ b/hw/vfio/pci.c > @@ -19,7 +19,6 @@ > */ > > #include "qemu/osdep.h" > -#include CONFIG_DEVICES /* CONFIG_IOMMUFD */ > #include <linux/vfio.h> > #include <sys/ioctl.h> > > @@ -2973,11 +2972,10 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) > if (!(~vdev->host.domain || ~vdev->host.bus || > ~vdev->host.slot || ~vdev->host.function)) { > error_setg(errp, "No provided host device"); > - error_append_hint(errp, "Use -device vfio-pci,host=DDDD:BB:DD.F " > -#ifdef CONFIG_IOMMUFD > - "or -device vfio-pci,fd=DEVICE_FD " > -#endif > - "or -device vfio-pci,sysfsdev=PATH_TO_DEVICE\n"); > + error_append_hint(errp, "Use -device vfio-pci,host=DDDD:BB:DD.F %s" > + "or -device vfio-pci,sysfsdev=PATH_TO_DEVICE\n", > + iommufd_builtin() > + ? "or -device vfio-pci,fd=DEVICE_FD " : ""); > return; > } > vbasedev->sysfsdev = > @@ -3412,19 +3410,18 @@ static const Property vfio_pci_dev_properties[] = { > qdev_prop_nv_gpudirect_clique, uint8_t), > DEFINE_PROP_OFF_AUTO_PCIBAR("x-msix-relocation", VFIOPCIDevice, msix_relo, > OFF_AUTO_PCIBAR_OFF), > -#ifdef CONFIG_IOMMUFD > - DEFINE_PROP_LINK("iommufd", VFIOPCIDevice, vbasedev.iommufd, > - TYPE_IOMMUFD_BACKEND, IOMMUFDBackend *), > -#endif > DEFINE_PROP_BOOL("skip-vsc-check", VFIOPCIDevice, skip_vsc_check, true), > }; > > -#ifdef CONFIG_IOMMUFD > +static const Property vfio_pci_dev_iommufd_properties[] = { > + DEFINE_PROP_LINK("iommufd", VFIOPCIDevice, vbasedev.iommufd, > + TYPE_IOMMUFD_BACKEND, IOMMUFDBackend *), > +}; > + > static void vfio_pci_set_fd(Object *obj, const char *str, Error **errp) > { > vfio_device_set_fd(&VFIO_PCI(obj)->vbasedev, str, errp); > } > -#endif > > static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) > { > @@ -3433,9 +3430,10 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) > > device_class_set_legacy_reset(dc, vfio_pci_reset); > device_class_set_props(dc, vfio_pci_dev_properties); > -#ifdef CONFIG_IOMMUFD > - object_class_property_add_str(klass, "fd", NULL, vfio_pci_set_fd); > -#endif > + if (iommufd_builtin()) { > + device_class_set_props(dc, vfio_pci_dev_iommufd_properties); > + object_class_property_add_str(klass, "fd", NULL, vfio_pci_set_fd); > + } > dc->desc = "VFIO-based PCI device assignment"; > set_bit(DEVICE_CATEGORY_MISC, dc->categories); > pdc->realize = vfio_realize; > @@ -3540,11 +3538,11 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) > "vf-token", > "Specify UUID VF token. Required for VF when PF is owned " > "by another VFIO driver"); > -#ifdef CONFIG_IOMMUFD > - object_class_property_set_description(klass, /* 9.0 */ > - "iommufd", > - "Set host IOMMUFD backend device"); > -#endif > + if (iommufd_builtin()) { > + object_class_property_set_description(klass, /* 9.0 */ > + "iommufd", > + "Set host IOMMUFD backend device"); > + } > object_class_property_set_description(klass, /* 9.1 */ > "x-device-dirty-page-tracking", > "Disable device dirty page tracking and use " > diff --git a/hw/vfio/meson.build b/hw/vfio/meson.build > index 96e342aa8cb..9a004992c11 100644 > --- a/hw/vfio/meson.build > +++ b/hw/vfio/meson.build > @@ -6,7 +6,6 @@ vfio_ss.add(files( > vfio_ss.add(when: 'CONFIG_PSERIES', if_true: files('spapr.c')) > vfio_ss.add(when: 'CONFIG_VFIO_PCI', if_true: files( > 'pci-quirks.c', > - 'pci.c', > )) > vfio_ss.add(when: 'CONFIG_VFIO_CCW', if_true: files('ccw.c')) > vfio_ss.add(when: 'CONFIG_VFIO_PLATFORM', if_true: files('platform.c')) > @@ -29,4 +28,5 @@ system_ss.add(when: ['CONFIG_VFIO', 'CONFIG_IOMMUFD'], if_true: files( > )) > system_ss.add(when: 'CONFIG_VFIO_PCI', if_true: files( > 'display.c', > + 'pci.c', > )) Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
On 3/7/25 10:03, Philippe Mathieu-Daudé wrote: > Convert the compile time check on the CONFIG_IOMMUFD definition > by a runtime one by calling iommufd_builtin(). > > Since the file doesn't use any target-specific knowledge anymore, > move it to system_ss[] to build it once. > > Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org> > --- > hw/vfio/pci.c | 38 ++++++++++++++++++-------------------- > hw/vfio/meson.build | 2 +- > 2 files changed, 19 insertions(+), 21 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 9872884ff8a..e83252766d1 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -19,7 +19,6 @@ */ #include "qemu/osdep.h" -#include CONFIG_DEVICES /* CONFIG_IOMMUFD */ #include <linux/vfio.h> #include <sys/ioctl.h> @@ -2973,11 +2972,10 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) if (!(~vdev->host.domain || ~vdev->host.bus || ~vdev->host.slot || ~vdev->host.function)) { error_setg(errp, "No provided host device"); - error_append_hint(errp, "Use -device vfio-pci,host=DDDD:BB:DD.F " -#ifdef CONFIG_IOMMUFD - "or -device vfio-pci,fd=DEVICE_FD " -#endif - "or -device vfio-pci,sysfsdev=PATH_TO_DEVICE\n"); + error_append_hint(errp, "Use -device vfio-pci,host=DDDD:BB:DD.F %s" + "or -device vfio-pci,sysfsdev=PATH_TO_DEVICE\n", + iommufd_builtin() + ? "or -device vfio-pci,fd=DEVICE_FD " : ""); return; } vbasedev->sysfsdev = @@ -3412,19 +3410,18 @@ static const Property vfio_pci_dev_properties[] = { qdev_prop_nv_gpudirect_clique, uint8_t), DEFINE_PROP_OFF_AUTO_PCIBAR("x-msix-relocation", VFIOPCIDevice, msix_relo, OFF_AUTO_PCIBAR_OFF), -#ifdef CONFIG_IOMMUFD - DEFINE_PROP_LINK("iommufd", VFIOPCIDevice, vbasedev.iommufd, - TYPE_IOMMUFD_BACKEND, IOMMUFDBackend *), -#endif DEFINE_PROP_BOOL("skip-vsc-check", VFIOPCIDevice, skip_vsc_check, true), }; -#ifdef CONFIG_IOMMUFD +static const Property vfio_pci_dev_iommufd_properties[] = { + DEFINE_PROP_LINK("iommufd", VFIOPCIDevice, vbasedev.iommufd, + TYPE_IOMMUFD_BACKEND, IOMMUFDBackend *), +}; + static void vfio_pci_set_fd(Object *obj, const char *str, Error **errp) { vfio_device_set_fd(&VFIO_PCI(obj)->vbasedev, str, errp); } -#endif static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) { @@ -3433,9 +3430,10 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) device_class_set_legacy_reset(dc, vfio_pci_reset); device_class_set_props(dc, vfio_pci_dev_properties); -#ifdef CONFIG_IOMMUFD - object_class_property_add_str(klass, "fd", NULL, vfio_pci_set_fd); -#endif + if (iommufd_builtin()) { + device_class_set_props(dc, vfio_pci_dev_iommufd_properties); + object_class_property_add_str(klass, "fd", NULL, vfio_pci_set_fd); + } dc->desc = "VFIO-based PCI device assignment"; set_bit(DEVICE_CATEGORY_MISC, dc->categories); pdc->realize = vfio_realize; @@ -3540,11 +3538,11 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) "vf-token", "Specify UUID VF token. Required for VF when PF is owned " "by another VFIO driver"); -#ifdef CONFIG_IOMMUFD - object_class_property_set_description(klass, /* 9.0 */ - "iommufd", - "Set host IOMMUFD backend device"); -#endif + if (iommufd_builtin()) { + object_class_property_set_description(klass, /* 9.0 */ + "iommufd", + "Set host IOMMUFD backend device"); + } object_class_property_set_description(klass, /* 9.1 */ "x-device-dirty-page-tracking", "Disable device dirty page tracking and use " diff --git a/hw/vfio/meson.build b/hw/vfio/meson.build index 96e342aa8cb..9a004992c11 100644 --- a/hw/vfio/meson.build +++ b/hw/vfio/meson.build @@ -6,7 +6,6 @@ vfio_ss.add(files( vfio_ss.add(when: 'CONFIG_PSERIES', if_true: files('spapr.c')) vfio_ss.add(when: 'CONFIG_VFIO_PCI', if_true: files( 'pci-quirks.c', - 'pci.c', )) vfio_ss.add(when: 'CONFIG_VFIO_CCW', if_true: files('ccw.c')) vfio_ss.add(when: 'CONFIG_VFIO_PLATFORM', if_true: files('platform.c')) @@ -29,4 +28,5 @@ system_ss.add(when: ['CONFIG_VFIO', 'CONFIG_IOMMUFD'], if_true: files( )) system_ss.add(when: 'CONFIG_VFIO_PCI', if_true: files( 'display.c', + 'pci.c', ))
Convert the compile time check on the CONFIG_IOMMUFD definition by a runtime one by calling iommufd_builtin(). Since the file doesn't use any target-specific knowledge anymore, move it to system_ss[] to build it once. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/vfio/pci.c | 38 ++++++++++++++++++-------------------- hw/vfio/meson.build | 2 +- 2 files changed, 19 insertions(+), 21 deletions(-)