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

From: Jason Gunthorpe <[email-masked]>
Date: Tue, 6 Dec 2022 19:35:06 -0400

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