mei: trace pci configuration space io
[deliverable/linux.git] / mm / pgtable-generic.c
index 7d3db0247983b22b121290c2203ba2c2fb544ec0..9d4767698a1cd6988d4f71b37ef3f384eff5b3b1 100644 (file)
@@ -132,25 +132,13 @@ pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, unsigned long address,
 {
        pmd_t pmd;
        VM_BUG_ON(address & ~HPAGE_PMD_MASK);
-       VM_BUG_ON(!pmd_trans_huge(*pmdp));
+       VM_BUG_ON(!pmd_trans_huge(*pmdp) && !pmd_devmap(*pmdp));
        pmd = pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp);
        flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
        return pmd;
 }
 #endif
 
-#ifndef __HAVE_ARCH_PMDP_SPLITTING_FLUSH
-void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
-                         pmd_t *pmdp)
-{
-       pmd_t pmd = pmd_mksplitting(*pmdp);
-       VM_BUG_ON(address & ~HPAGE_PMD_MASK);
-       set_pmd_at(vma->vm_mm, address, pmdp, pmd);
-       /* tlb flush only to serialize against gup-fast */
-       flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
-}
-#endif
-
 #ifndef __HAVE_ARCH_PGTABLE_DEPOSIT
 void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
                                pgtable_t pgtable)
@@ -176,13 +164,10 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp)
 
        /* FIFO */
        pgtable = pmd_huge_pte(mm, pmdp);
-       if (list_empty(&pgtable->lru))
-               pmd_huge_pte(mm, pmdp) = NULL;
-       else {
-               pmd_huge_pte(mm, pmdp) = list_entry(pgtable->lru.next,
-                                             struct page, lru);
+       pmd_huge_pte(mm, pmdp) = list_first_entry_or_null(&pgtable->lru,
+                                                         struct page, lru);
+       if (pmd_huge_pte(mm, pmdp))
                list_del(&pgtable->lru);
-       }
        return pgtable;
 }
 #endif
This page took 0.027568 seconds and 5 git commands to generate.