On 5/20/2025 11:11 PM, Duan, Zhenzhong wrote:
-----Original Message-----
From: Steven Sistare <steven.sist...@oracle.com>
Subject: Re: [PATCH V3 29/42] backends/iommufd: change process ioctl

On 5/19/2025 11:51 AM, Steven Sistare wrote:
On 5/16/2025 4:42 AM, Duan, Zhenzhong wrote:
-----Original Message-----
From: Steve Sistare <steven.sist...@oracle.com>
Subject: [PATCH V3 29/42] backends/iommufd: change process ioctl

Define the change process ioctl

Signed-off-by: Steve Sistare <steven.sist...@oracle.com>
---
backends/iommufd.c       | 20 ++++++++++++++++++++
backends/trace-events    |  1 +
include/system/iommufd.h |  2 ++
3 files changed, 23 insertions(+)

diff --git a/backends/iommufd.c b/backends/iommufd.c
index 5c1958f..6fed1c1 100644
--- a/backends/iommufd.c
+++ b/backends/iommufd.c
@@ -73,6 +73,26 @@ static void iommufd_backend_class_init(ObjectClass
*oc,
const void *data)
      object_class_property_add_str(oc, "fd", NULL, iommufd_backend_set_fd);
}

+bool iommufd_change_process_capable(IOMMUFDBackend *be)
+{
+    struct iommu_ioas_change_process args = {.size = sizeof(args)};
+
+    return !ioctl(be->fd, IOMMU_IOAS_CHANGE_PROCESS, &args);
+}
+
+bool iommufd_change_process(IOMMUFDBackend *be, Error **errp)
+{
+    struct iommu_ioas_change_process args = {.size = sizeof(args)};
+    bool ret = !ioctl(be->fd, IOMMU_IOAS_CHANGE_PROCESS, &args);

This is same ioctl as above check, could it be called more than once for same
process?

Yes, and it is a no-op if the process has not changed since the last time DMA
was mapped.

More questions?

Looks a bit redundant for me, meanwhile if iommufd_change_process_capable() is 
called on target qemu, may it do both checking and change?

I would suggest to define only iommufd_change_process() and comment that it's 
no-op if process not changed...

We need to check if IOMMU_IOAS_CHANGE_PROCESS is allowed before performing
live update so we can add a blocker and prevent live update cleanly:

vfio_iommufd_cpr_register_container
    if !vfio_cpr_supported()        // calls iommufd_change_process_capable
        migrate_add_blocker_modes()

How about I just add a comment:

bool iommufd_change_process_capable(IOMMUFDBackend *be)
{
    /*
     * Call IOMMU_IOAS_CHANGE_PROCESS to verify it is a recognized ioctl.
     * This is a no-op if the process has not changed since DMA was mapped.
     */

- Steve


Reply via email to