Hi Zhenzhong,

Reviewed-by: Clement Mathieu--Drif <[email protected]>

Thanks for the effort!

On Tue, 2026-08-25 at 16:18 +0800, Zhenzhong Duan wrote:
> Caution: External email. Do not open attachments or click links, unless this 
> email comes from a known sender and you know the content is safe.
> 
> 
> Add a new helper for IOMMU_FAULT_QUEUE_ALLOC ioctl to allocate a fault  
> handling object which will be used in hwpt allocation.
> 
> Signed-off-by: Zhenzhong Duan 
> <[[email protected]](mailto:[email protected])>  
> Tested-by: Xudong Hao <[[email protected]](mailto:[email protected])>  
> ---  
>  include/system/iommufd.h |  3 +++  
>  backends/iommufd.c       | 21 +++++++++++++++++++++  
>  backends/trace-events    |  1 +  
>  3 files changed, 25 insertions(+)
> 
> diff --git a/include/system/iommufd.h b/include/system/iommufd.h  
> index 17bf1a3727..36b34b4899 100644  
> --- a/include/system/iommufd.h  
> +++ b/include/system/iommufd.h  
> @@ -106,6 +106,9 @@ bool iommufd_backend_alloc_veventq(IOMMUFDBackend *be, 
> uint32_t viommu_id,  
>                                     uint32_t *out_veventq_id,  
>                                     uint32_t *out_veventq_fd, Error **errp);
> 
> +bool iommufd_backend_alloc_faultq(IOMMUFDBackend *be, uint32_t 
> *out_fault_id,  
> +                                  uint32_t *out_fault_fd, Error **errp);  
> +  
>  bool iommufd_backend_alloc_hw_queue(IOMMUFDBackend *be, uint32_t viommu_id,  
>                                      uint32_t queue_type, uint32_t index,  
>                                      uint64_t addr, uint64_t length,  
> diff --git a/backends/iommufd.c b/backends/iommufd.c  
> index 15f2a51350..2775eef741 100644  
> --- a/backends/iommufd.c  
> +++ b/backends/iommufd.c  
> @@ -554,6 +554,27 @@ bool iommufd_backend_alloc_veventq(IOMMUFDBackend *be, 
> uint32_t viommu_id,  
>      return true;  
>  }
> 
> +bool iommufd_backend_alloc_faultq(IOMMUFDBackend *be, uint32_t 
> *out_fault_id,  
> +                                  uint32_t *out_fault_fd, Error **errp)  
> +{  
> +    int ret, fd = be->fd;  
> +    struct iommu_fault_alloc cmd = {  
> +        .size = sizeof(cmd),  
> +    };  
> +  
> +    ret = ioctl(fd, IOMMU_FAULT_QUEUE_ALLOC, &cmd);  
> +    trace_iommufd_backend_alloc_faultq(fd, cmd.out_fault_id, 
> cmd.out_fault_fd,  
> +                                       ret);  
> +    if (ret) {  
> +        error_setg_errno(errp, errno, "Failed to allocate fault queue");  
> +        return false;  
> +    }  
> +  
> +    *out_fault_id = cmd.out_fault_id;  
> +    *out_fault_fd = cmd.out_fault_fd;  
> +    return true;  
> +}  
> +  
>  bool iommufd_backend_alloc_hw_queue(IOMMUFDBackend *be, uint32_t viommu_id,  
>                                      uint32_t queue_type, uint32_t index,  
>                                      uint64_t addr, uint64_t length,  
> diff --git a/backends/trace-events b/backends/trace-events  
> index 9b7b9b7d68..b1c1d89dd8 100644  
> --- a/backends/trace-events  
> +++ b/backends/trace-events  
> @@ -17,6 +17,7 @@ iommufd_backend_unmap_dma_non_exist(int iommufd, uint32_t 
> ioas, uint64_t iova, u  
>  iommufd_backend_unmap_dma(int iommufd, uint32_t ioas, uint64_t iova, 
> uint64_t size, int ret) " iommufd=%d ioas=%d iova=0x%"PRIx64" 
> size=0x%"PRIx64" (%d)"  
>  iommufd_backend_alloc_ioas(int iommufd, uint32_t ioas) " iommufd=%d ioas=%d" 
>  
>  iommufd_backend_alloc_hwpt(int iommufd, uint32_t dev_id, uint32_t pt_id, 
> uint32_t flags, uint32_t hwpt_type, uint32_t len, uint64_t data_ptr, uint32_t 
> out_hwpt_id, int ret) " iommufd=%d dev_id=%u pt_id=%u flags=0x%x hwpt_type=%u 
> len=%u data_ptr=0x%"PRIx64" out_hwpt=%u (%d)"  
> +iommufd_backend_alloc_faultq(int iommufd, uint32_t fault_id, uint32_t 
> fault_fd, int ret) " iommufd=%d fault_id=%u fault_fd=%u (%d)"  
>  iommufd_backend_free_id(int iommufd, uint32_t id, int ret) " iommufd=%d 
> id=%d (%d)"  
>  iommufd_backend_set_dirty(int iommufd, uint32_t hwpt_id, bool start, int 
> ret) " iommufd=%d hwpt=%u enable=%d (%d)"  
>  iommufd_backend_get_dirty_bitmap(int iommufd, uint32_t hwpt_id, uint64_t 
> iova, uint64_t size, uint64_t flags, uint64_t page_size, int ret) " 
> iommufd=%d hwpt=%u iova=0x%"PRIx64" size=0x%"PRIx64" flags=0x%"PRIx64" 
> page_size=0x%"PRIx64" (%d)"  
> --  
> 2.52.0
> 

Reply via email to