Merge tag 'mm-stable-2024-03-13-20-04' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / arch / arm64 / mm / hugetlbpage.c
index 8116ac5..0f0e10b 100644 (file)
@@ -45,13 +45,6 @@ void __init arm64_hugetlb_cma_reserve(void)
        else
                order = CONT_PMD_SHIFT - PAGE_SHIFT;
 
-       /*
-        * HugeTLB CMA reservation is required for gigantic
-        * huge pages which could not be allocated via the
-        * page allocator. Just warn if there is any change
-        * breaking this assumption.
-        */
-       WARN_ON(order <= MAX_PAGE_ORDER);
        hugetlb_cma_reserve(order);
 }
 #endif /* CONFIG_CMA */
@@ -152,14 +145,14 @@ pte_t huge_ptep_get(pte_t *ptep)
 {
        int ncontig, i;
        size_t pgsize;
-       pte_t orig_pte = ptep_get(ptep);
+       pte_t orig_pte = __ptep_get(ptep);
 
        if (!pte_present(orig_pte) || !pte_cont(orig_pte))
                return orig_pte;
 
        ncontig = num_contig_ptes(page_size(pte_page(orig_pte)), &pgsize);
        for (i = 0; i < ncontig; i++, ptep++) {
-               pte_t pte = ptep_get(ptep);
+               pte_t pte = __ptep_get(ptep);
 
                if (pte_dirty(pte))
                        orig_pte = pte_mkdirty(orig_pte);
@@ -184,11 +177,11 @@ static pte_t get_clear_contig(struct mm_struct *mm,
                             unsigned long pgsize,
                             unsigned long ncontig)
 {
-       pte_t orig_pte = ptep_get(ptep);
+       pte_t orig_pte = __ptep_get(ptep);
        unsigned long i;
 
        for (i = 0; i < ncontig; i++, addr += pgsize, ptep++) {
-               pte_t pte = ptep_get_and_clear(mm, addr, ptep);
+               pte_t pte = __ptep_get_and_clear(mm, addr, ptep);
 
                /*
                 * If HW_AFDBM is enabled, then the HW could turn on
@@ -236,7 +229,7 @@ static void clear_flush(struct mm_struct *mm,
        unsigned long i, saddr = addr;
 
        for (i = 0; i < ncontig; i++, addr += pgsize, ptep++)
-               ptep_clear(mm, addr, ptep);
+               __ptep_get_and_clear(mm, addr, ptep);
 
        flush_tlb_range(&vma, saddr, addr);
 }
@@ -254,12 +247,12 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
 
        if (!pte_present(pte)) {
                for (i = 0; i < ncontig; i++, ptep++, addr += pgsize)
-                       set_pte_at(mm, addr, ptep, pte);
+                       __set_ptes(mm, addr, ptep, pte, 1);
                return;
        }
 
        if (!pte_cont(pte)) {
-               set_pte_at(mm, addr, ptep, pte);
+               __set_ptes(mm, addr, ptep, pte, 1);
                return;
        }
 
@@ -270,7 +263,7 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
        clear_flush(mm, addr, ptep, pgsize, ncontig);
 
        for (i = 0; i < ncontig; i++, ptep++, addr += pgsize, pfn += dpfn)
-               set_pte_at(mm, addr, ptep, pfn_pte(pfn, hugeprot));
+               __set_ptes(mm, addr, ptep, pfn_pte(pfn, hugeprot), 1);
 }
 
 pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
@@ -400,7 +393,7 @@ void huge_pte_clear(struct mm_struct *mm, unsigned long addr,
        ncontig = num_contig_ptes(sz, &pgsize);
 
        for (i = 0; i < ncontig; i++, addr += pgsize, ptep++)
-               pte_clear(mm, addr, ptep);
+               __pte_clear(mm, addr, ptep);
 }
 
 pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
@@ -408,10 +401,10 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
 {
        int ncontig;
        size_t pgsize;
-       pte_t orig_pte = ptep_get(ptep);
+       pte_t orig_pte = __ptep_get(ptep);
 
        if (!pte_cont(orig_pte))
-               return ptep_get_and_clear(mm, addr, ptep);
+               return __ptep_get_and_clear(mm, addr, ptep);
 
        ncontig = find_num_contig(mm, addr, ptep, &pgsize);
 
@@ -431,11 +424,11 @@ static int __cont_access_flags_changed(pte_t *ptep, pte_t pte, int ncontig)
 {
        int i;
 
-       if (pte_write(pte) != pte_write(ptep_get(ptep)))
+       if (pte_write(pte) != pte_write(__ptep_get(ptep)))
                return 1;
 
        for (i = 0; i < ncontig; i++) {
-               pte_t orig_pte = ptep_get(ptep + i);
+               pte_t orig_pte = __ptep_get(ptep + i);
 
                if (pte_dirty(pte) != pte_dirty(orig_pte))
                        return 1;
@@ -459,7 +452,7 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma,
        pte_t orig_pte;
 
        if (!pte_cont(pte))
-               return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
+               return __ptep_set_access_flags(vma, addr, ptep, pte, dirty);
 
        ncontig = find_num_contig(mm, addr, ptep, &pgsize);
        dpfn = pgsize >> PAGE_SHIFT;
@@ -478,7 +471,7 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma,
 
        hugeprot = pte_pgprot(pte);
        for (i = 0; i < ncontig; i++, ptep++, addr += pgsize, pfn += dpfn)
-               set_pte_at(mm, addr, ptep, pfn_pte(pfn, hugeprot));
+               __set_ptes(mm, addr, ptep, pfn_pte(pfn, hugeprot), 1);
 
        return 1;
 }
@@ -492,8 +485,8 @@ void huge_ptep_set_wrprotect(struct mm_struct *mm,
        size_t pgsize;
        pte_t pte;
 
-       if (!pte_cont(READ_ONCE(*ptep))) {
-               ptep_set_wrprotect(mm, addr, ptep);
+       if (!pte_cont(__ptep_get(ptep))) {
+               __ptep_set_wrprotect(mm, addr, ptep);
                return;
        }
 
@@ -507,7 +500,7 @@ void huge_ptep_set_wrprotect(struct mm_struct *mm,
        pfn = pte_pfn(pte);
 
        for (i = 0; i < ncontig; i++, ptep++, addr += pgsize, pfn += dpfn)
-               set_pte_at(mm, addr, ptep, pfn_pte(pfn, hugeprot));
+               __set_ptes(mm, addr, ptep, pfn_pte(pfn, hugeprot), 1);
 }
 
 pte_t huge_ptep_clear_flush(struct vm_area_struct *vma,
@@ -517,7 +510,7 @@ pte_t huge_ptep_clear_flush(struct vm_area_struct *vma,
        size_t pgsize;
        int ncontig;
 
-       if (!pte_cont(READ_ONCE(*ptep)))
+       if (!pte_cont(__ptep_get(ptep)))
                return ptep_clear_flush(vma, addr, ptep);
 
        ncontig = find_num_contig(mm, addr, ptep, &pgsize);
@@ -550,7 +543,7 @@ pte_t huge_ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr
                 * when the permission changes from executable to non-executable
                 * in cases where cpu is affected with errata #2645198.
                 */
-               if (pte_user_exec(READ_ONCE(*ptep)))
+               if (pte_user_exec(__ptep_get(ptep)))
                        return huge_ptep_clear_flush(vma, addr, ptep);
        }
        return huge_ptep_get_and_clear(vma->vm_mm, addr, ptep);