Skip to content

Commit

Permalink
mm/gup: Expose mm_populate_vma() for use when the vma is known
Browse files Browse the repository at this point in the history
When a vma is known, avoid calling mm_populate to search for the vma to
populate.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
  • Loading branch information
howlett authored and intel-lab-lkp committed Dec 10, 2020
1 parent 3af97a2 commit e89ae5d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
4 changes: 4 additions & 0 deletions include/linux/mm.h
Expand Up @@ -2587,8 +2587,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 */
Expand Down
20 changes: 20 additions & 0 deletions mm/gup.c
Expand Up @@ -1431,6 +1431,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.
*
Expand Down

0 comments on commit e89ae5d

Please sign in to comment.