On Wed, Dec 11, 2024 at 07:55:53AM +0000, Tian, Kevin wrote: > > From: Nicolin Chen <nicolinc@xxxxxxxxxx> > > Sent: Wednesday, December 4, 2024 6:10 AM > > + > > +/* An iommufd_virq represents a vIOMMU interrupt in an eventq_virq > > queue */ > > +struct iommufd_virq { > > + struct iommufd_eventq_virq *eventq_virq; > > + struct list_head node; > > + ssize_t irq_len; > > + void *irq_data; > > +}; > > looks the only use of eventq_virq is in below: > > > + > > +static inline int iommufd_eventq_virq_handler(struct iommufd_virq *virq) > > +{ > > + return iommufd_eventq_notify(&virq->eventq_virq->common, > > &virq->node); > > +} > > If there is no other intended usages upon that field, it's simpler to > remove it and directly pass the pointer in when the handler is > called. Anyway iommufd_viommu_report_irq() needs to find the > eventq first before calling it. OK. > > +/** > > + * struct iommu_virq_alloc - ioctl(IOMMU_VIRQ_ALLOC) > > + * @size: sizeof(struct iommu_virq_alloc) > > + * @flags: Must be 0 > > + * @viommu: virtual IOMMU ID to associate the virtual IRQ with > > + * @type: Type of the virtual IRQ. Must be defined in enum > > iommu_virq_type > > + * @out_virq_id: The ID of the new virtual IRQ > > + * @out_fault_fd: The fd of the new virtual IRQ. User space must close the > > + * successfully returned fd after using it > > s/out_fault_fd/out_virq_fd/ > > > + * > > + * Explicitly allocate a virtual IRQ handler for a vIOMMU. A vIOMMU can > > have > > + * multiple FDs for different @type, but is confined to one FD per @type. > > + */ > > s/handler/interface/ > > > + > > + eventq_virq->irq_wq = alloc_workqueue("viommu_irq/%d", > > WQ_UNBOUND, 0, > > + eventq_virq->common.obj.id); > > + if (!eventq_virq->irq_wq) { > > + rc = -ENOMEM; > > + goto out_put_fdno; > > + } > > there is no use of this wq Oops. Looks like I forgot to clean it up. > > @@ -335,6 +335,8 @@ static const struct iommufd_ioctl_op > > iommufd_ioctl_ops[] = { > > IOCTL_OP(IOMMU_DESTROY, iommufd_destroy, struct > > iommu_destroy, id), > > IOCTL_OP(IOMMU_FAULT_QUEUE_ALLOC, > > iommufd_eventq_iopf_alloc, > > struct iommu_fault_alloc, out_fault_fd), > > + IOCTL_OP(IOMMU_VIRQ_ALLOC, iommufd_eventq_virq_alloc, > > + struct iommu_virq_alloc, out_virq_fd), > > sort it in alphabetical order. Ack. Thanks Nic