]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - mm/madvise.c
Merge branch 'akpm' (patches from Andrew)
[mirror_ubuntu-jammy-kernel.git] / mm / madvise.c
index 71d21df2a3f362cc370c8ff158fb03dfa9d2d03c..21a7881a2db41e994c977ae49bddcf6e2ee2ffd8 100644 (file)
@@ -251,7 +251,7 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma,
                index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
 
                page = find_get_entry(mapping, index);
-               if (!radix_tree_exceptional_entry(page)) {
+               if (!xa_is_value(page)) {
                        if (page)
                                put_page(page);
                        continue;
@@ -458,29 +458,30 @@ static void madvise_free_page_range(struct mmu_gather *tlb,
 static int madvise_free_single_vma(struct vm_area_struct *vma,
                        unsigned long start_addr, unsigned long end_addr)
 {
-       unsigned long start, end;
        struct mm_struct *mm = vma->vm_mm;
+       struct mmu_notifier_range range;
        struct mmu_gather tlb;
 
        /* MADV_FREE works for only anon vma at the moment */
        if (!vma_is_anonymous(vma))
                return -EINVAL;
 
-       start = max(vma->vm_start, start_addr);
-       if (start >= vma->vm_end)
+       range.start = max(vma->vm_start, start_addr);
+       if (range.start >= vma->vm_end)
                return -EINVAL;
-       end = min(vma->vm_end, end_addr);
-       if (end <= vma->vm_start)
+       range.end = min(vma->vm_end, end_addr);
+       if (range.end <= vma->vm_start)
                return -EINVAL;
+       mmu_notifier_range_init(&range, mm, range.start, range.end);
 
        lru_add_drain();
-       tlb_gather_mmu(&tlb, mm, start, end);
+       tlb_gather_mmu(&tlb, mm, range.start, range.end);
        update_hiwater_rss(mm);
 
-       mmu_notifier_invalidate_range_start(mm, start, end);
-       madvise_free_page_range(&tlb, vma, start, end);
-       mmu_notifier_invalidate_range_end(mm, start, end);
-       tlb_finish_mmu(&tlb, start, end);
+       mmu_notifier_invalidate_range_start(&range);
+       madvise_free_page_range(&tlb, vma, range.start, range.end);
+       mmu_notifier_invalidate_range_end(&range);
+       tlb_finish_mmu(&tlb, range.start, range.end);
 
        return 0;
 }