From: Liam R. Howlett Date: Wed, 2 Dec 2020 18:15:58 +0000 (-0500) Subject: mm/gup: Add mm_populate_vma() for use when the vma is known X-Git-Tag: howlett/maple_spf/20210128~57 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=49a624b21b427e4fb4a9e54c8fe6533f2b8272c9;p=users%2Fjedix%2Flinux-maple.git mm/gup: Add mm_populate_vma() for use when the vma is known When a vma is known, avoid calling mm_populate to search for the vma to populate. Signed-off-by: Liam R. Howlett --- diff --git a/include/linux/mm.h b/include/linux/mm.h index ad82ab61beba..2e3151fdb8cc 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2588,8 +2588,12 @@ static inline void mm_populate(unsigned long addr, unsigned long len) /* Ignore errors */ (void) __mm_populate(addr, len, 1); } +extern void mm_populate_vma(struct vm_area_struct *vma, unsigned long start, + unsigned long end); #else static inline void mm_populate(unsigned long addr, unsigned long len) {} +void mm_populate_vma(struct vm_area_struct *vma, unsigned long start, + unsigned long end) {} #endif /* These take the mm semaphore themselves */ diff --git a/mm/gup.c b/mm/gup.c index 3e086b073624..55686fc8128e 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1411,6 +1411,26 @@ long populate_vma_page_range(struct vm_area_struct *vma, NULL, NULL, locked); } +/* + * mm_populate_vma() - Populate a single range in a single vma. + * @vma: The vma to populate. + * @start: The start address to populate + * @end: The end address to stop populating + * + * Note: Ignores errors. + */ +void mm_populate_vma(struct vm_area_struct *vma, unsigned long start, + unsigned long end) +{ + struct mm_struct *mm = current->mm; + int locked = 1; + + mmap_read_lock(mm); + populate_vma_page_range(vma, start, end, &locked); + if (locked) + mmap_read_unlock(mm); +} + /* * __mm_populate - populate and/or mlock pages within a range of address space. *