On Tue, 5 May 2020 11:15:31 +0200 Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx> wrote: > On Mon, May 04, 2020 at 01:47:23PM -0700, Jacob Pan wrote: > > > > > + arm_smmu_write_ctx_desc(smmu_domain, mm->pasid, > > > > > &invalid_cd); + > > > > > + arm_smmu_tlb_inv_asid(smmu_domain->smmu, > > > > > smmu_mn->cd->asid); > > > > > + /* TODO: invalidate ATS */ > > > > > + > > > > If mm release is called after tlb invalidate range, is it still > > > > necessary to invalidate again? > > > > > > No, provided all mappings from the address space are unmapped and > > > invalidated. I'll double check, but in my tests invalidate range > > > didn't seem to be called for all mappings on mm exit, so I > > > believe we do need this. > > > > > I think it is safe to invalidate again. There was a concern that mm > > release may delete IOMMU driver from the notification list and miss > > tlb invalidate range. I had a hard time to confirm that with ftrace > > while killing a process, many lost events. > > > > If it helps, I have a test that generates small DMA transactions on a > SMMU model. This is the trace for a job on a 8kB mmap'd buffer: > > smmu_bind_alloc: dev=0000:00:03.0 pasid=1 > dev_fault: IOMMU:0000:00:03.0 type=2 reason=0 > addr=0x0000ffff860e6000 pasid=1 group=74 flags=3 prot=2 > dev_page_response: IOMMU:0000:00:03.0 code=0 pasid=1 group=74 > dev_fault: IOMMU:0000:00:03.0 type=2 reason=0 addr=0x0000ffff860e7000 > pasid=1 group=143 flags=3 prot=2 dev_page_response: > IOMMU:0000:00:03.0 code=0 pasid=1 group=143 smmu_mm_invalidate: > pasid=1 start=0xffff860e6000 end=0xffff860e8000 smmu_mm_invalidate: > pasid=1 start=0xffff860e6000 end=0xffff860e8000 smmu_mm_invalidate: > pasid=1 start=0xffff860e8000 end=0xffff860ea000 smmu_mm_invalidate: > pasid=1 start=0xffff860e8000 end=0xffff860ea000 smmu_unbind_free: > dev=0000:00:03.0 pasid=1 > > And this is the same job, but the process immediately kills itself > after launching it. > > smmu_bind_alloc: dev=0000:00:03.0 pasid=1 > dev_fault: IOMMU:0000:00:03.0 type=2 reason=0 > addr=0x0000ffffb9d15000 pasid=1 group=259 flags=3 prot=2 > smmu_mm_release: pasid=1 dev_page_response: IOMMU:0000:00:03.0 code=0 > pasid=1 group=259 dev_fault: IOMMU:0000:00:03.0 type=2 reason=0 > addr=0x0000ffffb9d15000 pasid=1 group=383 flags=3 prot=2 > dev_page_response: IOMMU:0000:00:03.0 code=1 pasid=1 group=383 > smmu_unbind_free: dev=0000:00:03.0 pasid=1 > > We don't get any invalidate_range notification in this case. > Thanks for the confirmation. We do need to invalidate here. > Thanks, > Jean [Jacob Pan]