On Thu, Jul 21, 2022 at 12:44:58PM -0700, James Houghton wrote: > On Thu, Jul 21, 2022 at 12:09 PM Peter Xu <peterx@xxxxxxxxxx> wrote: > > > > On Wed, Jul 20, 2022 at 01:58:06PM -0700, James Houghton wrote: > > > > > > > @@ -335,12 +337,16 @@ static __always_inline ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm, > > > > > > > copied = 0; > > > > > > > page = NULL; > > > > > > > vma_hpagesize = vma_kernel_pagesize(dst_vma); > > > > > > > + if (use_hgm) > > > > > > > + vma_altpagesize = PAGE_SIZE; > > > > > > > > > > > > Do we need to check the "len" to know whether we should use sub-page > > > > > > mapping or original hpage size? E.g. any old UFFDIO_CONTINUE code will > > > > > > still want the old behavior I think. > > > > > > > > > > I think that's a fair point; however, if we enable HGM and the address > > > > > and len happen to be hstate-aligned > > > > > > > > The address can, but len (note! not "end" here) cannot? > > > > > > They both (dst_start and len) need to be hpage-aligned, otherwise we > > > won't be able to install hstate-sized PTEs. Like if we're installing > > > 4K at the beginning of a 1G hpage, we can't install a PUD, because we > > > only want to install that 4K. > > > > I'm still confused... > > > > Shouldn't one of the major goals of sub-page mapping is to grant user the > > capability to do UFFDIO_CONTINUE with len<hpagesize (so we install pages in > > sub-page level)? If so, why len needs to be always hpagesize aligned? > > Sorry I misunderstood what you were asking. We allow both to be > PAGE_SIZE-aligned. :) That is indeed the goal of HGM. Ah OK. :) > > If dst_start and len were both hpage-aligned, then we *could* set > `use_hgm = false`, and everything would still work. That's what I > thought you were asking about. I don't see any reason to do this > though, as `use_hgm = true` will only grant additional functionality, > and `use_hgm = false` would only -- at best -- be a minor performance > optimization in this case. I just want to make sure this patch won't break existing uffd-minor users, or it'll be an kernel abi breakage. We'd still want to have e.g. existing compiled apps run like before, which iiuc means we should only use sub-page mapping when len!=hpagesize here. I'm not sure it's only about perf - the app may not even be prepared to receive yet another page faults within the same huge page range. -- Peter Xu