Re: linux-next: manual merge of the iommufd tree with the vfio tree

From: Jason Gunthorpe
Date: Tue Dec 06 2022 - 18:35:15 EST


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);
}