On Thu, Apr 14, 2022 at 7:57 AM Liam Howlett <liam.howlett@xxxxxxxxxx> wrote: > > * Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> [220414 02:51]: > > On Mon, 4 Apr 2022 14:35:26 +0000 Liam Howlett <liam.howlett@xxxxxxxxxx> wrote: > > > > > Please add this patch set to your branch. They are based on v5.18-rc1. > > > > Do we get a nice [0/n] cover letter telling us all about this? > > > > I have that all merged up and it compiles. > > > > https://lkml.kernel.org/r/20220402094550.129-1-lipeifeng@xxxxxxxx and > > https://lkml.kernel.org/r/20220412081014.399-1-lipeifeng@xxxxxxxx are > > disabled for now. > > > > > > Several patches were marked > > > > From: Liam > > Signed-off-by: Matthew > > Signed-off-by: Liam > > > > Which makes me wonder whether the attribution was correct. Please > > double-check. > > I'll have a look, thanks. > > > > > > > > > I made a lame attempt to fix up mglru's get_next_vma(), and it probably > > wants a revisit in the maple-tree world anyway. Please check this and > > send me a better version ;) > > What you have below will function, but there is probably a more maple > way of doing things. Happy to help get the sap flowing - it is that > time of the year after all ;) Thanks. Please let me know when the more maple way is ready. I'll test with it. Also I noticed, for the end address to walk_page_range(), Matthew used -1 and you used ULONG_MAX in the maple branch; Andrew used TASK_SIZE below. Having a single value throughout would be great. > > --- a/mm/vmscan.c~mglru-vs-maple-tree > > +++ a/mm/vmscan.c > > @@ -3704,7 +3704,7 @@ static bool get_next_vma(struct mm_walk > > > > while (walk->vma) { > > if (next >= walk->vma->vm_end) { > > - walk->vma = walk->vma->vm_next; > > + walk->vma = find_vma(walk->mm, walk->vma->vm_end); > > continue; > > } > > > > @@ -3712,7 +3712,7 @@ static bool get_next_vma(struct mm_walk > > return false; > > > > if (should_skip_vma(walk->vma->vm_start, walk->vma->vm_end, walk)) { > > - walk->vma = walk->vma->vm_next; > > + walk->vma = find_vma(walk->mm, walk->vma->vm_end); > > continue; > > } > > > > @@ -4062,7 +4062,7 @@ static void walk_mm(struct lruvec *lruve > > /* the caller might be holding the lock for write */ > > if (mmap_read_trylock(mm)) { > > unsigned long start = walk->next_addr; > > - unsigned long end = mm->highest_vm_end; > > + unsigned long end = TASK_SIZE; > > > > err = walk_page_range(mm, start, end, &mm_walk_ops, walk);