diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2013-11-18 04:28:12 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-12-08 19:40:29 -0500 |
commit | 8937ba48dcf62b5cdf7abb93652914af16756f50 (patch) | |
tree | e4c23e5e06ca3fa20318f3a45d3bb9d84f21c6af | |
parent | c8c06f5a0dde0fed260c54d550962187f266ed0d (diff) |
powerpc/mm: Only check for _PAGE_PRESENT in set_pte/pmd functions
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>
-rw-r--r-- | arch/powerpc/mm/pgtable.c | 2 | ||||
-rw-r--r-- | arch/powerpc/mm/pgtable_64.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c index 841e0d00863c..ad90429bbd8b 100644 --- a/arch/powerpc/mm/pgtable.c +++ b/arch/powerpc/mm/pgtable.c | |||
@@ -174,7 +174,7 @@ void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, | |||
174 | pte_t pte) | 174 | pte_t pte) |
175 | { | 175 | { |
176 | #ifdef CONFIG_DEBUG_VM | 176 | #ifdef CONFIG_DEBUG_VM |
177 | WARN_ON(pte_present(*ptep)); | 177 | WARN_ON(pte_val(*ptep) & _PAGE_PRESENT); |
178 | #endif | 178 | #endif |
179 | /* Note: mm->context.id might not yet have been assigned as | 179 | /* Note: mm->context.id might not yet have been assigned as |
180 | * this context might not have been activated yet when this | 180 | * this context might not have been activated yet when this |
diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c index 9d95786aa80f..02e8681fb865 100644 --- a/arch/powerpc/mm/pgtable_64.c +++ b/arch/powerpc/mm/pgtable_64.c | |||
@@ -687,7 +687,7 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr, | |||
687 | pmd_t *pmdp, pmd_t pmd) | 687 | pmd_t *pmdp, pmd_t pmd) |
688 | { | 688 | { |
689 | #ifdef CONFIG_DEBUG_VM | 689 | #ifdef CONFIG_DEBUG_VM |
690 | WARN_ON(!pmd_none(*pmdp)); | 690 | WARN_ON(pmd_val(*pmdp) & _PAGE_PRESENT); |
691 | assert_spin_locked(&mm->page_table_lock); | 691 | assert_spin_locked(&mm->page_table_lock); |
692 | WARN_ON(!pmd_trans_huge(pmd)); | 692 | WARN_ON(!pmd_trans_huge(pmd)); |
693 | #endif | 693 | #endif |