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 >
