Re: [PATCH 0/5] Share sva domains with all devices bound to a mm

From: Tina Zhang
Date: Thu Aug 10 2023 - 21:06:23 EST


Hi,

On 8/9/23 18:51, Baolu Lu wrote:
On 2023/8/9 17:44, Tian, Kevin wrote:
From: Baolu Lu<baolu.lu@xxxxxxxxxxxxxxx>
Sent: Wednesday, August 9, 2023 8:18 AM

On 2023/8/8 15:49, Tina Zhang wrote:
A sva domain's lifetime begins with binding a device to a mm and ends
by releasing all the bound devices from that sva domain. Technically,
there could be more than one sva domain identified by the mm PASID for
the use of bound devices issuing DMA transactions.

To support mm PASID 1:n with sva domains, each mm needs to keep both
a
reference list of allocated sva domains and the corresponding PASID.
However, currently, mm struct only has one pasid field for sva usage,
which is used to keep the info of an assigned PASID. That pasid field
cannot provide sufficient info to build up the 1:n mapping between PASID
and sva domains.
Is it more appropriate to have the same life cycle for sva domain and mm
pasid? I feel that they represent the same thing, that is, the address
space shared by mm to a device.

iirc it's a simplification to free mm pasid at __mmdrop() otherwise the
implementation is tricky, but I don't remember all the detail...

Yeah, probably we could also free the sva domains in __mmdrop()? Remove
the refcount for sva domain just like what we did for pasid (at the
beginning we had refcount for each pasid...).

For sva usage, mm->mm_count is increased in iommu_sva_domain_alloc(), and gets decreased when the domain has no users (which is checked in iommu_sva_unbind_device()).

So, in a mm's life time, there could be multiple sva domains, though they are using the same PASID. I think it makes sense to mm. Because it makes no sense to keep a sva domain alive when no users are using it, even though the mm is alive.

Regards,
-Tina


Best regards,
baolu