Subject: Re: linux-next: manual merge of the drm-intel-fixes tree with the vfio-fixes tree

From: Jani Nikula <[email-masked]>
Date: Tue, 03 Jan 2017 11:17:19 +0200

On Tue, 03 Jan 2017, Stephen Rothwell <[email-masked]> wrote:
> Hi all,
>
> Today's linux-next merge of the drm-intel-fixes tree got a conflict in:
>
>   drivers/gpu/drm/i915/gvt/kvmgt.c
>
> between commit:
>
>   99e3123e3d72 ("vfio-mdev: Make mdev_device private and abstract interfaces")
>
> from the vfio-fixes tree and commit:
>
>   364fb6b789ff ("drm/i915/gvt/kvmgt: prevent double-release of vgpu")
>
> from the drm-intel-fixes tree.

Hi Stephen, while GVT-g is part of i915, it has its own mailing list and
maintainers, listed under "INTEL GVT-g DRIVERS (Intel GPU
Virtualization)" in MAINTAINERS. Please include them wrt linux-next
conflicts in drivers/gpu/drm/i915/gvt/. Added now.

Thanks,
Jani.

> 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.
> 
> -- 
> Cheers,
> Stephen Rothwell
> 
> diff --cc drivers/gpu/drm/i915/gvt/kvmgt.c
> index f8021a01df63,934963970288..000000000000
> --- a/drivers/gpu/drm/i915/gvt/kvmgt.c
> +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
> @@@ -497,10 -500,19 +500,19 @@@ static int intel_vgpu_open(struct mdev_
> 		goto undo_iommu;
> 	}
> 
> - 	return kvmgt_guest_init(mdev);
> + 	ret = kvmgt_guest_init(mdev);
> + 	if (ret)
> + 		goto undo_group;
> + 
> + 	atomic_set(&vgpu->vdev.released, 0);
> + 	return ret;
> + 
> + undo_group:
> + 	vfio_unregister_notifier(&mdev->dev, VFIO_GROUP_NOTIFY,
> + 					&vgpu->vdev.group_notifier);
> 
>   undo_iommu:
>  -	vfio_unregister_notifier(&mdev->dev, VFIO_IOMMU_NOTIFY,
>  +	vfio_unregister_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY,
> 					&vgpu->vdev.iommu_notifier);
>   out:
> 	return ret;
> @@@ -513,10 -526,16 +526,16 @@@ static void __intel_vgpu_release(struc
> 	if (!handle_valid(vgpu->handle))
> 		return;
> 
> - 	vfio_unregister_notifier(mdev_dev(vgpu->vdev.mdev), VFIO_IOMMU_NOTIFY,
> + 	if (atomic_cmpxchg(&vgpu->vdev.released, 0, 1))
> + 		return;
> + 
>  -	ret = vfio_unregister_notifier(&vgpu->vdev.mdev->dev, VFIO_IOMMU_NOTIFY,
> ++	ret = vfio_unregister_notifier(mdev_dev(vgpu->vdev.mdev), VFIO_IOMMU_NOTIFY,
> 					&vgpu->vdev.iommu_notifier);
> - 	vfio_unregister_notifier(mdev_dev(vgpu->vdev.mdev), VFIO_GROUP_NOTIFY,
> + 	WARN(ret, "vfio_unregister_notifier for iommu failed: %d\n", ret);
> + 
>  -	ret = vfio_unregister_notifier(&vgpu->vdev.mdev->dev, VFIO_GROUP_NOTIFY,
> ++	ret = vfio_unregister_notifier(mdev_dev(vgpu->vdev.mdev), VFIO_GROUP_NOTIFY,
> 					&vgpu->vdev.group_notifier);
> + 	WARN(ret, "vfio_unregister_notifier for group failed: %d\n", ret);
> 
> 	info = (struct kvmgt_guest_info *)vgpu->handle;
> 	kvmgt_guest_exit(info);
> 
-- 
Jani Nikula, Intel Open Source Technology Center