From: Jordan Niethe <jniethe@nvidia.com>
To: linux-mm@kvack.org
Cc: balbirs@nvidia.com, matthew.brost@intel.com,
akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
dri-devel@lists.freedesktop.org, david@redhat.com,
ziy@nvidia.com, apopple@nvidia.com, lorenzo.stoakes@oracle.com,
lyude@redhat.com, dakr@kernel.org, airlied@gmail.com,
simona@ffwll.ch, rcampbell@nvidia.com, mpenttil@redhat.com,
jgg@nvidia.com, willy@infradead.org,
linuxppc-dev@lists.ozlabs.org, intel-xe@lists.freedesktop.org,
jgg@ziepe.ca, Felix.Kuehling@amd.com, jniethe@nvidia.com,
jhubbard@nvidia.com
Subject: [PATCH v3 07/13] mm: Add a new swap type for migration entries of device private pages
Date: Fri, 23 Jan 2026 17:23:03 +1100 [thread overview]
Message-ID: <20260123062309.23090-8-jniethe@nvidia.com> (raw)
In-Reply-To: <20260123062309.23090-1-jniethe@nvidia.com>
A future change will remove device private pages from the physical
address space. This will mean that device private pages no longer have
pfns and must be handled separately.
When migrating a device private page a migration entry is created for
that page. This includes the pfn for that page. Once device private
pages begin using device memory offsets instead of pfns we will need to
be able to determine which kind of value is in the entry so we can
associate it with the correct page.
Introduce new swap types that correspond to the existing migration
entries:
- SWP_MIGRATION_DEVICE_READ -> SWP_MIGRATION_READ
- SWP_MIGRATION_DEVICE_WRITE -> SWP_MIGRATION_WRITE
- SWP_MIGRATION_DEVICE_READ_EXCLUSIVE -> SWP_MIGRATION_READ_EXCLUSIVE
The SWP_MIGRATION_DEVICE swap types are meant as specializations of the
SWP_MIGRATION types - they are equivalent except the new entries
contain device private offsets.
Forgo creating new predicates for these new types in favour of new
softleaf predicates that will be introduced in a subsequent patch.
Currently the softleaf infrastructure does not have the means for
creating new entries so provide swap entry helpers to that end.
Actually using these creation helpers is deferred until a later patch
when the softleaf predicates have been updated, otherwise the existing
checks for migration entries would be broken.
Note that SWP_DEVICE_NUM is increasing from 3 to 6. This reduces the
maximum number of swap files in the worst case (i.e.
CONFIG_DEVICE_PRIVATE, CONFIG_MIGRATION, CONFIG_MEMORY_FAILURE) from 24
to 21.
Signed-off-by: Jordan Niethe <jniethe@nvidia.com>
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
v1:
- Update for softleaf infrastructure
- Handle make_readable_migration_entry_from_page() and friends
- s/make_device_migration_readable_exclusive_migration_entry/make_readable_exclusive_migration_device_private_entry
- s/is_device_migration_readable_exclusive_entry/is_readable_exclusive_device_private_migration_entry/
v2:
- Add softleaf_is_migration_device_private_read()
v3:
- Move softleaf changes to new patch
- Update commit message to explain the change reduces the number of
swap files.
- Move creating the device private migration changes to a separate
patch
- Remove predicates - we'll rely on softleaf predicates entirely
---
include/linux/swap.h | 8 +++++++-
include/linux/swapops.h | 30 ++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/include/linux/swap.h b/include/linux/swap.h
index 38ca3df68716..c15e3b3067cd 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -74,12 +74,18 @@ static inline int current_is_kswapd(void)
*
* When a page is mapped by the device for exclusive access we set the CPU page
* table entries to a special SWP_DEVICE_EXCLUSIVE entry.
+ *
+ * Because device private pages do not use regular PFNs, special migration
+ * entries are also needed.
*/
#ifdef CONFIG_DEVICE_PRIVATE
-#define SWP_DEVICE_NUM 3
+#define SWP_DEVICE_NUM 6
#define SWP_DEVICE_WRITE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM)
#define SWP_DEVICE_READ (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+1)
#define SWP_DEVICE_EXCLUSIVE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+2)
+#define SWP_MIGRATION_DEVICE_READ (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+3)
+#define SWP_MIGRATION_DEVICE_READ_EXCLUSIVE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+4)
+#define SWP_MIGRATION_DEVICE_WRITE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+5)
#else
#define SWP_DEVICE_NUM 0
#endif
diff --git a/include/linux/swapops.h b/include/linux/swapops.h
index a9ad997bd5ec..a70a6809e9c6 100644
--- a/include/linux/swapops.h
+++ b/include/linux/swapops.h
@@ -148,6 +148,21 @@ static inline swp_entry_t make_device_exclusive_entry(pgoff_t offset)
return swp_entry(SWP_DEVICE_EXCLUSIVE, offset);
}
+static inline swp_entry_t make_readable_migration_device_private_entry(pgoff_t offset)
+{
+ return swp_entry(SWP_MIGRATION_DEVICE_READ, offset);
+}
+
+static inline swp_entry_t make_writable_migration_device_private_entry(pgoff_t offset)
+{
+ return swp_entry(SWP_MIGRATION_DEVICE_WRITE, offset);
+}
+
+static inline swp_entry_t make_readable_exclusive_migration_device_private_entry(pgoff_t offset)
+{
+ return swp_entry(SWP_MIGRATION_DEVICE_READ_EXCLUSIVE, offset);
+}
+
#else /* CONFIG_DEVICE_PRIVATE */
static inline swp_entry_t make_readable_device_private_entry(pgoff_t offset)
{
@@ -164,6 +179,21 @@ static inline swp_entry_t make_device_exclusive_entry(pgoff_t offset)
return swp_entry(0, 0);
}
+static inline swp_entry_t make_readable_migration_device_private_entry(pgoff_t offset)
+{
+ return swp_entry(0, 0);
+}
+
+static inline swp_entry_t make_writable_migration_device_private_entry(pgoff_t offset)
+{
+ return swp_entry(0, 0);
+}
+
+static inline swp_entry_t make_readable_exclusive_migration_device_private_entry(pgoff_t offset)
+{
+ return swp_entry(0, 0);
+}
+
#endif /* CONFIG_DEVICE_PRIVATE */
#ifdef CONFIG_MIGRATION
--
2.34.1
next prev parent reply other threads:[~2026-01-23 6:24 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-23 6:22 [PATCH v3 00/13] Remove device private pages from physical address space Jordan Niethe
2026-01-23 6:22 ` [PATCH v3 01/13] mm/migrate_device: Introduce migrate_pfn_from_page() helper Jordan Niethe
2026-01-28 5:07 ` Kuehling, Felix
2026-01-29 1:06 ` Jordan Niethe
2026-01-23 6:22 ` [PATCH v3 02/13] drm/amdkfd: Use migrate pfns internally Jordan Niethe
2026-01-27 23:15 ` Balbir Singh
2026-01-28 5:08 ` Kuehling, Felix
2026-01-23 6:22 ` [PATCH v3 03/13] mm/migrate_device: Make migrate_device_{pfns,range}() take mpfns Jordan Niethe
2026-01-23 6:23 ` [PATCH v3 04/13] mm/migrate_device: Add migrate PFN flag to track device private pages Jordan Niethe
2026-01-28 5:09 ` Kuehling, Felix
2026-01-23 6:23 ` [PATCH v3 05/13] mm/page_vma_mapped: Add flag to page_vma_mapped_walk::flags " Jordan Niethe
2026-01-27 21:01 ` Zi Yan
2026-01-23 6:23 ` [PATCH v3 06/13] mm: Add helpers to create migration entries from struct pages Jordan Niethe
2026-01-23 6:23 ` Jordan Niethe [this message]
2026-01-23 6:23 ` [PATCH v3 08/13] mm: Add softleaf support for device private migration entries Jordan Niethe
2026-01-23 6:23 ` [PATCH v3 09/13] mm: Begin creating " Jordan Niethe
2026-01-23 6:23 ` [PATCH v3 10/13] mm: Add helpers to create device private entries from struct pages Jordan Niethe
2026-01-23 6:23 ` [PATCH v3 11/13] mm/util: Add flag to track device private pages in page snapshots Jordan Niethe
2026-01-23 6:23 ` [PATCH v3 12/13] mm/hmm: Add flag to track device private pages Jordan Niethe
2026-01-23 6:23 ` [PATCH v3 13/13] mm: Remove device private pages from the physical address space Jordan Niethe
2026-01-27 0:29 ` Jordan Niethe
2026-01-27 21:12 ` Zi Yan
2026-01-27 23:26 ` Jordan Niethe
2026-01-28 5:10 ` Kuehling, Felix
2026-01-29 13:49 ` [PATCH v3 00/13] Remove device private pages from " Huang, Ying
2026-01-29 23:26 ` Alistair Popple
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260123062309.23090-8-jniethe@nvidia.com \
--to=jniethe@nvidia.com \
--cc=Felix.Kuehling@amd.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=apopple@nvidia.com \
--cc=balbirs@nvidia.com \
--cc=dakr@kernel.org \
--cc=david@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jgg@nvidia.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=lyude@redhat.com \
--cc=matthew.brost@intel.com \
--cc=mpenttil@redhat.com \
--cc=rcampbell@nvidia.com \
--cc=simona@ffwll.ch \
--cc=willy@infradead.org \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox