On Tue 21-08-18 18:10:42, Mike Kravetz wrote: [...] OK, after burning myself when trying to be clever here it seems like your proposed solution is indeed simpler. > +bool huge_pmd_sharing_possible(struct vm_area_struct *vma, > + unsigned long *start, unsigned long *end) > +{ > + unsigned long check_addr = *start; > + bool ret = false; > + > + if (!(vma->vm_flags & VM_MAYSHARE)) > + return ret; > + > + for (check_addr = *start; check_addr < *end; check_addr += PUD_SIZE) { > + unsigned long a_start = check_addr & PUD_MASK; > + unsigned long a_end = a_start + PUD_SIZE; I guess this should be rather in HPAGE_SIZE * PTRS_PER_PTE units as huge_pmd_unshare does. -- Michal Hocko SUSE Labs