On Tue, Dec 08, 2020 at 03:57:54PM -0400, Jason Gunthorpe wrote: > What we've talked about is changing the calling convention across all > of this to something like: > > struct gup_output { > struct page **cur; > struct page **end; > unsigned long vaddr; > [..] > } > > And making the manipulator like you saw for GUP common: > > gup_output_single_page() > gup_output_pages() > > Then putting this eveywhere. This is the pattern that we ended up with > in hmm_range_fault, and it seems to be working quite well. > > fast/slow should be much more symmetric in code than they are today, > IMHO.. I think those differences mainly exist because it used to be > siloed in arch code. Some of the differences might be bugs, we've seen > that a few times at least.. something like this: http://git.infradead.org/users/hch/misc.git/commitdiff/c3d019802dbde5a4cc4160e7ec8ccba479b19f97 from this old and not fully working series: http://git.infradead.org/users/hch/misc.git/shortlog/refs/heads/gup-bvec