RE: [PATCH v2 15/21] hw/vfio/pci: Check CONFIG_IOMMUFD at runtime using iommufd_builtin()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Philippe,

>-----Original Message-----
>From: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
>Subject: [PATCH v2 15/21] hw/vfio/pci: Check CONFIG_IOMMUFD at runtime
>using iommufd_builtin()
>
>Convert the compile time check on the CONFIG_IOMMUFD definition
>by a runtime one by calling iommufd_builtin().
>
>Reviewed-by: Pierrick Bouvier <pierrick.bouvier@xxxxxxxxxx>
>Reviewed-by: Richard Henderson <richard.henderson@xxxxxxxxxx>
>Signed-off-by: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
>---
> hw/vfio/pci.c | 38 ++++++++++++++++++--------------------
> 1 file changed, 18 insertions(+), 20 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);

device_class_set_props() is called twice. Won't it break qdev_print_props() and qdev_prop_walk()?

Thanks
Zhenzhong





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux