On 21/03/2019 13:54, Auger Eric wrote: > Hi Jacob, Jean-Philippe, > > On 3/20/19 5:50 PM, Jean-Philippe Brucker wrote: >> On 20/03/2019 16:37, Jacob Pan wrote: >> [...] >>>> +struct iommu_inv_addr_info { >>>> +#define IOMMU_INV_ADDR_FLAGS_PASID (1 << 0) >>>> +#define IOMMU_INV_ADDR_FLAGS_ARCHID (1 << 1) >>>> +#define IOMMU_INV_ADDR_FLAGS_LEAF (1 << 2) >>>> + __u32 flags; >>>> + __u32 archid; >>>> + __u64 pasid; >>>> + __u64 addr; >>>> + __u64 granule_size; >>>> + __u64 nb_granules; >>>> +}; >>>> + >>>> +/** >>>> + * First level/stage invalidation information >>>> + * @cache: bitfield that allows to select which caches to invalidate >>>> + * @granularity: defines the lowest granularity used for the >>>> invalidation: >>>> + * domain > pasid > addr >>>> + * >>>> + * Not all the combinations of cache/granularity make sense: >>>> + * >>>> + * type | DEV_IOTLB | IOTLB | PASID | >>>> + * granularity | | | >>>> cache | >>>> + * -------------+---------------+---------------+---------------+ >>>> + * DOMAIN | N/A | Y | >>>> Y | >>>> + * PASID | Y | Y | >>>> Y | >>>> + * ADDR | Y | Y | >>>> N/A | >>>> + */ >>>> +struct iommu_cache_invalidate_info { >>>> +#define IOMMU_CACHE_INVALIDATE_INFO_VERSION_1 1 >>>> + __u32 version; >>>> +/* IOMMU paging structure cache */ >>>> +#define IOMMU_CACHE_INV_TYPE_IOTLB (1 << 0) /* IOMMU IOTLB */ >>>> +#define IOMMU_CACHE_INV_TYPE_DEV_IOTLB (1 << 1) /* Device >>>> IOTLB */ +#define IOMMU_CACHE_INV_TYPE_PASID (1 << 2) /* PASID >>>> cache */ >>> Just a clarification, this used to be an enum. You do intend to issue a >>> single invalidation request on multiple cache types? Perhaps for >>> virtio-IOMMU? I only see a single cache type in your patch #14. For VT-d >>> we plan to issue one cache type at a time for now. So this format works >>> for us. >> >> Yes for virtio-iommu I'd like as little overhead as possible, which >> means a single invalidation message to hit both IOTLB and ATC at once, >> and the ability to specify multiple pages with @nb_granules. > The original request/explanation from Jean-Philippe can be found here: > https://lkml.org/lkml/2019/1/28/1497 > >> >>> However, if multiple cache types are issued in a single invalidation. >>> They must share a single granularity, not all combinations are valid. >>> e.g. dev IOTLB does not support domain granularity. Just a reminder, >>> not an issue. Driver could filter out invalid combinations. > Sure I will add a comment about this restriction. >> >> Agreed. Even the core could filter out invalid combinations based on the >> table above: IOTLB and domain granularity are N/A. > I don't get this sentence. What about vtd IOTLB domain-selective > invalidation: My mistake: I meant dev-IOTLB and domain granularity are N/A Thanks, Jean > " > • IOTLB entries caching mappings associated with the specified domain-id > are invalidated. > • Paging-structure-cache entries caching mappings associated with the > specified domain-id are invalidated. > " > > Thanks > > Eric > >> >> Thanks, >> Jean >> >>> >>>> + __u8 cache; >>>> + __u8 granularity; >>>> + __u8 padding[2]; >>>> + union { >>>> + __u64 pasid; >>>> + struct iommu_inv_addr_info addr_info; >>>> + }; >>>> +}; >>>> + >>>> + >>>> #endif /* _UAPI_IOMMU_H */ >>> >>> [Jacob Pan] >>> _______________________________________________ >>> iommu mailing list >>> iommu@xxxxxxxxxxxxxxxxxxxxxxxxxx >>> https://lists.linuxfoundation.org/mailman/listinfo/iommu >>> >> > _______________________________________________ > iommu mailing list > iommu@xxxxxxxxxxxxxxxxxxxxxxxxxx > https://lists.linuxfoundation.org/mailman/listinfo/iommu > _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm