mpenttil@xxxxxxxxxx writes: > From: Mika Penttilä <mpenttil@xxxxxxxxxx> > > Migrating file pages and swapcache pages into device memory is not supported. > The decision is done based on page_mapping(). For now, swapcache pages are not migrated. > > Things can however be improved, for swapcache pages. Try to get rid of the swap cache, > and if successful, go ahead as with other anonymous pages. > > As a detail, do not mess with shmem pages, as they handle swap internally. > > Cc: Alistair Popple <apopple@xxxxxxxxxx> > Cc: John Hubbard <jhubbard@xxxxxxxxxx> > Cc: Ralph Campbell <rcampbell@xxxxxxxxxx> > Signed-off-by: Mika Penttilä <mpenttil@xxxxxxxxxx> > --- > mm/migrate_device.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/mm/migrate_device.c b/mm/migrate_device.c > index d30c9de60b0d..e8169c58c341 100644 > --- a/mm/migrate_device.c > +++ b/mm/migrate_device.c > @@ -12,6 +12,7 @@ > #include <linux/mmu_notifier.h> > #include <linux/oom.h> > #include <linux/pagewalk.h> > +#include <linux/shmem_fs.h> > #include <linux/rmap.h> > #include <linux/swapops.h> > #include <asm/tlbflush.h> > @@ -750,10 +751,17 @@ static void __migrate_device_pages(unsigned long *src_pfns, > /* > * For now only support anonymous memory migrating to > * device private or coherent memory. > + * > + * Try to get rid of swap cache if possible. > + * Leave shmem pages alone, they handle swap internally > + * > */ > if (mapping) { > - src_pfns[i] &= ~MIGRATE_PFN_MIGRATE; > - continue; > + if (shmem_mapping(mapping) || > + !folio_free_swap(page_folio(page))) { Should we filter out file pages firstly? > + src_pfns[i] &= ~MIGRATE_PFN_MIGRATE; > + continue; > + } > } > } else if (is_zone_device_page(newpage)) { > /* Best Regards, Huang, Ying