Yes. AMD has tested this with the iommuv2 driver and verified it works correctly. There is a corresponding change in the iommuv2 driver to use the new API. > On Jul 24, 2014, at 6:33 PM, "Andrew Morton" <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > >> On Thu, 24 Jul 2014 16:35:38 +0200 Joerg Roedel <joro@xxxxxxxxxx> wrote: >> >> here is a patch-set to extend the mmu_notifiers in the Linux >> kernel to allow managing CPU external TLBs. Those TLBs may >> be implemented in IOMMUs or any other external device, e.g. >> ATS/PRI capable PCI devices. >> >> The problem with managing these TLBs are the semantics of >> the invalidate_range_start/end call-backs currently >> available. Currently the subsystem using mmu_notifiers has >> to guarantee that no new TLB entries are established between >> invalidate_range_start/end. Furthermore the >> invalidate_range_start() function is called when all pages >> are still mapped and invalidate_range_end() when the pages >> are unmapped an already freed. >> >> So both call-backs can't be used to safely flush any non-CPU >> TLB because _start() is called too early and _end() too >> late. >> >> In the AMD IOMMUv2 driver this is currently implemented by >> assigning an empty page-table to the external device between >> _start() and _end(). But as tests have shown this doesn't >> work as external devices don't re-fault infinitly but enter >> a failure state after some time. >> >> Next problem with this solution is that it causes an >> interrupt storm for IO page faults to be handled when an >> empty page-table is assigned. >> >> To solve this situation I wrote a patch-set to introduce a >> new notifier call-back: mmu_notifer_invalidate_range(). This >> notifier lifts the strict requirements that no new >> references are taken in the range between _start() and >> _end(). When the subsystem can't guarantee that any new >> references are taken is has to provide the >> invalidate_range() call-back to clear any new references in >> there. >> >> It is called between invalidate_range_start() and _end() >> every time the VMM has to wipe out any references to a >> couple of pages. This are usually the places where the CPU >> TLBs are flushed too and where its important that this >> happens before invalidate_range_end() is called. >> >> Any comments and review appreciated! > > It looks pretty simple and harmless. > > I assume the AMD IOMMUv2 driver actually uses this and it's all > tested and good? What is the status of that driver? > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href