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, maddy@linux.ibm.com, mpe@ellerman.id.au
Subject: [PATCH v5 08/13] mm: Add softleaf support for device private migration entries
Date: Fri, 30 Jan 2026 22:10:45 +1100 [thread overview]
Message-ID: <20260130111050.53670-9-jniethe@nvidia.com> (raw)
In-Reply-To: <20260130111050.53670-1-jniethe@nvidia.com>
Add equivalent softleaf entries for the device private migration
swap entries:
- SWP_MIGRATION_DEVICE_READ -> SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ
- SWP_MIGRATION_DEVICE_WRITE -> SOFTLEAF_MIGRATION_DEVICE_PRIVATE_WRITE
- SWP_MIGRATION_DEVICE_READ_EXCLUSIVE -> SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ_EXCLUSIVE
As with their SWP_MIGRATION_DEVICE_xxx kin, the
SOFTLEAF_MIGRATION_DEVICE_PRIVATE_xxx types are used as specializations
of the SWP_MIGRATION_DEVICE_xxx types.
The new entry types have the following relationships:
- SOFTLEAF_MIGRATION_DEVICE_READ is-a SOFTLEAF_MIGRATION_READ
- SOFTLEAF_MIGRATION_READ !is-a SOFTLEAF_MIGRATION_DEVICE_READ
Update the existing softleaf_is_migration_xxx() predicates to reflect
this relationship.
It is possible to distinguish the between a
SOFTLEAF_MIGRATION_DEVICE__xxx and a SOFTLEAF_MIGRATION_xxx type using
the softleaf_is_migration_device_private_xxx() predicates.
In practice, the only reason for introducing this new type is so we know
when to not call pfn_to_page() on the swap entry offset once the device
private pages are removed from the physical address space. That is the
only time that the difference matters.
Creating these new entries will occur in a subsequent patch.
Signed-off-by: Jordan Niethe <jniethe@nvidia.com>
---
v3:
- Separated from previous patch
- s/SOFTLEAF_MIGRATION_DEVICE_/SOFTLEAF_MIGRATION_DEVICE_PRIVATE_/
- Update comment for softleaf_is_migration_read()
---
include/linux/leafops.h | 90 ++++++++++++++++++++++++++++++++++++-----
1 file changed, 80 insertions(+), 10 deletions(-)
diff --git a/include/linux/leafops.h b/include/linux/leafops.h
index 52a1af3eb954..60681ada7b8e 100644
--- a/include/linux/leafops.h
+++ b/include/linux/leafops.h
@@ -28,6 +28,9 @@ enum softleaf_type {
SOFTLEAF_DEVICE_PRIVATE_READ,
SOFTLEAF_DEVICE_PRIVATE_WRITE,
SOFTLEAF_DEVICE_EXCLUSIVE,
+ SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ,
+ SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ_EXCLUSIVE,
+ SOFTLEAF_MIGRATION_DEVICE_PRIVATE_WRITE,
/* H/W posion types. */
SOFTLEAF_HWPOISON,
/* Marker types. */
@@ -165,6 +168,12 @@ static inline enum softleaf_type softleaf_type(softleaf_t entry)
return SOFTLEAF_DEVICE_PRIVATE_READ;
case SWP_DEVICE_EXCLUSIVE:
return SOFTLEAF_DEVICE_EXCLUSIVE;
+ case SWP_MIGRATION_DEVICE_READ:
+ return SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ;
+ case SWP_MIGRATION_DEVICE_WRITE:
+ return SOFTLEAF_MIGRATION_DEVICE_PRIVATE_WRITE;
+ case SWP_MIGRATION_DEVICE_READ_EXCLUSIVE:
+ return SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ_EXCLUSIVE;
#endif
#ifdef CONFIG_MEMORY_FAILURE
case SWP_HWPOISON:
@@ -190,28 +199,88 @@ static inline bool softleaf_is_swap(softleaf_t entry)
return softleaf_type(entry) == SOFTLEAF_SWAP;
}
+/**
+ * softleaf_is_migration_device_private() - Is this leaf entry a migration
+ * device private entry?
+ * @entry: Leaf entry.
+ *
+ * Returns: true if the leaf entry is a device private entry, otherwise false.
+ */
+static inline bool softleaf_is_migration_device_private(softleaf_t entry)
+{
+ switch (softleaf_type(entry)) {
+ case SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ:
+ case SOFTLEAF_MIGRATION_DEVICE_PRIVATE_WRITE:
+ case SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ_EXCLUSIVE:
+ return true;
+ default:
+ return false;
+ }
+}
+
+/**
+ * softleaf_is_migration_device_private_write() - Is this leaf entry a writable
+ * device private migration entry?
+ * @entry: Leaf entry.
+ *
+ * Returns: true if the leaf entry is a writable device private migration entry,
+ * otherwise false.
+ */
+static inline bool softleaf_is_migration_device_private_write(softleaf_t entry)
+{
+ return softleaf_type(entry) == SOFTLEAF_MIGRATION_DEVICE_PRIVATE_WRITE;
+}
+
+/**
+ * softleaf_is_migration_device_private_read() - Is this leaf entry a readable
+ * device private migration entry?
+ * @entry: Leaf entry.
+ *
+ * Returns: true if the leaf entry is an readable device private migration
+ * entry, otherwise false.
+ */
+static inline bool softleaf_is_migration_device_private_read(softleaf_t entry)
+{
+ return softleaf_type(entry) == SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ;
+}
+
+/**
+ * softleaf_is_migration_read_exclusive() - Is this leaf entry an exclusive
+ * readable device private migration entry?
+ * @entry: Leaf entry.
+ *
+ * Returns: true if the leaf entry is an exclusive readable device private
+ * migration entry, otherwise false.
+ */
+static inline bool softleaf_is_migration_device_private_read_exclusive(softleaf_t entry)
+{
+ return softleaf_type(entry) == SOFTLEAF_MIGRATION_DEVICE_PRIVATE_READ_EXCLUSIVE;
+}
+
/**
* softleaf_is_migration_write() - Is this leaf entry a writable migration entry?
* @entry: Leaf entry.
*
- * Returns: true if the leaf entry is a writable migration entry, otherwise
- * false.
+ * Returns: true if the leaf entry is a writable migration entry or a writable
+ * device private migration entry, otherwise false.
*/
static inline bool softleaf_is_migration_write(softleaf_t entry)
{
- return softleaf_type(entry) == SOFTLEAF_MIGRATION_WRITE;
+ return softleaf_type(entry) == SOFTLEAF_MIGRATION_WRITE ||
+ softleaf_is_migration_device_private_write(entry);
}
/**
* softleaf_is_migration_read() - Is this leaf entry a readable migration entry?
* @entry: Leaf entry.
*
- * Returns: true if the leaf entry is a readable migration entry, otherwise
- * false.
+ * Returns: true if the leaf entry is a readable migration entry or a readable
+ * device private migration entry, otherwise false.
*/
static inline bool softleaf_is_migration_read(softleaf_t entry)
{
- return softleaf_type(entry) == SOFTLEAF_MIGRATION_READ;
+ return softleaf_type(entry) == SOFTLEAF_MIGRATION_READ ||
+ softleaf_is_migration_device_private_read(entry);
}
/**
@@ -219,12 +288,13 @@ static inline bool softleaf_is_migration_read(softleaf_t entry)
* readable migration entry?
* @entry: Leaf entry.
*
- * Returns: true if the leaf entry is an exclusive readable migration entry,
- * otherwise false.
+ * Returns: true if the leaf entry is an exclusive readable migration entry or
+ * exclusive readable device private migration entry, otherwise false.
*/
static inline bool softleaf_is_migration_read_exclusive(softleaf_t entry)
{
- return softleaf_type(entry) == SOFTLEAF_MIGRATION_READ_EXCLUSIVE;
+ return softleaf_type(entry) == SOFTLEAF_MIGRATION_READ_EXCLUSIVE ||
+ softleaf_is_migration_device_private_read_exclusive(entry);
}
/**
@@ -241,7 +311,7 @@ static inline bool softleaf_is_migration(softleaf_t entry)
case SOFTLEAF_MIGRATION_WRITE:
return true;
default:
- return false;
+ return softleaf_is_migration_device_private(entry);
}
}
--
2.34.1
next prev parent reply other threads:[~2026-01-30 11:12 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-30 11:10 [PATCH v5 00/13] Remove device private pages from physical address space Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 01/13] mm/migrate_device: Introduce migrate_pfn_from_page() helper Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 02/13] drm/amdkfd: Use migrate pfns internally Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 03/13] mm/migrate_device: Make migrate_device_{pfns,range}() take mpfns Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 04/13] mm/migrate_device: Add migrate PFN flag to track device private pages Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 05/13] mm/page_vma_mapped: Add flag to page_vma_mapped_walk::flags " Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 06/13] mm: Add helpers to create migration entries from struct pages Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 07/13] mm: Add a new swap type for migration entries of device private pages Jordan Niethe
2026-01-30 11:10 ` Jordan Niethe [this message]
2026-01-30 11:10 ` [PATCH v5 09/13] mm: Begin creating device private migration entries Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 10/13] mm: Add helpers to create device private entries from struct pages Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 11/13] mm/util: Add flag to track device private pages in page snapshots Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 12/13] mm/hmm: Add flag to track device private pages Jordan Niethe
2026-01-30 11:10 ` [PATCH v5 13/13] mm: Remove device private pages from the physical address space Jordan Niethe
2026-01-30 21:32 ` Jordan Niethe
2026-02-01 13:03 ` kernel test robot
2026-02-06 13:06 ` [PATCH v5 00/13] Remove device private pages from " David Hildenbrand (Arm)
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=20260130111050.53670-9-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=maddy@linux.ibm.com \
--cc=matthew.brost@intel.com \
--cc=mpe@ellerman.id.au \
--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