Hi Jean-Philippe, On 08/31/2018 03:17 PM, Jean-Philippe Brucker wrote: > On 23/08/18 13:17, Eric Auger wrote: >> +/** >> + * Translation cache invalidation information, contains generic IOMMU >> + * data which can be parsed based on model ID by model specific drivers. >> + * Since the invalidation of second level page tables are included in the >> + * unmap operation, this info is only applicable to the first level >> + * translation caches, i.e. DMA request with PASID. >> + * >> + * @granularity: requested invalidation granularity, type dependent >> + * @size: 2^size of 4K pages, 0 for 4k, 9 for 2MB, etc. >> + * @nr_pages: number of pages to invalidate >> + * @pasid: processor address space ID value per PCI spec. >> + * @addr: page address to be invalidated >> + * @flags IOMMU_INVALIDATE_ADDR_LEAF: leaf paging entries >> + * IOMMU_INVALIDATE_GLOBAL_PAGE: global pages >> + * >> + */ >> +struct iommu_tlb_invalidate_info { >> + struct iommu_tlb_invalidate_hdr hdr; >> + enum iommu_inv_granularity granularity; >> + __u32 flags; >> +#define IOMMU_INVALIDATE_ADDR_LEAF (1 << 0) >> +#define IOMMU_INVALIDATE_GLOBAL_PAGE (1 << 1) >> + __u8 size; >> + __u64 nr_pages; >> + __u32 pasid; >> + __u64 addr; >> +}; >> #endif /* _UAPI_IOMMU_H */ > > Since the ioctl will be used to combine invalidations (invalidate both > ATC and TLB with a single call), we need an additional ASID field for > the SMMU - ATC is invalidated by PASID, TLB by ASID. I used to call it > "tag", but I'm leaning towards "arch_id" now > (http://www.linux-arm.org/git?p=linux-jpb.git;a=commitdiff;h=40fdef74816dd8d8d113100b9e0162fab4cec28d) I aknowledge I am not crystal clear about that. for a given iommu_domain don't you have a single asid. Can't you retrieve the asid from the iommu_domain/arm_smmu_domain/arm_smmu_s1_cfg/arm_smmu_ctx_desc.asid? Here again I am confused bout the dual iommu_domain/struct device parameters. I have another trouble while doing the QEMU integration. When the guests does an NH_ALL, this propagates an invalidation on the whole IPA range and we must discriminate that from regular NH_VA calls. How would you encode the NH_ALL with this API? Besides I discover you work on virtio-iommu/stage2 enablement ;-) Thanks Eric > > Thanks, > Jean >