Use kmap_local_folio() instead of kmap_local_page().
Replaces 2 calls to compound_head() from unmap_and_put_page() with one.
This prepares us for the removal of unmap_and_put_page().
Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
---
mm/memory.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/mm/memory.c b/mm/memory.c
index 1174f3001307..d63f0d5abcc9 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -6815,6 +6815,7 @@ static int __copy_remote_vm_str(struct mm_struct *mm, unsigned long addr,
while (len) {
int bytes, offset, retval;
void *maddr;
+ struct folio *folio;
struct page *page;
struct vm_area_struct *vma = NULL;
@@ -6830,17 +6831,18 @@ static int __copy_remote_vm_str(struct mm_struct *mm, unsigned long addr,
goto out;
}
+ folio = page_folio(page);
bytes = len;
offset = addr & (PAGE_SIZE - 1);
if (bytes > PAGE_SIZE - offset)
bytes = PAGE_SIZE - offset;
- maddr = kmap_local_page(page);
+ maddr = kmap_local_folio(folio, folio_page_idx(folio, page) * PAGE_SIZE);
retval = strscpy(buf, maddr + offset, bytes);
if (retval >= 0) {
/* Found the end of the string */
buf += retval;
- unmap_and_put_page(page, maddr);
+ folio_release_kmap(folio, maddr);
break;
}
@@ -6858,7 +6860,7 @@ static int __copy_remote_vm_str(struct mm_struct *mm, unsigned long addr,
}
len -= bytes;
- unmap_and_put_page(page, maddr);
+ folio_release_kmap(folio, maddr);
}
out:
--
2.50.0
On 09.07.25 21:40, Vishal Moola (Oracle) wrote: > Use kmap_local_folio() instead of kmap_local_page(). > Replaces 2 calls to compound_head() from unmap_and_put_page() with one. > > This prepares us for the removal of unmap_and_put_page(). > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> > --- > mm/memory.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 1174f3001307..d63f0d5abcc9 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -6815,6 +6815,7 @@ static int __copy_remote_vm_str(struct mm_struct *mm, unsigned long addr, > while (len) { > int bytes, offset, retval; > void *maddr; > + struct folio *folio; > struct page *page; > struct vm_area_struct *vma = NULL; > > @@ -6830,17 +6831,18 @@ static int __copy_remote_vm_str(struct mm_struct *mm, unsigned long addr, > goto out; > } > > + folio = page_folio(page); > bytes = len; > offset = addr & (PAGE_SIZE - 1); > if (bytes > PAGE_SIZE - offset) > bytes = PAGE_SIZE - offset; > > - maddr = kmap_local_page(page); > + maddr = kmap_local_folio(folio, folio_page_idx(folio, page) * PAGE_SIZE); It's weird to go page -> folio -> page ... but maybe that's just the way it's supposed to work here ... :) Acked-by: David Hildenbrand <david@redhat.com> -- Cheers, David / dhildenb
© 2016 - 2025 Red Hat, Inc.