> From: Nicolin Chen <nicolinc@xxxxxxxxxx> > Sent: Wednesday, January 8, 2025 1:10 AM > + > +int iommufd_veventq_alloc(struct iommufd_ucmd *ucmd) > +{ > + struct iommu_veventq_alloc *cmd = ucmd->cmd; > + struct iommufd_veventq *veventq; > + struct iommufd_viommu *viommu; > + int fdno; > + int rc; > + > + if (cmd->flags || cmd->type == IOMMU_VEVENTQ_TYPE_DEFAULT) > + return -EOPNOTSUPP; > + > + viommu = iommufd_get_viommu(ucmd, cmd->viommu_id); > + if (IS_ERR(viommu)) > + return PTR_ERR(viommu); > + > + if (!viommu->ops || !viommu->ops->supports_veventq || > + !viommu->ops->supports_veventq(cmd->type)) > + return -EOPNOTSUPP; > + I'm not sure about the necessity of above check. The event queue is just a software struct with a user-specified format for the iommu driver to report viommu event. The struct itself is not constrained by the hardware capability, though I'm not sure a real usage in which a smmu driver wants to report a vtd event. But legitimately an user can create any type of event queues which might just be never used. It sounds clearer to do the check when IOPF cap is actually enabled on a device contained in the viommu. At that point check whether a required type eventqueue has been created. If not then fail the iopf enabling. Then it reveals probably another todo in this series. Seems you still let the smmu driver statically enable iopf when probing the device. Sounds like iommufd_viommu_alloc_hwpt_nested() may accept IOMMU_HWPT_FAULT_ID_VALID to refer to a event queue and later dynamically enable/disable iopf when attaching a device to the hwpt and check the event queue type there. Just like how the fault object is handled.