Hi Kevin, On Mon, 18 Apr 2022 06:34:19 +0000, "Tian, Kevin" <kevin.t...@intel.com> wrote:
> > From: Jacob Pan <jacob.jun....@linux.intel.com> > > Sent: Saturday, April 16, 2022 5:00 AM > > > > Hi zhangfei....@foxmail.com, > > > > On Fri, 15 Apr 2022 19:52:03 +0800, "zhangfei....@foxmail.com" > > <zhangfei....@foxmail.com> wrote: > > > > > >>> A PASID might be still used even though it is freed on mm exit. > > > >>> > > > >>> process A: > > > >>> sva_bind(); > > > >>> ioasid_alloc() = N; // Get PASID N for the mm > > > >>> fork(): // spawn process B > > > >>> exit(); > > > >>> ioasid_free(N); > > > >>> > > > >>> process B: > > > >>> device uses PASID N -> failure > > > >>> sva_unbind(); > > > >>> > > > >>> Dave Hansen suggests to take a refcount on the mm whenever > > > >>> binding > > the > > > >>> PASID to a device and drop the refcount on unbinding. The mm > > > >>> won't > > be > > > >>> dropped if the PASID is still bound to it. > > > >>> > > > >>> Fixes: 701fac40384f ("iommu/sva: Assign a PASID to mm on PASID > > > >>> allocation and free it on mm exit") > > > >>> > > Is process A's mm intended to be used by process B? Or you really should > > use PASID N on process B's mm? If the latter, it may work for a while > > until B changes mapping. > > > > It seems you are just extending the life of a defunct mm? > > > > IMHO the intention is not to allow B to access A's mm. > > The problem is that PASID N is released on exit() of A and then > reallocated to B before iommu driver gets the chance to quiesce > the device and clear the PASID entry. According to the discussion > the quiesce operation must be done when driver calls unbind() > instead of in mm exit. In this case a failure is reported when > B tries to call bind() on PASID N due to an already-present entry. > > Dave's patch extending the life of A's mm until unbind() is called. > With it B either gets a different PASID before A's unbind() is > completed or same PASID N pointing to B's mm after A's unbind(). > As long as B gets a different PASID, that is fine. It seems PASID N has no use then. > Thanks > Kevin Thanks, Jacob _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu