Balbir Singh <bsinghar...@gmail.com> writes:

 +      address = start;
> +     do {
> +             local_irq_disable();
> +             find_linux_pte(mm->pgd, address, &is_thp, &hshift);
> +             if (!is_thp)
> +                     shift = PAGE_SHIFT;

It can still be hugetlb if is_thp is false.

> +             else if (hshift && !is_thp)
> +                     shift = hshift;
> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
> +             else
> +                     shift = HPAGE_PMD_SIZE;

That is wrong. I guess it should be shift = HPAGE_PMD_SHIFT. But i am
not sure we need to make it this complex at all. See below.

> +#else
> +             else {
> +                     shift = PAGE_SHIFT;
> +                     pr_warn_once("unsupport page size for mm %p,addr %lx\n",
> +                                     mm, start);
> +             }
> +#endif

I am still not sure this is correct from a pure page table walking
point. Why not

       if (hshift)
          shift = hshift;
       else
          shift = PAGE_SHIFT;

if you didn't want to differentiate between thp and hugetlb mapping you
can drop is_thp completely.

-aneesh

Reply via email to