powerpc/mm/book3s: Update pmd_present to look at _PAGE_PRESENT bit
[linux-2.6-block.git] / arch / powerpc / mm / pgtable-book3s64.c
index 01d7c0f7c4f0c2a12d15cd09bd66c88609dd235e..654000da8b156592a361e9fcd7f2f9d3947a7ae8 100644 (file)
@@ -69,7 +69,11 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr,
                pmd_t *pmdp, pmd_t pmd)
 {
 #ifdef CONFIG_DEBUG_VM
-       WARN_ON(pte_present(pmd_pte(*pmdp)) && !pte_protnone(pmd_pte(*pmdp)));
+       /*
+        * Make sure hardware valid bit is not set. We don't do
+        * tlb flush for this update.
+        */
+       WARN_ON(pte_val(pmd_pte(*pmdp)) & _PAGE_PRESENT);
        assert_spin_locked(pmd_lockptr(mm, pmdp));
        WARN_ON(!(pmd_trans_huge(pmd) || pmd_devmap(pmd)));
 #endif
@@ -106,7 +110,7 @@ pmd_t pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
 {
        unsigned long old_pmd;
 
-       old_pmd = pmd_hugepage_update(vma->vm_mm, address, pmdp, _PAGE_PRESENT, 0);
+       old_pmd = pmd_hugepage_update(vma->vm_mm, address, pmdp, _PAGE_PRESENT, _PAGE_INVALID);
        flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
        /*
         * This ensures that generic code that rely on IRQ disabling