On Mon, Oct 14, 2024 at 11:47:58PM -0700, Christoph Hellwig wrote: > Hi Lorenzo, > > sorry for only replying to this so late. No worries, and thanks for taking a look! :) > > On Fri, Sep 27, 2024 at 01:51:11PM +0100, Lorenzo Stoakes wrote: > > The existing generic pagewalk logic permits the walking of page tables, > > invoking callbacks at individual page table levels via user-provided > > mm_walk_ops callbacks. > > > > This is useful for traversing existing page table entries, but precludes > > the ability to establish new ones. > > > > Existing mechanism for performing a walk which also installs page table > > entries if necessary are heavily duplicated throughout the kernel, each > > with semantic differences from one another and largely unavailable for use > > elsewhere. > > I do like the idea of having common code for installing page tables! > Awesome. > Minor nits below: > > > +int walk_page_range_mm(struct mm_struct *mm, unsigned long start, > > unsigned long end, const struct mm_walk_ops *ops, > > void *private) > > It would be good to have a minimum level of documentation for this > function, including how it differs from walk_page_range and why > it should remain internal. Will add on respin! > > > + /* For internal use only. */ > > + if (ops->install_pte) > > + return -EINVAL; > > And this should probably be expanded a bit, including that no exported > symbol should allow inserting arbitrary PTEs. Maybe best done with > a helper to share that comment with the other places that have this > check. > Yeah a helper makes sense actually, a more general 'are these ops valid?' thing. Will update on next respin with some explanation. The next iteration I plan to un-RFC as seems generally the concept is unopposed for this series, will make these changes then. Thanks!