|
@@ -82,12 +82,13 @@ pte_t ptep_clear_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
+
|
|
|
#ifndef __HAVE_ARCH_PMDP_SET_ACCESS_FLAGS
|
|
|
int pmdp_set_access_flags(struct vm_area_struct *vma,
|
|
|
unsigned long address, pmd_t *pmdp,
|
|
|
pmd_t entry, int dirty)
|
|
|
{
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
int changed = !pmd_same(*pmdp, entry);
|
|
|
VM_BUG_ON(address & ~HPAGE_PMD_MASK);
|
|
|
if (changed) {
|
|
@@ -95,10 +96,6 @@ int pmdp_set_access_flags(struct vm_area_struct *vma,
|
|
|
flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
|
|
|
}
|
|
|
return changed;
|
|
|
-#else /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
- BUG();
|
|
|
- return 0;
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -107,11 +104,7 @@ int pmdp_clear_flush_young(struct vm_area_struct *vma,
|
|
|
unsigned long address, pmd_t *pmdp)
|
|
|
{
|
|
|
int young;
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
VM_BUG_ON(address & ~HPAGE_PMD_MASK);
|
|
|
-#else
|
|
|
- BUG();
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
young = pmdp_test_and_clear_young(vma, address, pmdp);
|
|
|
if (young)
|
|
|
flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
|
|
@@ -120,7 +113,6 @@ int pmdp_clear_flush_young(struct vm_area_struct *vma,
|
|
|
#endif
|
|
|
|
|
|
#ifndef __HAVE_ARCH_PMDP_HUGE_CLEAR_FLUSH
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
pmd_t *pmdp)
|
|
|
{
|
|
@@ -131,11 +123,9 @@ pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
|
|
|
return pmd;
|
|
|
}
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
#endif
|
|
|
|
|
|
#ifndef __HAVE_ARCH_PMDP_SPLITTING_FLUSH
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
pmd_t *pmdp)
|
|
|
{
|
|
@@ -145,11 +135,9 @@ void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
/* tlb flush only to serialize against gup-fast */
|
|
|
flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
|
|
|
}
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
#endif
|
|
|
|
|
|
#ifndef __HAVE_ARCH_PGTABLE_DEPOSIT
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
|
|
|
pgtable_t pgtable)
|
|
|
{
|
|
@@ -162,11 +150,9 @@ void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
|
|
|
list_add(&pgtable->lru, &pmd_huge_pte(mm, pmdp)->lru);
|
|
|
pmd_huge_pte(mm, pmdp) = pgtable;
|
|
|
}
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
#endif
|
|
|
|
|
|
#ifndef __HAVE_ARCH_PGTABLE_WITHDRAW
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
/* no "address" argument so destroys page coloring of some arch */
|
|
|
pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp)
|
|
|
{
|
|
@@ -185,11 +171,9 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp)
|
|
|
}
|
|
|
return pgtable;
|
|
|
}
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
#endif
|
|
|
|
|
|
#ifndef __HAVE_ARCH_PMDP_INVALIDATE
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
|
|
|
pmd_t *pmdp)
|
|
|
{
|
|
@@ -197,11 +181,9 @@ void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
|
|
|
set_pmd_at(vma->vm_mm, address, pmdp, pmd_mknotpresent(entry));
|
|
|
flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
|
|
|
}
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
#endif
|
|
|
|
|
|
#ifndef pmdp_collapse_flush
|
|
|
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
pmd_t pmdp_collapse_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
pmd_t *pmdp)
|
|
|
{
|
|
@@ -217,5 +199,5 @@ pmd_t pmdp_collapse_flush(struct vm_area_struct *vma, unsigned long address,
|
|
|
flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
|
|
|
return pmd;
|
|
|
}
|
|
|
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
|
|
#endif
|
|
|
+#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|