Re: [PATCH v6 05/22] iommu: Introduce cache_invalidate API
From: Jean-Philippe Brucker
Date: Thu Mar 21 2019 - 10:13:46 EST
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
>