+#ifdef CONFIG_MIGRATION +static int shmem_migrate_page(struct address_space *mapping,
struct page *newpage, struct page *page,
enum migrate_mode mode)
+{
- struct inode *inode = mapping->host;
- struct shmem_inode_info *info = SHMEM_I(inode);
- if (info->memfile_node.flags & MEMFILE_F_UNMOVABLE)
return -EOPNOTSUPP;
- return migrate_page(mapping, newpage, page, mode);
Wondering how well page migrate would work for private pages on shmem memfd based backend?
From high level:
- KVM unset MEMFILE_F_UNMOVABLE bit to indicate it capable of migrating a page.
- Introduce new 'migrate' callback(s) to memfile_notifier_ops for KVM to register.
- The callback is hooked to migrate_page() here.
- Once page migration requested, shmem calls into the 'migrate' callback(s) to perform additional steps for encrypted memory (For TDX we will call TDH.MEM.PAGE.RELOCATE).
Yes, that would require additional (protocol specific) handling for private pages. Was trying to find where "MEMFILE_F_UNMOVABLE" flag is set currently?
Thanks, Pankaj