> From: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx> > Sent: Thursday, March 31, 2022 12:36 PM > > + > > +/** > > + * struct iommu_ioas_iova_ranges - ioctl(IOMMU_IOAS_IOVA_RANGES) > > + * @size: sizeof(struct iommu_ioas_iova_ranges) > > + * @ioas_id: IOAS ID to read ranges from > > + * @out_num_iovas: Output total number of ranges in the IOAS > > + * @__reserved: Must be 0 > > + * @out_valid_iovas: Array of valid IOVA ranges. The array length is the > smaller > > + * of out_num_iovas or the length implied by size. > > + * @out_valid_iovas.start: First IOVA in the allowed range > > + * @out_valid_iovas.last: Inclusive last IOVA in the allowed range > > + * > > + * Query an IOAS for ranges of allowed IOVAs. Operation outside these > ranges is > > + * not allowed. out_num_iovas will be set to the total number of iovas > > + * and the out_valid_iovas[] will be filled in as space permits. > > + * size should include the allocated flex array. > > + */ > > +struct iommu_ioas_iova_ranges { > > + __u32 size; > > + __u32 ioas_id; > > + __u32 out_num_iovas; > > + __u32 __reserved; > > + struct iommu_valid_iovas { > > + __aligned_u64 start; > > + __aligned_u64 last; > > + } out_valid_iovas[]; > > +}; > > +#define IOMMU_IOAS_IOVA_RANGES _IO(IOMMUFD_TYPE, > IOMMUFD_CMD_IOAS_IOVA_RANGES) > > Is the information returned by this valid for the lifeime of the IOAS, > or can it change? If it can change, what events can change it? > It can change when a new device is attached to an ioas. You can look at iopt_table_enforce_group_resv_regions() in patch7 which is called by iommufd_device_attach() in patch10. That function will first check whether new reserved ranges from the attached device have been used and if no conflict then add them to the list of reserved ranges of this ioas. Userspace can call this ioctl to retrieve updated IOVA range info after attaching a device. Thanks Kevin