mm/notifier: add migration invalidation type
authorRalph Campbell <rcampbell@nvidia.com>
Thu, 23 Jul 2020 22:30:01 +0000 (15:30 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 28 Jul 2020 19:20:33 +0000 (16:20 -0300)
commit998427b3ad2c769082853880cf353557ec0ec77d
tree05381a8bcb45c98431dff8f52d70d1cf87648ec9
parent5143192cd410c4fc83be09a2e73423765aee072b
mm/notifier: add migration invalidation type

Currently migrate_vma_setup() calls mmu_notifier_invalidate_range_start()
which flushes all device private page mappings whether or not a page is
being migrated to/from device private memory.

In order to not disrupt device mappings that are not being migrated, shift
the responsibility for clearing device private mappings to the device
driver and leave CPU page table unmapping handled by
migrate_vma_setup().

To support this, the caller of migrate_vma_setup() should always set
struct migrate_vma::pgmap_owner to a non NULL value that matches the
device private page->pgmap->owner. This value is then passed to the struct
mmu_notifier_range with a new event type which the driver's invalidation
function can use to avoid device MMU invalidations.

Link: https://lore.kernel.org/r/20200723223004.9586-4-rcampbell@nvidia.com
Signed-off-by: Ralph Campbell <rcampbell@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
include/linux/migrate.h
include/linux/mmu_notifier.h
mm/migrate.c