On Mon, Apr 12, 2021 at 10:28:05AM +0200, Christoph Hellwig wrote: > On Mon, Apr 12, 2021 at 10:00:16AM +0200, Peter Zijlstra wrote: > > +extern int verify_page_range(struct mm_struct *mm, > > No need for the extern here. It's consistent with the rest of the functions there. Also, I personally like that extern. > > +int verify_page_range(struct mm_struct *mm, > > + unsigned long addr, unsigned long size, > > + int (*fn)(pte_t pte, unsigned long addr, void *data), > > + void *data) > > A kerneldoc comment would be nice for this function. > > Otherwise this looks fine. Something like so? /** * verify_page_range() - Scan (and fill) a range of virtual memory and validate PTEs * @mm: mm identifying the virtual memory map * @addr: starting virtual address of the range * @size: size of the range * @fn: function that verifies the PTEs * @data: opaque data passed to @fn * * Scan a region of virtual memory, filling in page tables as necessary and * calling a provided function on each leaf, providing a copy of the * page-table-entry. * * Similar apply_to_page_range(), but does not provide direct access to the * page-tables. * * NOTE! this function does not work correctly vs large pages. * * Return: the first !0 return of the provided function, or 0 on completion. */ int verify_page_range(struct mm_struct *mm, unsigned long addr, unsigned long size, int (*fn)(pte_t pte, unsigned long addr, void *data), void *data)