From: Alex Williamson <alex@shazbot.org>
To: Yishai Hadas <yishaih@nvidia.com>
Cc: <jgg@nvidia.com>, <kvm@vger.kernel.org>, <kevin.tian@intel.com>,
<joao.m.martins@oracle.com>, <leonro@nvidia.com>,
<maorg@nvidia.com>, <avihaih@nvidia.com>, <clg@redhat.com>,
<peterx@redhat.com>, <liulongfang@huawei.com>,
<giovanni.cabiddu@intel.com>, <kwankhede@nvidia.com>,
alex@shazbot.org
Subject: Re: [PATCH V2 vfio 2/6] vfio: Add support for VFIO_DEVICE_FEATURE_MIG_PRECOPY_INFOv2
Date: Wed, 18 Mar 2026 16:03:37 -0600 [thread overview]
Message-ID: <20260318160337.1fa2b3d8@shazbot.org> (raw)
In-Reply-To: <20260317161753.18964-3-yishaih@nvidia.com>
On Tue, 17 Mar 2026 18:17:49 +0200
Yishai Hadas <yishaih@nvidia.com> wrote:
> Currently, existing VFIO_MIG_GET_PRECOPY_INFO implementations don't
> assign info.flags before copy_to_user().
>
> Because they copy the struct in from userspace first, this effectively
> echoes userspace-provided flags back as output, preventing the field
> from being used to report new reliable data from the drivers.
>
> Add support for a new device feature named
> VFIO_DEVICE_FEATURE_MIG_PRECOPY_INFOv2.
>
> On SET, enables the v2 pre_copy_info behaviour, where the
> vfio_precopy_info.flags is a valid output field.
>
> Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
> ---
> drivers/vfio/pci/vfio_pci_core.c | 1 +
> drivers/vfio/vfio_main.c | 20 ++++++++++++++++++++
> include/linux/vfio.h | 1 +
> 3 files changed, 22 insertions(+)
>
> diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
> index d43745fe4c84..1daaceb5b2c8 100644
> --- a/drivers/vfio/pci/vfio_pci_core.c
> +++ b/drivers/vfio/pci/vfio_pci_core.c
> @@ -736,6 +736,7 @@ void vfio_pci_core_close_device(struct vfio_device *core_vdev)
> #endif
> vfio_pci_core_disable(vdev);
>
> + core_vdev->precopy_info_v2 = 0;
> vfio_pci_dma_buf_cleanup(vdev);
There's a minor discrepancy here, enabling precopy_info_v2 is a core
vfio feature, but clearing the previous user's opt-in is only
implemented in the core helper for vfio-pci and associated variant
drivers. This should be moved to vfio_df_device_last_close() to be
common. A follow-up fix rather than a v3 is fine if you agree. Thanks,
Alex
>
> mutex_lock(&vdev->igate);
> diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c
> index 742477546b15..dcb879018f27 100644
> --- a/drivers/vfio/vfio_main.c
> +++ b/drivers/vfio/vfio_main.c
> @@ -964,6 +964,23 @@ vfio_ioctl_device_feature_migration_data_size(struct vfio_device *device,
> return 0;
> }
>
> +static int
> +vfio_ioctl_device_feature_migration_precopy_info_v2(struct vfio_device *device,
> + u32 flags, size_t argsz)
> +{
> + int ret;
> +
> + if (!(device->migration_flags & VFIO_MIGRATION_PRE_COPY))
> + return -EINVAL;
> +
> + ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET, 0);
> + if (ret != 1)
> + return ret;
> +
> + device->precopy_info_v2 = 1;
> + return 0;
> +}
> +
> static int vfio_ioctl_device_feature_migration(struct vfio_device *device,
> u32 flags, void __user *arg,
> size_t argsz)
> @@ -1251,6 +1268,9 @@ static int vfio_ioctl_device_feature(struct vfio_device *device,
> return vfio_ioctl_device_feature_migration_data_size(
> device, feature.flags, arg->data,
> feature.argsz - minsz);
> + case VFIO_DEVICE_FEATURE_MIG_PRECOPY_INFOv2:
> + return vfio_ioctl_device_feature_migration_precopy_info_v2(
> + device, feature.flags, feature.argsz - minsz);
> default:
> if (unlikely(!device->ops->device_feature))
> return -ENOTTY;
> diff --git a/include/linux/vfio.h b/include/linux/vfio.h
> index e90859956514..7c1d33283e04 100644
> --- a/include/linux/vfio.h
> +++ b/include/linux/vfio.h
> @@ -52,6 +52,7 @@ struct vfio_device {
> struct vfio_device_set *dev_set;
> struct list_head dev_set_list;
> unsigned int migration_flags;
> + u8 precopy_info_v2;
> struct kvm *kvm;
>
> /* Members below here are private, not for driver use */
next prev parent reply other threads:[~2026-03-18 22:03 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-17 16:17 [PATCH V2 vfio 0/6] Add support for PRE_COPY initial bytes re-initialization Yishai Hadas
2026-03-17 16:17 ` [PATCH V2 vfio 1/6] vfio: Define uAPI for re-init initial bytes during the PRE_COPY phase Yishai Hadas
2026-03-17 16:17 ` [PATCH V2 vfio 2/6] vfio: Add support for VFIO_DEVICE_FEATURE_MIG_PRECOPY_INFOv2 Yishai Hadas
2026-03-18 22:03 ` Alex Williamson [this message]
2026-03-19 15:26 ` Yishai Hadas
2026-03-19 18:28 ` Alex Williamson
2026-03-17 16:17 ` [PATCH V2 vfio 3/6] vfio: Adapt drivers to use the core helper vfio_check_precopy_ioctl Yishai Hadas
2026-03-17 16:17 ` [PATCH V2 vfio 4/6] net/mlx5: Add IFC bits for migration state Yishai Hadas
2026-03-17 16:17 ` [PATCH V2 vfio 5/6] vfio/mlx5: consider inflight SAVE during PRE_COPY Yishai Hadas
2026-03-17 16:17 ` [PATCH V2 vfio 6/6] vfio/mlx5: Add REINIT support to VFIO_MIG_GET_PRECOPY_INFO Yishai Hadas
2026-03-20 21:17 ` [PATCH V2 vfio 0/6] Add support for PRE_COPY initial bytes re-initialization Alex Williamson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260318160337.1fa2b3d8@shazbot.org \
--to=alex@shazbot.org \
--cc=avihaih@nvidia.com \
--cc=clg@redhat.com \
--cc=giovanni.cabiddu@intel.com \
--cc=jgg@nvidia.com \
--cc=joao.m.martins@oracle.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=leonro@nvidia.com \
--cc=liulongfang@huawei.com \
--cc=maorg@nvidia.com \
--cc=peterx@redhat.com \
--cc=yishaih@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.