Alistair Popple wrote:
> DAX was the only thing that created pmd_devmap and pud_devmap entries
> however it no longer does as DAX pages are now refcounted normally and
> pXd_trans_huge() returns true for those. Therefore checking both pXd_devmap
> and pXd_trans_huge() is redundant and the former can be removed without
> changing behaviour as it will always be false.
> 
> Signed-off-by: Alistair Popple <apop...@nvidia.com>
[..]
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 8d9d706..31b4110 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -1398,10 +1398,7 @@ static int insert_pfn_pmd(struct vm_area_struct *vma, 
> unsigned long addr,
>       }
>  
>       entry = pmd_mkhuge(pfn_t_pmd(pfn, prot));
> -     if (pfn_t_devmap(pfn))
> -             entry = pmd_mkdevmap(entry);
> -     else
> -             entry = pmd_mkspecial(entry);
> +     entry = pmd_mkspecial(entry);
>       if (write) {
>               entry = pmd_mkyoung(pmd_mkdirty(entry));
>               entry = maybe_pmd_mkwrite(entry, vma);
> @@ -1535,10 +1530,7 @@ static void insert_pfn_pud(struct vm_area_struct *vma, 
> unsigned long addr,
>       }
>  
>       entry = pud_mkhuge(pfn_t_pud(pfn, prot));
> -     if (pfn_t_devmap(pfn))
> -             entry = pud_mkdevmap(entry);
> -     else
> -             entry = pud_mkspecial(entry);
> +     entry = pud_mkspecial(entry);

Wait, why are my gup tests passing?

If all dax pages are special, then vm_normal_page() should never find
them and gup should fail.

...oh, but vm_normal_page_p[mu]d() is not used in the gup path, and
'special' is not set in the pte path.

Yuck, that feels subtle.

I think for any p[mu]d where p[mu]d_page() is ok to use should never set
'special', right?

Reply via email to