Re: [PATCH 5/7] x86/mmu: Allocate/free PASID

Jacob Pan (Jun)
2020-04-28T22:13:12Z

On Tue, 28 Apr 2020 13:59:43 -0700
"Luck, Tony" <tony.luck@intel.com> wrote:

> >> So the driver needs to use flush/drain operations to make sure all
> >> the in-flight work has completed before releasing/re-using the
> >> PASID.
> > Are you suggesting we should let driver also hold a reference of the
> > PASID?
>
> The sequence for bare metal is:
>
> process is queuing requests to DSA
> process exits (either deliberately, or crashes, or is killed)
> kernel does exit processing
> DSA driver is called as part of tear down of "mm"
> issues drain/flush commands to ensure that all
> queued operations on the PASID for this mm have
> completed
> PASID can be freed
>
> There's a 1:1 map from "mm" to PASID ... so reference counting seems
> like overkill. Once the kernel is in the "exit" path, we know that no
> more work can be queued using this PASID.
>
There are two users of a PASID, mm and device driver(FD). If
either one is not done with the PASID, it cannot be reclaimed. As you
mentioned, it could take a long time for the driver to abort. If the
abort ends *after* mmdrop, we are in trouble.
If driver drops reference after abort/drain PASID is done, then we are
safe.

> -Tony