Re: [PATCH v5 04/12] iommu/sva: Basic data structures for SVA

Baolu Lu
2022-05-07T08:33:12Z

Hi Jean,

On 2022/5/5 14:42, Baolu Lu wrote:
> On 2022/5/4 02:09, Jean-Philippe Brucker wrote:
>> On Mon, May 02, 2022 at 09:48:34AM +0800, Lu Baolu wrote:
>>> Use below data structures for SVA implementation in the IOMMU core:
>>>
>>> - struct iommu_sva_ioas
>>>    Represent the I/O address space shared with an application CPU
>>> address
>>>    space. This structure has a 1:1 relationship with an mm_struct. It
>>>    grabs a "mm->mm_count" refcount during creation and drop it on
>>> release.
>>
>> Do we actually need this structure?  At the moment it only keeps track of
>> bonds, which we can move to struct dev_iommu. Replacing it by a mm
>> pointer
>> in struct iommu_domain simplifies the driver and seems to work
>
> Fair enough.
>
> +struct iommu_sva_ioas {
> +    struct mm_struct *mm;
> +    ioasid_t pasid;
> +
> +    /* Counter of domains attached to this ioas. */
> +    refcount_t users;
> +
> +    /* All bindings are linked here. */
> +    struct list_head bonds;
> +};
>
> By moving @mm to struct iommu_domain and @bonds to struct dev_iommu, the
> code looks simpler. The mm, sva domain and per-device dev_iommu are
> guaranteed to be valid during bind() and unbind().
>
> Will head this direction in the next version.

I'm trying to implement this idea in real code. It seems that we need
additional fields in struct iommu_domain to track which devices the mm
was bound to. It doesn't simplify the code much. Any thoughts?

Best regards,
baolu