mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
mm: use single SWP_DEVICE_EXCLUSIVE entry type
There is no need for the distinction anymore; let's merge the readable and writable device-exclusive entries into a single device-exclusive entry type. Link: https://lkml.kernel.org/r/20250210193801.781278-7-david@redhat.com Signed-off-by: David Hildenbrand <david@redhat.com> Acked-by: Simona Vetter <simona.vetter@ffwll.ch> Reviewed-by: Alistair Popple <apopple@nvidia.com> Tested-by: Alistair Popple <apopple@nvidia.com> Cc: Alex Shi <alexs@kernel.org> Cc: Danilo Krummrich <dakr@kernel.org> Cc: Dave Airlie <airlied@gmail.com> Cc: Jann Horn <jannh@google.com> Cc: Jason Gunthorpe <jgg@nvidia.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: John Hubbard <jhubbard@nvidia.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Karol Herbst <kherbst@redhat.com> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Cc: Lyude <lyude@redhat.com> Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Pasha Tatashin <pasha.tatashin@soleen.com> Cc: Peter Xu <peterx@redhat.com> Cc: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: SeongJae Park <sj@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Yanteng Si <si.yanteng@linux.dev> Cc: Barry Song <v-songbaohua@oppo.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
9a91459214
commit
c25465eb76
5 changed files with 10 additions and 39 deletions
|
@ -74,14 +74,13 @@ static inline int current_is_kswapd(void)
|
|||
* to a special SWP_DEVICE_{READ|WRITE} entry.
|
||||
*
|
||||
* When a page is mapped by the device for exclusive access we set the CPU page
|
||||
* table entries to special SWP_DEVICE_EXCLUSIVE_* entries.
|
||||
* table entries to a special SWP_DEVICE_EXCLUSIVE entry.
|
||||
*/
|
||||
#ifdef CONFIG_DEVICE_PRIVATE
|
||||
#define SWP_DEVICE_NUM 4
|
||||
#define SWP_DEVICE_NUM 3
|
||||
#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_WRITE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+2)
|
||||
#define SWP_DEVICE_EXCLUSIVE_READ (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+3)
|
||||
#define SWP_DEVICE_EXCLUSIVE (MAX_SWAPFILES+SWP_HWPOISON_NUM+SWP_MIGRATION_NUM+2)
|
||||
#else
|
||||
#define SWP_DEVICE_NUM 0
|
||||
#endif
|
||||
|
|
|
@ -186,26 +186,16 @@ static inline bool is_writable_device_private_entry(swp_entry_t entry)
|
|||
return unlikely(swp_type(entry) == SWP_DEVICE_WRITE);
|
||||
}
|
||||
|
||||
static inline swp_entry_t make_readable_device_exclusive_entry(pgoff_t offset)
|
||||
static inline swp_entry_t make_device_exclusive_entry(pgoff_t offset)
|
||||
{
|
||||
return swp_entry(SWP_DEVICE_EXCLUSIVE_READ, offset);
|
||||
}
|
||||
|
||||
static inline swp_entry_t make_writable_device_exclusive_entry(pgoff_t offset)
|
||||
{
|
||||
return swp_entry(SWP_DEVICE_EXCLUSIVE_WRITE, offset);
|
||||
return swp_entry(SWP_DEVICE_EXCLUSIVE, offset);
|
||||
}
|
||||
|
||||
static inline bool is_device_exclusive_entry(swp_entry_t entry)
|
||||
{
|
||||
return swp_type(entry) == SWP_DEVICE_EXCLUSIVE_READ ||
|
||||
swp_type(entry) == SWP_DEVICE_EXCLUSIVE_WRITE;
|
||||
return swp_type(entry) == SWP_DEVICE_EXCLUSIVE;
|
||||
}
|
||||
|
||||
static inline bool is_writable_device_exclusive_entry(swp_entry_t entry)
|
||||
{
|
||||
return unlikely(swp_type(entry) == SWP_DEVICE_EXCLUSIVE_WRITE);
|
||||
}
|
||||
#else /* CONFIG_DEVICE_PRIVATE */
|
||||
static inline swp_entry_t make_readable_device_private_entry(pgoff_t offset)
|
||||
{
|
||||
|
@ -227,12 +217,7 @@ static inline bool is_writable_device_private_entry(swp_entry_t entry)
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline swp_entry_t make_readable_device_exclusive_entry(pgoff_t offset)
|
||||
{
|
||||
return swp_entry(0, 0);
|
||||
}
|
||||
|
||||
static inline swp_entry_t make_writable_device_exclusive_entry(pgoff_t offset)
|
||||
static inline swp_entry_t make_device_exclusive_entry(pgoff_t offset)
|
||||
{
|
||||
return swp_entry(0, 0);
|
||||
}
|
||||
|
@ -242,10 +227,6 @@ static inline bool is_device_exclusive_entry(swp_entry_t entry)
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline bool is_writable_device_exclusive_entry(swp_entry_t entry)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_DEVICE_PRIVATE */
|
||||
|
||||
#ifdef CONFIG_MIGRATION
|
||||
|
|
|
@ -225,14 +225,6 @@ static long change_pte_range(struct mmu_gather *tlb,
|
|||
newpte = swp_entry_to_pte(entry);
|
||||
if (pte_swp_uffd_wp(oldpte))
|
||||
newpte = pte_swp_mkuffd_wp(newpte);
|
||||
} else if (is_writable_device_exclusive_entry(entry)) {
|
||||
entry = make_readable_device_exclusive_entry(
|
||||
swp_offset(entry));
|
||||
newpte = swp_entry_to_pte(entry);
|
||||
if (pte_swp_soft_dirty(oldpte))
|
||||
newpte = pte_swp_mksoft_dirty(newpte);
|
||||
if (pte_swp_uffd_wp(oldpte))
|
||||
newpte = pte_swp_mkuffd_wp(newpte);
|
||||
} else if (is_pte_marker_entry(entry)) {
|
||||
/*
|
||||
* Ignore error swap entries unconditionally,
|
||||
|
|
|
@ -196,9 +196,8 @@ EXPORT_SYMBOL(__page_table_check_pud_clear);
|
|||
/* Whether the swap entry cached writable information */
|
||||
static inline bool swap_cached_writable(swp_entry_t entry)
|
||||
{
|
||||
return is_writable_device_exclusive_entry(entry) ||
|
||||
is_writable_device_private_entry(entry) ||
|
||||
is_writable_migration_entry(entry);
|
||||
return is_writable_device_private_entry(entry) ||
|
||||
is_writable_migration_entry(entry);
|
||||
}
|
||||
|
||||
static inline void page_table_check_pte_flags(pte_t pte)
|
||||
|
|
|
@ -2492,7 +2492,7 @@ struct page *make_device_exclusive(struct mm_struct *mm, unsigned long addr,
|
|||
* do_swap_page() will trigger the conversion back while holding the
|
||||
* folio lock.
|
||||
*/
|
||||
entry = make_writable_device_exclusive_entry(page_to_pfn(page));
|
||||
entry = make_device_exclusive_entry(page_to_pfn(page));
|
||||
swp_pte = swp_entry_to_pte(entry);
|
||||
if (pte_soft_dirty(fw.pte))
|
||||
swp_pte = pte_swp_mksoft_dirty(swp_pte);
|
||||
|
|
Loading…
Add table
Reference in a new issue