iommu/io-pgtable: Hook up ->tlb_flush_walk() and ->tlb_flush_leaf() in drivers
[linux-2.6-microblaze.git] / mm / huge_memory.c
index 885642c..1334ede 100644 (file)
@@ -63,10 +63,15 @@ struct page *huge_zero_page __read_mostly;
 
 bool transparent_hugepage_enabled(struct vm_area_struct *vma)
 {
+       /* The addr is used to check if the vma size fits */
+       unsigned long addr = (vma->vm_end & HPAGE_PMD_MASK) - HPAGE_PMD_SIZE;
+
+       if (!transhuge_vma_suitable(vma, addr))
+               return false;
        if (vma_is_anonymous(vma))
                return __transparent_hugepage_enabled(vma);
-       if (vma_is_shmem(vma) && shmem_huge_enabled(vma))
-               return __transparent_hugepage_enabled(vma);
+       if (vma_is_shmem(vma))
+               return shmem_huge_enabled(vma);
 
        return false;
 }
@@ -689,7 +694,7 @@ vm_fault_t do_huge_pmd_anonymous_page(struct vm_fault *vmf)
        struct page *page;
        unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
 
-       if (haddr < vma->vm_start || haddr + HPAGE_PMD_SIZE > vma->vm_end)
+       if (!transhuge_vma_suitable(vma, haddr))
                return VM_FAULT_FALLBACK;
        if (unlikely(anon_vma_prepare(vma)))
                return VM_FAULT_OOM;