On Wed, Feb 10, 2021 at 04:03:21PM -0800, Mike Kravetz wrote: > If page modifications are being monitoried with the soft dirty mechanism, > then this information is contained in page table entries. Tracking is > enabled on a 'per-process' basis. hugetlb pmd sharing allows processes > to share page table entries. This makes pmd sharing incompatible with > soft dirty monitoring. So, pmd sharing must be disabled if soft dirty > tracking is in use. > > The VM_SOFTDIRTY flag is set in all vma's by default. When soft dirty > monitoring is started, the flag is cleared. We can therefore allow pmd > sharing in vmas with the VM_SOFTDIRTY flag set. Check this when deciding > to perform pmd sharing. > > A subsequent patch will add code to allow soft dirty monitoring for hugetlb > vmas. Any existing pmd sharing will be undone at that time. > > Signed-off-by: Mike Kravetz <mike.kravetz@xxxxxxxxxx> > --- > mm/hugetlb.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index b561b6867ec1..cf4aa63be9b1 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -5285,6 +5285,13 @@ static bool vma_shareable(struct vm_area_struct *vma, unsigned long addr) > unsigned long base = addr & PUD_MASK; > unsigned long end = base + PUD_SIZE; > > + /* > + * Do not allow pmd sharing if soft dirty tracking is in use. > + */ > + if (IS_ENABLED(CONFIG_MEM_SOFT_DIRTY) && > + !(vma->vm_flags & VM_SOFTDIRTY)) > + return false; > + Reviewed-by: Peter Xu <peterx@xxxxxxxxxx> The indent of using three tabs is a bit weird to me, though.. I do see this happen somewhere else in the repo too, so maybe it's a way to indent that I don't know. Thanks, -- Peter Xu