>-----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?

>+
>+    if (!ret) {
>+        error_setg_errno(errp, errno, "IOMMU_IOAS_CHANGE_PROCESS fd %d
>failed",
>+                         be->fd);
>+    }
>+    trace_iommufd_change_process(be->fd, ret);
>+    return ret;
>+}
>+
> bool iommufd_backend_connect(IOMMUFDBackend *be, Error **errp)
> {
>     int fd;
>diff --git a/backends/trace-events b/backends/trace-events
>index f478e18..5ccdf90 100644
>--- a/backends/trace-events
>+++ b/backends/trace-events
>@@ -7,6 +7,7 @@ dbus_vmstate_loading(const char *id) "id: %s"
> dbus_vmstate_saving(const char *id) "id: %s"
>
> # iommufd.c
>+iommufd_change_process(int fd, bool ret) "fd=%d (%d)"
> iommufd_backend_connect(int fd, bool owned, uint32_t users) "fd=%d
>owned=%d users=%d"
> iommufd_backend_disconnect(int fd, uint32_t users) "fd=%d users=%d"
> iommu_backend_set_fd(int fd) "pre-opened /dev/iommu fd=%d"
>diff --git a/include/system/iommufd.h b/include/system/iommufd.h
>index ac700b8..db9ed53 100644
>--- a/include/system/iommufd.h
>+++ b/include/system/iommufd.h
>@@ -64,6 +64,8 @@ bool
>iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *be, uint32_t hwpt_id,
>                                       uint64_t iova, ram_addr_t size,
>                                       uint64_t page_size, uint64_t *data,
>                                       Error **errp);
>+bool iommufd_change_process_capable(IOMMUFDBackend *be);
>+bool iommufd_change_process(IOMMUFDBackend *be, Error **errp);
>
> #define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE
>"-iommufd"
> #endif
>--
>1.8.3.1


Reply via email to