On 2 Sep 2020, at 15:57, Jason Gunthorpe wrote: > On Wed, Sep 02, 2020 at 03:05:39PM -0400, Zi Yan wrote: >> On 2 Sep 2020, at 14:48, Jason Gunthorpe wrote: >> >>> On Wed, Sep 02, 2020 at 02:45:37PM -0400, Zi Yan wrote: >>> >>>>> Surprised this doesn't touch mm/pagewalk.c ? >>>> >>>> 1GB PUD page support is present for DAX purpose, so the code is there >>>> in mm/pagewalk.c already. I only needed to supply ops->pud_entry when using >>>> the functions in mm/pagewalk.c. :) >>> >>> Yes, but doesn't this change what is possible under the mmap_sem >>> without the page table locks? >>> >>> ie I would expect some thing like pmd_trans_unstable() to be required >>> as well for lockless walkers. (and I don't think the pmd code is 100% >>> right either) >>> >> >> Right. I missed that. Thanks for pointing it out. >> The code like this, right? > > Technically all those *pud's are racy too, the design here with the > _unstable function call always seemed weird. I strongly suspect it > should mirror how get_user_pages_fast works for lockless walking You mean READ_ONCE on page table entry pointer first, then use the value for the rest of the loop? I am not quite familiar with this racy check part of the code and happy to hear more about it. — Best Regards, Yan Zi