vfio: Fold vfio_virqfd.ko into vfio.ko
authorJason Gunthorpe <jgg@nvidia.com>
Mon, 5 Dec 2022 15:29:20 +0000 (11:29 -0400)
committerAlex Williamson <alex.williamson@redhat.com>
Mon, 5 Dec 2022 19:04:32 +0000 (12:04 -0700)
This is only 1.8k, putting it in its own module is not really
necessary. The kconfig infrastructure is still there to completely remove
it for systems that are trying for small footprint.

Put it in the main vfio.ko module now that kbuild can support multiple .c
files.

Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Link: https://lore.kernel.org/r/5-v5-fc5346cacfd4+4c482-vfio_modules_jgg@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
drivers/vfio/Kconfig
drivers/vfio/Makefile
drivers/vfio/vfio.h
drivers/vfio/vfio_main.c
drivers/vfio/virqfd.c

index d25b91adfd64cdc723225e67b73405f45b1e6f42..0b8d53f63c7e5caea7436da0b5bdb03ecd0089b4 100644 (file)
@@ -21,7 +21,7 @@ config VFIO_IOMMU_SPAPR_TCE
        default VFIO
 
 config VFIO_VIRQFD
-       tristate
+       bool
        select EVENTFD
        default n
 
index 50b8e8e3fb10dd5f648f6033be2c34a48b4a16c3..0721ed4831c92f0b260ceb8081bad84c337ab4a8 100644 (file)
@@ -1,13 +1,11 @@
 # SPDX-License-Identifier: GPL-2.0
-vfio_virqfd-y := virqfd.o
-
 obj-$(CONFIG_VFIO) += vfio.o
 
 vfio-y += vfio_main.o \
          iova_bitmap.o \
          container.o
+vfio-$(CONFIG_VFIO_VIRQFD) += virqfd.o
 
-obj-$(CONFIG_VFIO_VIRQFD) += vfio_virqfd.o
 obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
 obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
 obj-$(CONFIG_VFIO_PCI) += pci/
index bcad54bbab08c4b8497e5aead5d5576fc45a01e4..a7113b4baaa24228d284be20b83427b2cd4d62b6 100644 (file)
@@ -124,6 +124,19 @@ long vfio_container_ioctl_check_extension(struct vfio_container *container,
 int __init vfio_container_init(void);
 void vfio_container_cleanup(void);
 
+#if IS_ENABLED(CONFIG_VFIO_VIRQFD)
+int __init vfio_virqfd_init(void);
+void vfio_virqfd_exit(void);
+#else
+static inline int __init vfio_virqfd_init(void)
+{
+       return 0;
+}
+static inline void vfio_virqfd_exit(void)
+{
+}
+#endif
+
 #ifdef CONFIG_VFIO_NOIOMMU
 extern bool vfio_noiommu __read_mostly;
 #else
index 662e267a3e13deeed3456aef54d9d008b4d5a1ee..7f88569c3ebafb52976a6a52420dabfe662bf9f1 100644 (file)
@@ -1832,6 +1832,10 @@ static int __init vfio_init(void)
        if (ret)
                return ret;
 
+       ret = vfio_virqfd_init();
+       if (ret)
+               goto err_virqfd;
+
        /* /dev/vfio/$GROUP */
        vfio.class = class_create(THIS_MODULE, "vfio");
        if (IS_ERR(vfio.class)) {
@@ -1862,6 +1866,8 @@ err_dev_class:
        class_destroy(vfio.class);
        vfio.class = NULL;
 err_group_class:
+       vfio_virqfd_exit();
+err_virqfd:
        vfio_container_cleanup();
        return ret;
 }
@@ -1876,6 +1882,7 @@ static void __exit vfio_cleanup(void)
        class_destroy(vfio.device_class);
        vfio.device_class = NULL;
        class_destroy(vfio.class);
+       vfio_virqfd_exit();
        vfio_container_cleanup();
        vfio.class = NULL;
        xa_destroy(&vfio_device_set_xa);
index 414e98d82b02e561d5423910d0cb572b7c4ea7d3..497a17b378656888dcc1b27ef2e3fbfb61450e79 100644 (file)
 #include <linux/file.h>
 #include <linux/module.h>
 #include <linux/slab.h>
-
-#define DRIVER_VERSION  "0.1"
-#define DRIVER_AUTHOR   "Alex Williamson <alex.williamson@redhat.com>"
-#define DRIVER_DESC     "IRQFD support for VFIO bus drivers"
+#include "vfio.h"
 
 static struct workqueue_struct *vfio_irqfd_cleanup_wq;
 static DEFINE_SPINLOCK(virqfd_lock);
 
-static int __init vfio_virqfd_init(void)
+int __init vfio_virqfd_init(void)
 {
        vfio_irqfd_cleanup_wq =
                create_singlethread_workqueue("vfio-irqfd-cleanup");
@@ -30,7 +27,7 @@ static int __init vfio_virqfd_init(void)
        return 0;
 }
 
-static void __exit vfio_virqfd_exit(void)
+void vfio_virqfd_exit(void)
 {
        destroy_workqueue(vfio_irqfd_cleanup_wq);
 }
@@ -216,11 +213,3 @@ void vfio_virqfd_disable(struct virqfd **pvirqfd)
        flush_workqueue(vfio_irqfd_cleanup_wq);
 }
 EXPORT_SYMBOL_GPL(vfio_virqfd_disable);
-
-module_init(vfio_virqfd_init);
-module_exit(vfio_virqfd_exit);
-
-MODULE_VERSION(DRIVER_VERSION);
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR(DRIVER_AUTHOR);
-MODULE_DESCRIPTION(DRIVER_DESC);