powerpc/mm: Only check for _PAGE_PRESENT in set_pte/pmd functions
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Mon, 18 Nov 2013 09:28:12 +0000 (14:58 +0530)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 9 Dec 2013 00:40:29 +0000 (11:40 +1100)
We want to make sure we don't use these function when updating a pte
or pmd entry that have a valid hpte entry, because these functions
don't invalidate them. So limit the check to _PAGE_PRESENT bit.
Numafault core changes use these functions for updating _PAGE_NUMA bits.
That should be ok because when _PAGE_NUMA is set we can be sure that
hpte entries are not present.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Acked-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/mm/pgtable.c
arch/powerpc/mm/pgtable_64.c

index 841e0d00863c94d99cac5c139b887dc97c21cfe1..ad90429bbd8b4b25883738bd867719588ac32b92 100644 (file)
@@ -174,7 +174,7 @@ void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
                pte_t pte)
 {
 #ifdef CONFIG_DEBUG_VM
-       WARN_ON(pte_present(*ptep));
+       WARN_ON(pte_val(*ptep) & _PAGE_PRESENT);
 #endif
        /* Note: mm->context.id might not yet have been assigned as
         * this context might not have been activated yet when this
index 9d95786aa80ffbdcb8601379d774fc1f158006d0..02e8681fb8655a724b6e75746301d8a0cbb6befb 100644 (file)
@@ -687,7 +687,7 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr,
                pmd_t *pmdp, pmd_t pmd)
 {
 #ifdef CONFIG_DEBUG_VM
-       WARN_ON(!pmd_none(*pmdp));
+       WARN_ON(pmd_val(*pmdp) & _PAGE_PRESENT);
        assert_spin_locked(&mm->page_table_lock);
        WARN_ON(!pmd_trans_huge(pmd));
 #endif