Re: [PATCH] mm/THP: Use pmd_populate to update the pmd with pgtable_t pointer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Aneesh,

On Mon, May 13, 2013 at 07:18:57PM +0530, Aneesh Kumar K.V wrote:
> 
> updated one fixing a compile warning.
> 
> From f721c77eb0d6aaf75758e8e93991a05207680ac8 Mon Sep 17 00:00:00 2001
> From: "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxxxxxxx>
> Date: Sun, 12 May 2013 01:59:00 +0530
> Subject: [PATCH] mm/THP: Use pmd_populate to update the pmd with pgtable_t
>  pointer
> 
> We should not use set_pmd_at to update pmd_t with pgtable_t pointer. set_pmd_at
> is used to set pmd with huge pte entries and architectures like ppc64, clear
> few flags from the pte when saving a new entry. Without this change we observe
> bad pte errors like below on ppc64 with THP enabled.
> 
> BUG: Bad page map in process ld mm=0xc000001ee39f4780 pte:7fc3f37848000001 pmd:c000001ec0000000
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>
> ---
>  mm/huge_memory.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 03a89a2..f0bad1f 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -2325,7 +2325,7 @@ static void collapse_huge_page(struct mm_struct *mm,
>  		pte_unmap(pte);
>  		spin_lock(&mm->page_table_lock);
>  		BUG_ON(!pmd_none(*pmd));
> -		set_pmd_at(mm, address, pmd, _pmd);
> +		pmd_populate(mm, pmd, (pgtable_t)_pmd);
>  		spin_unlock(&mm->page_table_lock);
>  		anon_vma_unlock_write(vma->anon_vma);
>  		goto out;

Great, looks like you found the ppc problem with gcc builds and that
explains also why it cannot happen on x86.

But about the fix, did you test it? The above should be:
pmd_populate(mm, pmd, pmd_pgtable(_pmd)) instead.

_pmd is not a pointer to a page struct and the cast seems to be hiding
a bug. _pmd if something is a physical address potentially with some
high bit set not making it a good physical address either.

So you can only use set_pmd_at when establishing hugepmds, and never
for establishing regular pmds that points to regular pagetables. I
guess a comment would be good to add too.

Thanks!
Andrea

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]