On Tue, Dec 06, 2022 at 12:55:42PM +1100, Stephen Rothwell wrote: > Hi all, > > Today's linux-next merge of the iommufd tree got conflicts in: > > drivers/vfio/Kconfig > drivers/vfio/Makefile > > between commits: > > 20601c45a0fa ("vfio: Remove CONFIG_VFIO_SPAPR_EEH") > e2d55709398e ("vfio: Fold vfio_virqfd.ko into vfio.ko") > > from the vfio tree and commits: > > a4d1f91db502 ("vfio-iommufd: Support iommufd for physical VFIO devices") > e5a9ec7e096a ("vfio: Make vfio_container optionally compiled") > c2849d718d26 ("vfio: Move vfio group specific code into group.c") > > from the iommufd tree. > > I fixed it up (see below) and can carry the fix as necessary. This > is now fixed as far as linux-next is concerned, but any non trivial > conflicts should be mentioned to your upstream maintainer when your tree > is submitted for merging. You may also want to consider cooperating > with the maintainer of the conflicting tree to minimise any particularly > complex conflicts. I got the same as you for what you showed, but I also got a hunk in vfio_main.c as well? It looks close to your next-20221206 tag, but I renamed 'err_virqfd' to 'err_group' and 'err_dev_class' to 'err_virqfd' for consistency with the rest of the file. Thanks, Jason @@@ -1260,27 -1902,59 +1348,34 @@@ 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)) { - ret = PTR_ERR(vfio.class); - goto err_group_class; - } - - vfio.class->devnode = vfio_devnode; ++ goto err_group; + /* /sys/class/vfio-dev/vfioX */ vfio.device_class = class_create(THIS_MODULE, "vfio-dev"); if (IS_ERR(vfio.device_class)) { ret = PTR_ERR(vfio.device_class); -- goto err_dev_class; ++ goto err_virqfd; } - ret = alloc_chrdev_region(&vfio.group_devt, 0, MINORMASK + 1, "vfio"); - if (ret) - goto err_alloc_chrdev; - pr_info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); return 0; -err_alloc_chrdev: - class_destroy(vfio.device_class); - vfio.device_class = NULL; --err_dev_class: - class_destroy(vfio.class); - vfio.class = NULL; -err_group_class: - vfio_virqfd_exit(); + err_virqfd: - vfio_container_cleanup(); ++ vfio_virqfd_exit(); ++err_group: + vfio_group_cleanup(); return ret; } static void __exit vfio_cleanup(void) { - WARN_ON(!list_empty(&vfio.group_list)); - ida_destroy(&vfio.device_ida); - ida_destroy(&vfio.group_ida); - unregister_chrdev_region(vfio.group_devt, MINORMASK + 1); class_destroy(vfio.device_class); vfio.device_class = NULL; - class_destroy(vfio.class); + vfio_virqfd_exit(); - vfio_container_cleanup(); - vfio.class = NULL; + vfio_group_cleanup(); xa_destroy(&vfio_device_set_xa); }