hi, Linus, On Mon, Aug 05, 2024 at 12:33:58PM -0700, Linus Torvalds wrote: > On Mon, 5 Aug 2024 at 11:55, Linus Torvalds > <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > So please consider this a "maybe something like this" patch, but that > > 'arch_unmap()' really is pretty nasty > > Actually, the whole powerpc vdso code confused me. It's not the vvar > thing that wants this close thing, it's the other ones that have the > remap thing. > > .. and there were two of those error cases that needed to reset the > vdso pointer. > > That all shows just how carefully I was reading this code. > > New version - still untested, but now I've read through it one more > time - attached. we tested this version by applying it directly upon 8be7258aad, but seems it have little impact to performance. still similar regression if comparing to ff388fe5c4. (the data for 8be7258aad and ff388fe5c4 are a little different with what we have in previous report, since we rerun tests by gcc-12 compiler. 0day team change back to gcc-12 from gcc-13 recently due to some issues) ========================================================================================= compiler/cpufreq_governor/kconfig/nr_threads/rootfs/tbox_group/test/testcase/testtime: gcc-12/performance/x86_64-rhel-8.3/100%/debian-12-x86_64-20240206.cgz/lkp-icl-2sp7/pagemove/stress-ng/60s commit: ff388fe5c4 ("mseal: wire up mseal syscall") 8be7258aad ("mseal: add mseal syscall") 4605212a16 <--- your patch ff388fe5c481d39c 8be7258aad44b5e25977a98db13 4605212a162071afdd9c713e936 ---------------- --------------------------- --------------------------- %stddev %change %stddev %change %stddev \ | \ | \ 4958 +1.3% 5024 +1.2% 5020 time.percent_of_cpu_this_job_got 2916 +1.5% 2960 +1.4% 2957 time.system_time 65.85 -7.0% 61.27 -7.0% 61.23 time.user_time 41535129 -4.5% 39669773 -4.3% 39746835 proc-vmstat.numa_hit 41465484 -4.5% 39602956 -4.3% 39677556 proc-vmstat.numa_local 77303973 -4.6% 73780662 -4.4% 73912128 proc-vmstat.pgalloc_normal 77022096 -4.6% 73502058 -4.4% 73637326 proc-vmstat.pgfree 18381956 -4.9% 17473438 -5.0% 17457167 stress-ng.pagemove.ops 306349 -4.9% 291188 -5.0% 290931 stress-ng.pagemove.ops_per_sec 209930 -6.2% 196996 ± 2% -7.6% 193911 stress-ng.pagemove.page_remaps_per_sec 4958 +1.3% 5024 +1.2% 5020 stress-ng.time.percent_of_cpu_this_job_got 2916 +1.5% 2960 +1.4% 2957 stress-ng.time.system_time 1.13 -2.1% 1.10 -2.2% 1.10 perf-stat.i.cpi 0.89 +2.2% 0.91 +2.1% 0.91 perf-stat.i.ipc 1.04 -7.2% 0.97 -7.1% 0.97 perf-stat.overall.MPKI 1.13 -2.3% 1.10 -2.2% 1.10 perf-stat.overall.cpi 1082 +5.4% 1140 +5.3% 1139 perf-stat.overall.cycles-between-cache-misses 0.89 +2.3% 0.91 +2.3% 0.91 perf-stat.overall.ipc 192.79 -3.9% 185.32 ± 2% -2.4% 188.21 ± 3% perf-stat.ps.cpu-migrations 1.048e+13 +2.8% 1.078e+13 +2.6% 1.075e+13 perf-stat.total.instructions 74.97 -1.9 73.07 -2.1 72.88 perf-profile.calltrace.cycles-pp.move_vma.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe.mremap 36.79 -1.6 35.22 -1.6 35.17 perf-profile.calltrace.cycles-pp.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap.do_syscall_64 24.98 -1.3 23.64 -1.4 23.57 perf-profile.calltrace.cycles-pp.copy_vma.move_vma.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe 19.91 -1.1 18.85 -1.1 18.83 perf-profile.calltrace.cycles-pp.__split_vma.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap 10.70 ± 3% -0.9 9.84 ± 3% -0.6 10.06 ± 2% perf-profile.calltrace.cycles-pp.kthread.ret_from_fork.ret_from_fork_asm 10.70 ± 3% -0.9 9.84 ± 3% -0.6 10.06 ± 2% perf-profile.calltrace.cycles-pp.ret_from_fork.ret_from_fork_asm 10.70 ± 3% -0.9 9.84 ± 3% -0.6 10.06 ± 2% perf-profile.calltrace.cycles-pp.ret_from_fork_asm 10.64 ± 3% -0.9 9.79 ± 3% -0.6 10.02 ± 2% perf-profile.calltrace.cycles-pp.smpboot_thread_fn.kthread.ret_from_fork.ret_from_fork_asm 10.63 ± 3% -0.9 9.78 ± 3% -0.6 10.01 ± 2% perf-profile.calltrace.cycles-pp.handle_softirqs.run_ksoftirqd.smpboot_thread_fn.kthread.ret_from_fork 10.63 ± 3% -0.9 9.78 ± 3% -0.6 10.01 ± 2% perf-profile.calltrace.cycles-pp.run_ksoftirqd.smpboot_thread_fn.kthread.ret_from_fork.ret_from_fork_asm 10.63 ± 3% -0.9 9.78 ± 3% -0.6 10.01 ± 2% perf-profile.calltrace.cycles-pp.rcu_core.handle_softirqs.run_ksoftirqd.smpboot_thread_fn.kthread 10.59 ± 3% -0.8 9.74 ± 3% -0.6 9.97 ± 2% perf-profile.calltrace.cycles-pp.rcu_do_batch.rcu_core.handle_softirqs.run_ksoftirqd.smpboot_thread_fn 14.77 -0.8 14.00 -0.9 13.91 perf-profile.calltrace.cycles-pp.vma_merge.copy_vma.move_vma.__do_sys_mremap.do_syscall_64 1.48 -0.5 0.99 -0.5 0.99 perf-profile.calltrace.cycles-pp.mas_find.do_vmi_munmap.move_vma.__do_sys_mremap.do_syscall_64 5.95 ± 3% -0.5 5.47 ± 3% -0.4 5.59 ± 2% perf-profile.calltrace.cycles-pp.kmem_cache_free.rcu_do_batch.rcu_core.handle_softirqs.run_ksoftirqd 7.88 -0.4 7.48 -0.4 7.44 perf-profile.calltrace.cycles-pp.move_page_tables.move_vma.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe 4.62 ± 3% -0.4 4.25 ± 3% -0.3 4.35 ± 2% perf-profile.calltrace.cycles-pp.__slab_free.kmem_cache_free.rcu_do_batch.rcu_core.handle_softirqs 6.72 -0.4 6.36 -0.3 6.39 perf-profile.calltrace.cycles-pp.vm_area_dup.__split_vma.do_vmi_align_munmap.do_vmi_munmap.move_vma 6.15 -0.3 5.82 -0.4 5.80 perf-profile.calltrace.cycles-pp.vma_complete.__split_vma.do_vmi_align_munmap.do_vmi_munmap.move_vma 6.11 -0.3 5.78 -0.3 5.82 perf-profile.calltrace.cycles-pp.kmem_cache_alloc_noprof.vm_area_dup.__split_vma.do_vmi_align_munmap.do_vmi_munmap 5.78 -0.3 5.49 -0.3 5.46 perf-profile.calltrace.cycles-pp.move_ptes.move_page_tables.move_vma.__do_sys_mremap.do_syscall_64 5.54 -0.3 5.25 -0.3 5.22 perf-profile.calltrace.cycles-pp.mas_store_prealloc.vma_complete.__split_vma.do_vmi_align_munmap.do_vmi_munmap 5.56 -0.3 5.28 -0.3 5.24 perf-profile.calltrace.cycles-pp.mas_store_prealloc.vma_merge.copy_vma.move_vma.__do_sys_mremap 5.19 -0.3 4.92 -0.3 4.89 perf-profile.calltrace.cycles-pp.mas_wr_store_entry.mas_store_prealloc.vma_complete.__split_vma.do_vmi_align_munmap 5.20 -0.3 4.94 -0.3 4.91 perf-profile.calltrace.cycles-pp.mas_wr_store_entry.mas_store_prealloc.vma_merge.copy_vma.move_vma 3.20 ± 4% -0.3 2.94 ± 3% -0.2 3.01 ± 2% perf-profile.calltrace.cycles-pp.vm_area_free_rcu_cb.rcu_do_batch.rcu_core.handle_softirqs.run_ksoftirqd 4.09 -0.2 3.85 -0.2 3.85 perf-profile.calltrace.cycles-pp.vm_area_dup.copy_vma.move_vma.__do_sys_mremap.do_syscall_64 4.68 -0.2 4.45 -0.3 4.41 perf-profile.calltrace.cycles-pp.mas_wr_node_store.mas_wr_store_entry.mas_store_prealloc.vma_merge.copy_vma 2.63 ± 3% -0.2 2.42 ± 3% -0.2 2.48 ± 2% perf-profile.calltrace.cycles-pp.kmem_cache_free.vm_area_free_rcu_cb.rcu_do_batch.rcu_core.handle_softirqs 2.36 ± 2% -0.2 2.16 ± 4% -0.2 2.17 ± 2% perf-profile.calltrace.cycles-pp.__memcpy.mas_wr_node_store.mas_wr_store_entry.mas_store_prealloc.vma_complete 3.56 -0.2 3.36 -0.2 3.37 perf-profile.calltrace.cycles-pp.kmem_cache_alloc_noprof.vm_area_dup.copy_vma.move_vma.__do_sys_mremap 4.00 -0.2 3.81 -0.2 3.78 perf-profile.calltrace.cycles-pp.mas_wr_node_store.mas_wr_store_entry.mas_store_prealloc.vma_complete.__split_vma 1.35 -0.2 1.16 -0.2 1.17 perf-profile.calltrace.cycles-pp.mas_find.do_vmi_munmap.do_munmap.mremap_to.__do_sys_mremap 3.40 -0.2 3.22 -0.2 3.21 perf-profile.calltrace.cycles-pp.flush_tlb_mm_range.move_ptes.move_page_tables.move_vma.__do_sys_mremap 2.22 -0.2 2.06 -0.2 2.05 perf-profile.calltrace.cycles-pp.find_vma_prev.copy_vma.move_vma.__do_sys_mremap.do_syscall_64 0.96 -0.2 0.82 -0.1 0.82 perf-profile.calltrace.cycles-pp.mas_walk.mas_find.do_vmi_munmap.do_munmap.mremap_to 3.25 -0.1 3.10 -0.2 3.10 perf-profile.calltrace.cycles-pp.mas_store_gfp.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap 1.81 ± 4% -0.1 1.67 ± 3% -0.1 1.71 ± 2% perf-profile.calltrace.cycles-pp.__slab_free.kmem_cache_free.vm_area_free_rcu_cb.rcu_do_batch.rcu_core 1.97 ± 3% -0.1 1.83 ± 3% -0.2 1.81 ± 4% perf-profile.calltrace.cycles-pp.mod_objcg_state.__memcg_slab_post_alloc_hook.kmem_cache_alloc_noprof.vm_area_dup.__split_vma 2.26 -0.1 2.12 -0.2 2.11 perf-profile.calltrace.cycles-pp.mas_preallocate.__split_vma.do_vmi_align_munmap.do_vmi_munmap.move_vma 3.10 -0.1 2.96 -0.1 2.99 perf-profile.calltrace.cycles-pp.__memcg_slab_post_alloc_hook.kmem_cache_alloc_noprof.vm_area_dup.__split_vma.do_vmi_align_munmap 3.13 -0.1 2.99 -0.1 3.00 perf-profile.calltrace.cycles-pp.unmap_vmas.unmap_region.do_vmi_align_munmap.do_vmi_munmap.move_vma 2.97 -0.1 2.85 -0.2 2.82 perf-profile.calltrace.cycles-pp.anon_vma_clone.__split_vma.do_vmi_align_munmap.do_vmi_munmap.move_vma 2.05 -0.1 1.93 -0.1 1.92 perf-profile.calltrace.cycles-pp.mas_preallocate.vma_merge.copy_vma.move_vma.__do_sys_mremap 8.26 -0.1 8.14 -0.1 8.16 perf-profile.calltrace.cycles-pp.unmap_region.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap 2.45 -0.1 2.34 -0.1 2.34 perf-profile.calltrace.cycles-pp.flush_tlb_func.flush_tlb_mm_range.move_ptes.move_page_tables.move_vma 2.43 -0.1 2.32 -0.1 2.32 perf-profile.calltrace.cycles-pp.unmap_page_range.unmap_vmas.unmap_region.do_vmi_align_munmap.do_vmi_munmap 1.75 ± 2% -0.1 1.64 ± 3% -0.1 1.61 ± 3% perf-profile.calltrace.cycles-pp.vma_prepare.vma_merge.copy_vma.move_vma.__do_sys_mremap 0.54 -0.1 0.44 ± 37% -0.2 0.36 ± 63% perf-profile.calltrace.cycles-pp.mas_find.find_vma_prev.copy_vma.move_vma.__do_sys_mremap 2.21 -0.1 2.11 -0.1 2.11 perf-profile.calltrace.cycles-pp.native_flush_tlb_one_user.flush_tlb_func.flush_tlb_mm_range.move_ptes.move_page_tables 1.27 ± 2% -0.1 1.16 ± 4% -0.1 1.18 ± 2% perf-profile.calltrace.cycles-pp.__memcpy.mas_wr_node_store.mas_wr_store_entry.mas_store_prealloc.vma_merge 1.32 ± 3% -0.1 1.22 ± 3% -0.1 1.25 perf-profile.calltrace.cycles-pp.rcu_cblist_dequeue.rcu_do_batch.rcu_core.handle_softirqs.run_ksoftirqd 1.85 -0.1 1.76 -0.1 1.76 perf-profile.calltrace.cycles-pp.vma_link.copy_vma.move_vma.__do_sys_mremap.do_syscall_64 2.14 ± 2% -0.1 2.05 ± 2% -0.1 2.00 ± 2% perf-profile.calltrace.cycles-pp.kmem_cache_alloc_noprof.anon_vma_clone.__split_vma.do_vmi_align_munmap.do_vmi_munmap 1.40 -0.1 1.31 -0.1 1.30 perf-profile.calltrace.cycles-pp.mas_alloc_nodes.mas_preallocate.__split_vma.do_vmi_align_munmap.do_vmi_munmap 1.77 ± 3% -0.1 1.68 ± 2% -0.1 1.64 ± 2% perf-profile.calltrace.cycles-pp.__memcg_slab_post_alloc_hook.kmem_cache_alloc_noprof.anon_vma_clone.__split_vma.do_vmi_align_munmap 1.39 -0.1 1.30 -0.1 1.30 perf-profile.calltrace.cycles-pp.mas_alloc_nodes.mas_preallocate.vma_merge.copy_vma.move_vma 1.24 -0.1 1.16 -0.1 1.16 perf-profile.calltrace.cycles-pp.kmem_cache_alloc_noprof.mas_alloc_nodes.mas_preallocate.__split_vma.do_vmi_align_munmap 1.40 ± 3% -0.1 1.32 ± 4% -0.1 1.26 ± 5% perf-profile.calltrace.cycles-pp.down_write.vma_prepare.vma_merge.copy_vma.move_vma 0.94 -0.1 0.86 -0.1 0.86 perf-profile.calltrace.cycles-pp.mas_walk.mas_find.do_vmi_munmap.move_vma.__do_sys_mremap 1.23 -0.1 1.15 -0.1 1.15 perf-profile.calltrace.cycles-pp.kmem_cache_alloc_noprof.mas_alloc_nodes.mas_preallocate.vma_merge.copy_vma 1.54 -0.1 1.46 -0.1 1.46 perf-profile.calltrace.cycles-pp.zap_pmd_range.unmap_page_range.unmap_vmas.unmap_region.do_vmi_align_munmap 0.73 -0.1 0.67 -0.1 0.67 perf-profile.calltrace.cycles-pp.mas_walk.find_vma_prev.copy_vma.move_vma.__do_sys_mremap 1.15 -0.1 1.09 -0.1 1.09 perf-profile.calltrace.cycles-pp.___slab_alloc.kmem_cache_alloc_noprof.vm_area_dup.__split_vma.do_vmi_align_munmap 0.60 ± 2% -0.1 0.54 -0.1 0.54 perf-profile.calltrace.cycles-pp.security_mmap_addr.__get_unmapped_area.mremap_to.__do_sys_mremap.do_syscall_64 1.27 -0.1 1.21 -0.1 1.21 perf-profile.calltrace.cycles-pp.mas_wr_store_entry.mas_store_gfp.do_vmi_align_munmap.do_vmi_munmap.move_vma 0.72 -0.1 0.66 -0.1 0.65 perf-profile.calltrace.cycles-pp.mas_prev.vma_merge.copy_vma.move_vma.__do_sys_mremap 0.70 ± 2% -0.1 0.64 ± 3% -0.1 0.64 ± 4% perf-profile.calltrace.cycles-pp.mod_objcg_state.__memcg_slab_post_alloc_hook.kmem_cache_alloc_noprof.vm_area_dup.copy_vma 0.79 -0.1 0.73 -0.1 0.73 perf-profile.calltrace.cycles-pp.___slab_alloc.kmem_cache_alloc_noprof.mas_alloc_nodes.mas_preallocate.__split_vma 0.80 ± 2% -0.1 0.75 -0.1 0.74 ± 2% perf-profile.calltrace.cycles-pp.__call_rcu_common.mas_wr_node_store.mas_wr_store_entry.mas_store_prealloc.vma_merge 0.78 -0.1 0.72 -0.1 0.72 perf-profile.calltrace.cycles-pp.___slab_alloc.kmem_cache_alloc_noprof.mas_alloc_nodes.mas_preallocate.vma_merge 1.02 -0.1 0.96 -0.1 0.96 perf-profile.calltrace.cycles-pp.zap_pte_range.zap_pmd_range.unmap_page_range.unmap_vmas.unmap_region 1.63 -0.1 1.58 -0.1 1.57 perf-profile.calltrace.cycles-pp.__get_unmapped_area.mremap_to.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe 0.62 -0.0 0.58 -0.1 0.57 perf-profile.calltrace.cycles-pp.mas_prev_setup.mas_prev.vma_merge.copy_vma.move_vma 0.60 ± 3% -0.0 0.56 ± 3% -0.0 0.57 ± 2% perf-profile.calltrace.cycles-pp.__memcg_slab_free_hook.kmem_cache_free.vm_area_free_rcu_cb.rcu_do_batch.rcu_core 0.86 -0.0 0.81 -0.0 0.81 perf-profile.calltrace.cycles-pp.mtree_load.vma_to_resize.mremap_to.__do_sys_mremap.do_syscall_64 0.67 -0.0 0.62 -0.0 0.63 perf-profile.calltrace.cycles-pp.percpu_counter_add_batch.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap 1.02 -0.0 0.97 -0.0 0.97 perf-profile.calltrace.cycles-pp.vma_to_resize.mremap_to.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe 0.76 ± 2% -0.0 0.71 -0.0 0.72 ± 2% perf-profile.calltrace.cycles-pp.allocate_slab.___slab_alloc.kmem_cache_alloc_noprof.vm_area_dup.__split_vma 0.70 -0.0 0.66 -0.0 0.66 perf-profile.calltrace.cycles-pp.__call_rcu_common.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap 0.67 ± 2% -0.0 0.63 -0.0 0.63 perf-profile.calltrace.cycles-pp.syscall_return_via_sysret.mremap 0.81 -0.0 0.77 -0.0 0.77 perf-profile.calltrace.cycles-pp.mtree_load.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe.mremap 0.56 -0.0 0.51 -0.1 0.44 ± 40% perf-profile.calltrace.cycles-pp.mas_walk.mas_prev_setup.mas_prev.vma_merge.copy_vma 0.98 -0.0 0.93 -0.0 0.93 perf-profile.calltrace.cycles-pp.mas_find.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap 0.69 -0.0 0.65 -0.0 0.65 perf-profile.calltrace.cycles-pp.___slab_alloc.kmem_cache_alloc_noprof.vm_area_dup.copy_vma.move_vma 0.78 -0.0 0.74 -0.0 0.74 perf-profile.calltrace.cycles-pp.mas_store_prealloc.vma_link.copy_vma.move_vma.__do_sys_mremap 1.12 -0.0 1.08 -0.0 1.07 perf-profile.calltrace.cycles-pp.clear_bhb_loop.mremap 0.68 -0.0 0.65 -0.0 0.65 perf-profile.calltrace.cycles-pp.mas_preallocate.vma_link.copy_vma.move_vma.__do_sys_mremap 1.00 -0.0 0.97 -0.0 0.97 perf-profile.calltrace.cycles-pp.mt_find.vma_merge.copy_vma.move_vma.__do_sys_mremap 0.62 -0.0 0.59 -0.0 0.59 perf-profile.calltrace.cycles-pp.mas_prev_slot.do_vmi_align_munmap.do_vmi_munmap.move_vma.__do_sys_mremap 0.88 -0.0 0.85 -0.0 0.85 perf-profile.calltrace.cycles-pp.userfaultfd_unmap_complete.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe.mremap 1.15 -0.0 1.12 -0.0 1.14 perf-profile.calltrace.cycles-pp.anon_vma_clone.copy_vma.move_vma.__do_sys_mremap.do_syscall_64 0.60 -0.0 0.57 ± 2% -0.0 0.57 perf-profile.calltrace.cycles-pp.__pte_offset_map_lock.zap_pte_range.zap_pmd_range.unmap_page_range.unmap_vmas 0.59 -0.0 0.56 -0.0 0.55 perf-profile.calltrace.cycles-pp.entry_SYSCALL_64.mremap 0.62 ± 2% -0.0 0.59 ± 2% -0.0 0.58 perf-profile.calltrace.cycles-pp.get_old_pud.move_page_tables.move_vma.__do_sys_mremap.do_syscall_64 0.65 -0.0 0.63 -0.0 0.62 perf-profile.calltrace.cycles-pp.mas_update_gap.mas_store_gfp.do_vmi_align_munmap.do_vmi_munmap.move_vma 0.67 +0.1 0.74 +0.1 0.74 perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.__madvise 0.76 +0.1 0.84 +0.1 0.83 perf-profile.calltrace.cycles-pp.__madvise 0.66 +0.1 0.74 +0.1 0.74 perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.__madvise 0.63 +0.1 0.71 +0.1 0.71 perf-profile.calltrace.cycles-pp.__x64_sys_madvise.do_syscall_64.entry_SYSCALL_64_after_hwframe.__madvise 0.62 +0.1 0.70 +0.1 0.70 perf-profile.calltrace.cycles-pp.do_madvise.__x64_sys_madvise.do_syscall_64.entry_SYSCALL_64_after_hwframe.__madvise 3.47 +0.1 3.55 +0.1 3.56 perf-profile.calltrace.cycles-pp.free_pgtables.unmap_region.do_vmi_align_munmap.do_vmi_munmap.move_vma 87.67 +0.8 88.47 +0.6 88.26 perf-profile.calltrace.cycles-pp.mremap 0.00 +0.9 0.86 +0.9 0.86 perf-profile.calltrace.cycles-pp.mas_walk.mas_find.can_modify_mm.do_vmi_munmap.do_munmap 0.00 +0.9 0.88 +0.9 0.88 perf-profile.calltrace.cycles-pp.mas_walk.mas_find.can_modify_mm.mremap_to.__do_sys_mremap 0.00 +0.9 0.90 ± 2% +0.9 0.89 perf-profile.calltrace.cycles-pp.mas_walk.mas_find.can_modify_mm.do_vmi_munmap.move_vma 84.82 +1.0 85.80 +0.8 85.60 perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.mremap 84.66 +1.0 85.65 +0.8 85.45 perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.mremap 83.71 +1.0 84.73 +0.8 84.55 perf-profile.calltrace.cycles-pp.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe.mremap 0.00 +1.1 1.10 +1.1 1.10 perf-profile.calltrace.cycles-pp.mas_find.can_modify_mm.mremap_to.__do_sys_mremap.do_syscall_64 0.00 +1.2 1.21 +1.2 1.22 perf-profile.calltrace.cycles-pp.mas_find.can_modify_mm.do_vmi_munmap.do_munmap.mremap_to 2.09 +1.5 3.60 +1.5 3.60 perf-profile.calltrace.cycles-pp.do_munmap.mremap_to.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe 0.00 +1.5 1.51 +1.5 1.49 perf-profile.calltrace.cycles-pp.mas_find.can_modify_mm.do_vmi_munmap.move_vma.__do_sys_mremap 1.59 +1.5 3.12 +1.5 3.13 perf-profile.calltrace.cycles-pp.do_vmi_munmap.do_munmap.mremap_to.__do_sys_mremap.do_syscall_64 0.00 +1.6 1.62 +1.6 1.62 perf-profile.calltrace.cycles-pp.can_modify_mm.mremap_to.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe 0.00 +1.7 1.72 +1.7 1.73 perf-profile.calltrace.cycles-pp.can_modify_mm.do_vmi_munmap.do_munmap.mremap_to.__do_sys_mremap 0.00 +2.0 2.01 +2.0 1.99 perf-profile.calltrace.cycles-pp.can_modify_mm.do_vmi_munmap.move_vma.__do_sys_mremap.do_syscall_64 5.34 +3.0 8.38 +3.0 8.37 perf-profile.calltrace.cycles-pp.mremap_to.__do_sys_mremap.do_syscall_64.entry_SYSCALL_64_after_hwframe.mremap 75.13 -1.9 73.22 -2.1 73.04 perf-profile.children.cycles-pp.move_vma 37.01 -1.6 35.43 -1.6 35.38 perf-profile.children.cycles-pp.do_vmi_align_munmap 25.06 -1.3 23.71 -1.4 23.65 perf-profile.children.cycles-pp.copy_vma 20.00 -1.1 18.94 -1.1 18.91 perf-profile.children.cycles-pp.__split_vma 19.86 -1.0 18.87 -1.0 18.89 perf-profile.children.cycles-pp.rcu_core 19.84 -1.0 18.85 -1.0 18.87 perf-profile.children.cycles-pp.rcu_do_batch 19.88 -1.0 18.89 -1.0 18.91 perf-profile.children.cycles-pp.handle_softirqs 10.70 ± 3% -0.9 9.84 ± 3% -0.6 10.06 ± 2% perf-profile.children.cycles-pp.kthread 10.70 ± 3% -0.9 9.84 ± 3% -0.6 10.06 ± 2% perf-profile.children.cycles-pp.ret_from_fork 10.70 ± 3% -0.9 9.84 ± 3% -0.6 10.06 ± 2% perf-profile.children.cycles-pp.ret_from_fork_asm 10.64 ± 3% -0.9 9.79 ± 3% -0.6 10.02 ± 2% perf-profile.children.cycles-pp.smpboot_thread_fn 10.63 ± 3% -0.9 9.78 ± 3% -0.6 10.01 ± 2% perf-profile.children.cycles-pp.run_ksoftirqd 17.53 -0.8 16.70 -0.8 16.72 perf-profile.children.cycles-pp.kmem_cache_free 15.28 -0.8 14.47 -0.8 14.48 perf-profile.children.cycles-pp.kmem_cache_alloc_noprof 15.16 -0.8 14.37 -0.9 14.29 perf-profile.children.cycles-pp.vma_merge 12.18 -0.6 11.54 -0.7 11.49 perf-profile.children.cycles-pp.mas_wr_store_entry 11.98 -0.6 11.36 -0.7 11.30 perf-profile.children.cycles-pp.mas_store_prealloc 12.11 -0.6 11.51 -0.6 11.51 perf-profile.children.cycles-pp.__slab_free 10.86 -0.6 10.26 -0.6 10.30 perf-profile.children.cycles-pp.vm_area_dup 9.89 -0.5 9.40 -0.6 9.33 perf-profile.children.cycles-pp.mas_wr_node_store 8.36 -0.4 7.92 -0.4 7.91 perf-profile.children.cycles-pp.__memcg_slab_post_alloc_hook 7.98 -0.4 7.58 -0.4 7.55 perf-profile.children.cycles-pp.move_page_tables 6.69 -0.4 6.33 -0.4 6.32 perf-profile.children.cycles-pp.vma_complete 5.86 -0.3 5.56 -0.3 5.53 perf-profile.children.cycles-pp.move_ptes 5.11 -0.3 4.81 -0.3 4.80 perf-profile.children.cycles-pp.mas_preallocate 6.05 -0.3 5.75 -0.3 5.76 perf-profile.children.cycles-pp.vm_area_free_rcu_cb 2.98 ± 2% -0.3 2.73 ± 4% -0.2 2.75 ± 2% perf-profile.children.cycles-pp.__memcpy 3.48 -0.2 3.26 -0.2 3.27 perf-profile.children.cycles-pp.___slab_alloc 3.46 ± 2% -0.2 3.26 -0.2 3.27 ± 2% perf-profile.children.cycles-pp.mod_objcg_state 2.91 -0.2 2.73 -0.2 2.73 perf-profile.children.cycles-pp.mas_alloc_nodes 2.43 -0.2 2.25 -0.2 2.25 perf-profile.children.cycles-pp.find_vma_prev 3.47 -0.2 3.29 -0.2 3.23 ± 2% perf-profile.children.cycles-pp.down_write 3.46 -0.2 3.28 -0.2 3.27 perf-profile.children.cycles-pp.flush_tlb_mm_range 4.22 -0.2 4.06 -0.2 4.05 perf-profile.children.cycles-pp.anon_vma_clone 3.32 -0.2 3.17 -0.1 3.18 perf-profile.children.cycles-pp.__memcg_slab_free_hook 3.35 -0.2 3.20 -0.2 3.20 perf-profile.children.cycles-pp.mas_store_gfp 2.22 -0.1 2.07 -0.1 2.07 perf-profile.children.cycles-pp.__cond_resched 3.18 -0.1 3.04 -0.1 3.05 perf-profile.children.cycles-pp.unmap_vmas 2.05 ± 2% -0.1 1.91 -0.1 1.93 ± 2% perf-profile.children.cycles-pp.allocate_slab 2.24 -0.1 2.11 ± 2% -0.2 2.08 ± 2% perf-profile.children.cycles-pp.vma_prepare 2.12 -0.1 2.00 -0.1 2.00 perf-profile.children.cycles-pp.__call_rcu_common 2.66 -0.1 2.53 -0.1 2.54 perf-profile.children.cycles-pp.mtree_load 2.46 -0.1 2.34 -0.1 2.34 perf-profile.children.cycles-pp.rcu_cblist_dequeue 2.49 -0.1 2.38 -0.1 2.38 perf-profile.children.cycles-pp.flush_tlb_func 8.32 -0.1 8.21 -0.1 8.22 perf-profile.children.cycles-pp.unmap_region 2.48 -0.1 2.37 -0.1 2.37 perf-profile.children.cycles-pp.unmap_page_range 2.23 -0.1 2.13 -0.1 2.13 perf-profile.children.cycles-pp.native_flush_tlb_one_user 1.77 -0.1 1.67 -0.1 1.67 perf-profile.children.cycles-pp.mas_wr_walk 1.88 -0.1 1.78 -0.1 1.78 perf-profile.children.cycles-pp.vma_link 1.40 -0.1 1.31 -0.1 1.31 perf-profile.children.cycles-pp.shuffle_freelist 1.84 -0.1 1.75 -0.1 1.76 ± 2% perf-profile.children.cycles-pp.up_write 0.97 ± 2% -0.1 0.88 -0.1 0.88 perf-profile.children.cycles-pp.rcu_all_qs 1.03 -0.1 0.95 -0.1 0.95 perf-profile.children.cycles-pp.mas_prev 0.92 -0.1 0.85 -0.1 0.84 perf-profile.children.cycles-pp.mas_prev_setup 1.58 -0.1 1.50 -0.1 1.50 perf-profile.children.cycles-pp.zap_pmd_range 1.24 -0.1 1.17 -0.1 1.16 perf-profile.children.cycles-pp.mas_prev_slot 1.58 -0.1 1.51 -0.1 1.51 perf-profile.children.cycles-pp.mas_update_gap 0.62 -0.1 0.56 -0.1 0.56 perf-profile.children.cycles-pp.security_mmap_addr 0.49 ± 2% -0.1 0.43 -0.1 0.44 ± 2% perf-profile.children.cycles-pp.setup_object 0.90 -0.1 0.84 -0.1 0.85 perf-profile.children.cycles-pp.percpu_counter_add_batch 0.98 -0.1 0.92 -0.1 0.93 perf-profile.children.cycles-pp.mas_pop_node 0.85 -0.1 0.80 -0.1 0.79 perf-profile.children.cycles-pp._raw_spin_lock_irqsave 1.68 -0.1 1.62 -0.1 1.61 perf-profile.children.cycles-pp.__get_unmapped_area 1.23 -0.1 1.18 -0.1 1.17 perf-profile.children.cycles-pp.__pte_offset_map_lock 1.08 -0.1 1.03 -0.1 1.03 perf-profile.children.cycles-pp.zap_pte_range 0.69 ± 2% -0.0 0.64 -0.0 0.65 perf-profile.children.cycles-pp.syscall_return_via_sysret 1.04 -0.0 1.00 -0.1 0.99 perf-profile.children.cycles-pp.vma_to_resize 1.08 -0.0 1.04 -0.0 1.04 perf-profile.children.cycles-pp.mas_leaf_max_gap 0.51 ± 3% -0.0 0.47 -0.0 0.49 ± 4% perf-profile.children.cycles-pp.anon_vma_interval_tree_insert 1.18 -0.0 1.14 -0.1 1.13 perf-profile.children.cycles-pp.clear_bhb_loop 0.57 -0.0 0.53 -0.0 0.53 perf-profile.children.cycles-pp.mas_wr_end_piv 0.43 -0.0 0.40 -0.0 0.39 perf-profile.children.cycles-pp.native_queued_spin_lock_slowpath 1.14 -0.0 1.10 -0.0 1.10 perf-profile.children.cycles-pp.mt_find 0.46 ± 7% -0.0 0.42 ± 2% -0.0 0.42 perf-profile.children.cycles-pp._raw_spin_lock 0.62 -0.0 0.58 -0.0 0.59 perf-profile.children.cycles-pp.__put_partials 0.90 -0.0 0.87 -0.0 0.87 perf-profile.children.cycles-pp.userfaultfd_unmap_complete 0.46 ± 3% -0.0 0.42 ± 3% -0.0 0.42 ± 3% perf-profile.children.cycles-pp.__alloc_pages_noprof 0.61 -0.0 0.58 -0.0 0.58 perf-profile.children.cycles-pp.entry_SYSCALL_64 0.48 -0.0 0.45 ± 2% -0.0 0.45 perf-profile.children.cycles-pp.mas_prev_range 0.64 -0.0 0.61 -0.0 0.60 perf-profile.children.cycles-pp.get_old_pud 0.31 ± 2% -0.0 0.28 ± 3% -0.0 0.28 ± 3% perf-profile.children.cycles-pp.security_vm_enough_memory_mm 0.33 ± 3% -0.0 0.30 ± 2% -0.0 0.30 ± 3% perf-profile.children.cycles-pp.mas_put_in_tree 0.32 ± 2% -0.0 0.29 ± 2% -0.0 0.30 ± 2% perf-profile.children.cycles-pp.tlb_finish_mmu 0.47 -0.0 0.44 ± 2% -0.0 0.44 perf-profile.children.cycles-pp.rcu_segcblist_enqueue 0.33 -0.0 0.31 -0.0 0.32 perf-profile.children.cycles-pp.mas_destroy 0.40 -0.0 0.39 -0.0 0.38 perf-profile.children.cycles-pp.entry_SYSRETQ_unsafe_stack 0.35 -0.0 0.34 -0.0 0.33 perf-profile.children.cycles-pp.__rb_insert_augmented 0.25 ± 4% -0.0 0.23 ± 3% -0.0 0.23 ± 3% perf-profile.children.cycles-pp.rmqueue 0.39 -0.0 0.37 -0.0 0.37 perf-profile.children.cycles-pp.down_write_killable 0.18 ± 3% -0.0 0.17 ± 5% -0.0 0.16 ± 5% perf-profile.children.cycles-pp.cap_vm_enough_memory 0.22 ± 4% -0.0 0.20 ± 3% -0.0 0.20 ± 3% perf-profile.children.cycles-pp.__rmqueue_pcplist 0.21 ± 4% -0.0 0.19 ± 3% -0.0 0.19 ± 3% perf-profile.children.cycles-pp.rmqueue_bulk 0.52 -0.0 0.51 ± 2% -0.0 0.50 perf-profile.children.cycles-pp.__pte_offset_map 0.26 -0.0 0.24 ± 2% -0.0 0.24 ± 2% perf-profile.children.cycles-pp.syscall_exit_to_user_mode 0.30 ± 2% -0.0 0.28 ± 2% -0.0 0.28 ± 3% perf-profile.children.cycles-pp.__vm_enough_memory 0.29 -0.0 0.27 -0.0 0.27 ± 3% perf-profile.children.cycles-pp.tlb_gather_mmu 0.16 ± 2% -0.0 0.14 ± 3% -0.0 0.14 ± 4% perf-profile.children.cycles-pp.mas_wr_append 0.28 ± 2% -0.0 0.26 -0.0 0.26 perf-profile.children.cycles-pp.khugepaged_enter_vma 0.32 -0.0 0.30 -0.0 0.30 perf-profile.children.cycles-pp.mas_wr_store_setup 0.20 ± 2% -0.0 0.18 ± 2% -0.0 0.18 ± 2% perf-profile.children.cycles-pp.__thp_vma_allowable_orders 0.32 -0.0 0.30 -0.0 0.30 ± 2% perf-profile.children.cycles-pp.pte_offset_map_nolock 0.09 ± 4% -0.0 0.08 ± 5% -0.0 0.07 ± 6% perf-profile.children.cycles-pp.vma_dup_policy 0.36 -0.0 0.35 -0.0 0.35 perf-profile.children.cycles-pp.madvise_vma_behavior 0.16 ± 3% -0.0 0.16 ± 2% -0.0 0.15 ± 3% perf-profile.children.cycles-pp._find_next_bit 0.14 ± 3% +0.0 0.15 ± 2% +0.0 0.15 perf-profile.children.cycles-pp.free_pgd_range 0.08 ± 4% +0.0 0.10 ± 4% +0.0 0.10 ± 4% perf-profile.children.cycles-pp.mm_get_unmapped_area_vmflags 0.78 +0.1 0.85 +0.1 0.85 perf-profile.children.cycles-pp.__madvise 0.63 +0.1 0.71 +0.1 0.71 perf-profile.children.cycles-pp.__x64_sys_madvise 0.63 +0.1 0.70 +0.1 0.70 perf-profile.children.cycles-pp.do_madvise 3.52 +0.1 3.60 +0.1 3.61 perf-profile.children.cycles-pp.free_pgtables 0.00 +0.1 0.09 +0.1 0.09 ± 4% perf-profile.children.cycles-pp.can_modify_mm_madv 1.30 +0.2 1.46 +0.2 1.46 perf-profile.children.cycles-pp.mas_next_slot 88.06 +0.8 88.84 +0.6 88.64 perf-profile.children.cycles-pp.mremap 83.81 +1.0 84.84 +0.8 84.65 perf-profile.children.cycles-pp.__do_sys_mremap 85.98 +1.0 87.02 +0.8 86.82 perf-profile.children.cycles-pp.entry_SYSCALL_64_after_hwframe 85.50 +1.1 86.56 +0.9 86.36 perf-profile.children.cycles-pp.do_syscall_64 2.12 +1.5 3.62 +1.5 3.63 perf-profile.children.cycles-pp.do_munmap 40.41 +1.5 41.93 +1.5 41.86 perf-profile.children.cycles-pp.do_vmi_munmap 3.62 +2.4 5.98 +2.3 5.95 perf-profile.children.cycles-pp.mas_walk 5.40 +3.0 8.44 +3.0 8.43 perf-profile.children.cycles-pp.mremap_to 5.26 +3.2 8.48 +3.2 8.47 perf-profile.children.cycles-pp.mas_find 0.00 +5.5 5.46 +5.4 5.45 perf-profile.children.cycles-pp.can_modify_mm 11.49 -0.6 10.92 -0.6 10.93 perf-profile.self.cycles-pp.__slab_free 4.32 -0.2 4.07 -0.3 3.98 ± 2% perf-profile.self.cycles-pp.__memcg_slab_post_alloc_hook 1.96 -0.2 1.80 ± 4% -0.1 1.83 ± 2% perf-profile.self.cycles-pp.__memcpy 2.36 ± 2% -0.1 2.24 ± 2% -0.2 2.19 ± 2% perf-profile.self.cycles-pp.down_write 2.42 -0.1 2.30 -0.1 2.32 perf-profile.self.cycles-pp.rcu_cblist_dequeue 2.33 -0.1 2.22 -0.1 2.23 perf-profile.self.cycles-pp.mtree_load 2.21 -0.1 2.10 -0.1 2.10 perf-profile.self.cycles-pp.native_flush_tlb_one_user 1.62 -0.1 1.54 -0.1 1.55 ± 2% perf-profile.self.cycles-pp.__memcg_slab_free_hook 1.52 -0.1 1.44 -0.1 1.44 perf-profile.self.cycles-pp.mas_wr_walk 1.15 ± 2% -0.1 1.07 -0.1 1.08 perf-profile.self.cycles-pp.shuffle_freelist 1.53 -0.1 1.45 -0.1 1.47 ± 2% perf-profile.self.cycles-pp.up_write 1.44 -0.1 1.36 -0.1 1.36 perf-profile.self.cycles-pp.__call_rcu_common 0.70 ± 2% -0.1 0.62 -0.1 0.63 perf-profile.self.cycles-pp.rcu_all_qs 1.72 -0.1 1.66 -0.1 1.66 perf-profile.self.cycles-pp.mod_objcg_state 3.77 -0.1 3.70 ± 4% -0.2 3.62 ± 2% perf-profile.self.cycles-pp.mas_wr_node_store 0.51 ± 3% -0.1 0.45 -0.1 0.45 perf-profile.self.cycles-pp.security_mmap_addr 0.94 ± 2% -0.1 0.88 ± 4% -0.1 0.88 ± 2% perf-profile.self.cycles-pp.vm_area_dup 1.18 -0.1 1.12 -0.1 1.12 perf-profile.self.cycles-pp.vma_merge 1.38 -0.1 1.33 -0.1 1.32 perf-profile.self.cycles-pp.do_vmi_align_munmap 0.89 -0.1 0.83 -0.1 0.83 perf-profile.self.cycles-pp.___slab_alloc 0.62 -0.1 0.56 ± 2% -0.1 0.56 ± 2% perf-profile.self.cycles-pp.mremap 1.00 -0.1 0.95 -0.1 0.95 perf-profile.self.cycles-pp.mas_preallocate 0.98 -0.1 0.93 -0.0 0.93 perf-profile.self.cycles-pp.move_ptes 0.99 -0.1 0.94 -0.1 0.93 perf-profile.self.cycles-pp.mas_prev_slot 1.09 -0.0 1.04 ± 2% -0.0 1.05 perf-profile.self.cycles-pp.__cond_resched 0.94 -0.0 0.90 -0.1 0.89 perf-profile.self.cycles-pp.vm_area_free_rcu_cb 0.85 -0.0 0.80 -0.0 0.81 perf-profile.self.cycles-pp.mas_pop_node 0.77 -0.0 0.72 -0.0 0.73 perf-profile.self.cycles-pp.percpu_counter_add_batch 0.68 -0.0 0.63 -0.0 0.64 perf-profile.self.cycles-pp.__split_vma 1.17 -0.0 1.13 -0.1 1.12 perf-profile.self.cycles-pp.clear_bhb_loop 0.95 -0.0 0.91 -0.0 0.91 perf-profile.self.cycles-pp.mas_leaf_max_gap 0.79 -0.0 0.75 -0.0 0.76 perf-profile.self.cycles-pp.mas_wr_store_entry 0.44 -0.0 0.40 -0.0 0.40 perf-profile.self.cycles-pp.do_munmap 1.22 -0.0 1.18 -0.0 1.19 perf-profile.self.cycles-pp.move_vma 0.89 -0.0 0.86 -0.0 0.86 perf-profile.self.cycles-pp.mas_store_gfp 0.45 -0.0 0.42 -0.0 0.42 perf-profile.self.cycles-pp.mas_wr_end_piv 0.43 ± 2% -0.0 0.40 -0.0 0.39 perf-profile.self.cycles-pp.native_queued_spin_lock_slowpath 0.78 -0.0 0.75 -0.0 0.76 perf-profile.self.cycles-pp.userfaultfd_unmap_complete 0.66 -0.0 0.63 -0.0 0.63 perf-profile.self.cycles-pp.mas_store_prealloc 1.49 -0.0 1.46 -0.0 1.45 perf-profile.self.cycles-pp.kmem_cache_free 0.60 -0.0 0.58 -0.0 0.58 perf-profile.self.cycles-pp.unmap_region 0.86 -0.0 0.83 -0.0 0.83 perf-profile.self.cycles-pp.move_page_tables 0.43 ± 4% -0.0 0.40 -0.0 0.42 ± 4% perf-profile.self.cycles-pp.anon_vma_interval_tree_insert 0.99 -0.0 0.97 -0.0 0.97 perf-profile.self.cycles-pp.mt_find 0.36 ± 3% -0.0 0.33 ± 2% -0.0 0.33 ± 2% perf-profile.self.cycles-pp.syscall_return_via_sysret 0.71 -0.0 0.68 -0.0 0.68 perf-profile.self.cycles-pp.unmap_page_range 0.55 -0.0 0.52 -0.0 0.51 perf-profile.self.cycles-pp.get_old_pud 0.49 -0.0 0.47 -0.0 0.47 perf-profile.self.cycles-pp.find_vma_prev 0.27 -0.0 0.25 -0.0 0.25 ± 2% perf-profile.self.cycles-pp.mas_prev_setup 0.41 -0.0 0.39 -0.0 0.39 perf-profile.self.cycles-pp._raw_spin_lock_irqsave 0.61 -0.0 0.58 -0.0 0.58 perf-profile.self.cycles-pp.copy_vma 0.47 -0.0 0.45 ± 2% -0.0 0.45 perf-profile.self.cycles-pp.flush_tlb_mm_range 0.37 ± 6% -0.0 0.35 ± 2% -0.0 0.35 perf-profile.self.cycles-pp._raw_spin_lock 0.42 ± 2% -0.0 0.40 ± 2% -0.0 0.40 perf-profile.self.cycles-pp.rcu_segcblist_enqueue 0.27 -0.0 0.25 ± 2% -0.0 0.25 ± 2% perf-profile.self.cycles-pp.mas_put_in_tree 0.39 -0.0 0.37 -0.0 0.37 perf-profile.self.cycles-pp.entry_SYSRETQ_unsafe_stack 0.44 -0.0 0.42 -0.0 0.42 perf-profile.self.cycles-pp.mas_update_gap 0.49 -0.0 0.47 -0.0 0.48 ± 2% perf-profile.self.cycles-pp.refill_obj_stock 0.27 ± 2% -0.0 0.25 ± 2% -0.0 0.25 perf-profile.self.cycles-pp.tlb_finish_mmu 0.34 -0.0 0.32 -0.0 0.32 ± 2% perf-profile.self.cycles-pp.zap_pmd_range 0.48 -0.0 0.46 -0.0 0.46 perf-profile.self.cycles-pp.entry_SYSCALL_64_after_hwframe 0.28 -0.0 0.26 -0.0 0.26 perf-profile.self.cycles-pp.mas_alloc_nodes 0.24 ± 2% -0.0 0.22 -0.0 0.22 perf-profile.self.cycles-pp.mas_prev 0.14 ± 3% -0.0 0.12 ± 2% -0.0 0.12 ± 2% perf-profile.self.cycles-pp.syscall_exit_to_user_mode 0.26 -0.0 0.24 -0.0 0.24 perf-profile.self.cycles-pp.__rb_insert_augmented 0.40 -0.0 0.39 -0.0 0.39 perf-profile.self.cycles-pp.__pte_offset_map_lock 0.28 -0.0 0.26 ± 3% -0.0 0.26 perf-profile.self.cycles-pp.mas_prev_range 0.33 ± 2% -0.0 0.32 -0.0 0.31 perf-profile.self.cycles-pp.zap_pte_range 0.28 -0.0 0.26 -0.0 0.26 perf-profile.self.cycles-pp.flush_tlb_func 0.44 -0.0 0.42 ± 2% -0.0 0.42 perf-profile.self.cycles-pp.__pte_offset_map 0.22 -0.0 0.21 ± 2% -0.0 0.21 ± 2% perf-profile.self.cycles-pp.entry_SYSCALL_64 0.17 -0.0 0.16 -0.0 0.16 perf-profile.self.cycles-pp.__thp_vma_allowable_orders 0.10 -0.0 0.09 -0.0 0.09 ± 3% perf-profile.self.cycles-pp.mod_node_page_state 0.06 -0.0 0.05 -0.0 0.05 perf-profile.self.cycles-pp.vma_dup_policy 0.06 ± 5% +0.0 0.07 +0.0 0.07 ± 4% perf-profile.self.cycles-pp.mm_get_unmapped_area_vmflags 0.11 ± 4% +0.0 0.12 ± 4% +0.0 0.12 ± 2% perf-profile.self.cycles-pp.free_pgd_range 0.21 +0.0 0.22 ± 2% +0.0 0.22 perf-profile.self.cycles-pp.thp_get_unmapped_area_vmflags 0.45 +0.0 0.48 +0.0 0.48 perf-profile.self.cycles-pp.do_vmi_munmap 0.27 +0.0 0.32 +0.0 0.31 perf-profile.self.cycles-pp.free_pgtables 0.36 ± 2% +0.1 0.44 +0.1 0.45 perf-profile.self.cycles-pp.unlink_anon_vmas 1.06 +0.1 1.19 +0.1 1.19 perf-profile.self.cycles-pp.mas_next_slot 1.49 +0.5 2.01 +0.5 2.02 perf-profile.self.cycles-pp.mas_find 0.00 +1.4 1.38 +1.4 1.38 perf-profile.self.cycles-pp.can_modify_mm 3.15 +2.1 5.23 +2.1 5.22 perf-profile.self.cycles-pp.mas_walk > > Linus > arch/powerpc/include/asm/mmu_context.h | 9 --------- > arch/powerpc/kernel/vdso.c | 17 +++++++++++++++-- > arch/x86/include/asm/mmu_context.h | 5 ----- > include/asm-generic/mm_hooks.h | 11 +++-------- > include/linux/mm_types.h | 2 ++ > mm/mmap.c | 15 ++++++--------- > 6 files changed, 26 insertions(+), 33 deletions(-) > > diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h > index 37bffa0f7918..a334a1368848 100644 > --- a/arch/powerpc/include/asm/mmu_context.h > +++ b/arch/powerpc/include/asm/mmu_context.h > @@ -260,15 +260,6 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, > > extern void arch_exit_mmap(struct mm_struct *mm); > > -static inline void arch_unmap(struct mm_struct *mm, > - unsigned long start, unsigned long end) > -{ > - unsigned long vdso_base = (unsigned long)mm->context.vdso; > - > - if (start <= vdso_base && vdso_base < end) > - mm->context.vdso = NULL; > -} > - > #ifdef CONFIG_PPC_MEM_KEYS > bool arch_vma_access_permitted(struct vm_area_struct *vma, bool write, > bool execute, bool foreign); > diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c > index 7a2ff9010f17..6fa041a6690a 100644 > --- a/arch/powerpc/kernel/vdso.c > +++ b/arch/powerpc/kernel/vdso.c > @@ -81,6 +81,13 @@ static int vdso64_mremap(const struct vm_special_mapping *sm, struct vm_area_str > return vdso_mremap(sm, new_vma, &vdso64_end - &vdso64_start); > } > > +static int vvar_close(const struct vm_special_mapping *sm, > + struct vm_area_struct *vma) > +{ > + struct mm_struct *mm = vma->vm_mm; > + mm->context.vdso = NULL; > +} > + > static vm_fault_t vvar_fault(const struct vm_special_mapping *sm, > struct vm_area_struct *vma, struct vm_fault *vmf); > > @@ -92,11 +99,13 @@ static struct vm_special_mapping vvar_spec __ro_after_init = { > static struct vm_special_mapping vdso32_spec __ro_after_init = { > .name = "[vdso]", > .mremap = vdso32_mremap, > + .close = vvar_close, > }; > > static struct vm_special_mapping vdso64_spec __ro_after_init = { > .name = "[vdso]", > .mremap = vdso64_mremap, > + .close = vvar_close, > }; > > #ifdef CONFIG_TIME_NS > @@ -207,8 +216,10 @@ static int __arch_setup_additional_pages(struct linux_binprm *bprm, int uses_int > vma = _install_special_mapping(mm, vdso_base, vvar_size, > VM_READ | VM_MAYREAD | VM_IO | > VM_DONTDUMP | VM_PFNMAP, &vvar_spec); > - if (IS_ERR(vma)) > + if (IS_ERR(vma)) { > + mm->context.vdso = NULL; > return PTR_ERR(vma); > + } > > /* > * our vma flags don't have VM_WRITE so by default, the process isn't > @@ -223,8 +234,10 @@ static int __arch_setup_additional_pages(struct linux_binprm *bprm, int uses_int > vma = _install_special_mapping(mm, vdso_base + vvar_size, vdso_size, > VM_READ | VM_EXEC | VM_MAYREAD | > VM_MAYWRITE | VM_MAYEXEC, vdso_spec); > - if (IS_ERR(vma)) > + if (IS_ERR(vma)) { > + mm->context.vdso = NULL; > do_munmap(mm, vdso_base, vvar_size, NULL); > + } > > return PTR_ERR_OR_ZERO(vma); > } > diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h > index 8dac45a2c7fc..80f2a3187aa6 100644 > --- a/arch/x86/include/asm/mmu_context.h > +++ b/arch/x86/include/asm/mmu_context.h > @@ -232,11 +232,6 @@ static inline bool is_64bit_mm(struct mm_struct *mm) > } > #endif > > -static inline void arch_unmap(struct mm_struct *mm, unsigned long start, > - unsigned long end) > -{ > -} > - > /* > * We only want to enforce protection keys on the current process > * because we effectively have no access to PKRU for other > diff --git a/include/asm-generic/mm_hooks.h b/include/asm-generic/mm_hooks.h > index 4dbb177d1150..6eea3b3c1e65 100644 > --- a/include/asm-generic/mm_hooks.h > +++ b/include/asm-generic/mm_hooks.h > @@ -1,8 +1,8 @@ > /* SPDX-License-Identifier: GPL-2.0 */ > /* > - * Define generic no-op hooks for arch_dup_mmap, arch_exit_mmap > - * and arch_unmap to be included in asm-FOO/mmu_context.h for any > - * arch FOO which doesn't need to hook these. > + * Define generic no-op hooks for arch_dup_mmap and arch_exit_mmap > + * to be included in asm-FOO/mmu_context.h for any arch FOO which > + * doesn't need to hook these. > */ > #ifndef _ASM_GENERIC_MM_HOOKS_H > #define _ASM_GENERIC_MM_HOOKS_H > @@ -17,11 +17,6 @@ static inline void arch_exit_mmap(struct mm_struct *mm) > { > } > > -static inline void arch_unmap(struct mm_struct *mm, > - unsigned long start, unsigned long end) > -{ > -} > - > static inline bool arch_vma_access_permitted(struct vm_area_struct *vma, > bool write, bool execute, bool foreign) > { > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > index 485424979254..ef32d87a3adc 100644 > --- a/include/linux/mm_types.h > +++ b/include/linux/mm_types.h > @@ -1313,6 +1313,8 @@ struct vm_special_mapping { > > int (*mremap)(const struct vm_special_mapping *sm, > struct vm_area_struct *new_vma); > + void (*close)(const struct vm_special_mapping *sm, > + struct vm_area_struct *vma); > }; > > enum tlb_flush_reason { > diff --git a/mm/mmap.c b/mm/mmap.c > index d0dfc85b209b..adaaf1ef197a 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -2789,7 +2789,7 @@ do_vmi_align_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, > * > * This function takes a @mas that is either pointing to the previous VMA or set > * to MA_START and sets it up to remove the mapping(s). The @len will be > - * aligned and any arch_unmap work will be preformed. > + * aligned. > * > * Return: 0 on success and drops the lock if so directed, error and leaves the > * lock held otherwise. > @@ -2809,16 +2809,12 @@ int do_vmi_munmap(struct vma_iterator *vmi, struct mm_struct *mm, > return -EINVAL; > > /* > - * Check if memory is sealed before arch_unmap. > - * Prevent unmapping a sealed VMA. > + * Check if memory is sealed, prevent unmapping a sealed VMA. > * can_modify_mm assumes we have acquired the lock on MM. > */ > if (unlikely(!can_modify_mm(mm, start, end))) > return -EPERM; > > - /* arch_unmap() might do unmaps itself. */ > - arch_unmap(mm, start, end); > - > /* Find the first overlapping VMA */ > vma = vma_find(vmi, end); > if (!vma) { > @@ -3232,14 +3228,12 @@ int do_vma_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, > struct mm_struct *mm = vma->vm_mm; > > /* > - * Check if memory is sealed before arch_unmap. > - * Prevent unmapping a sealed VMA. > + * Check if memory is sealed, prevent unmapping a sealed VMA. > * can_modify_mm assumes we have acquired the lock on MM. > */ > if (unlikely(!can_modify_mm(mm, start, end))) > return -EPERM; > > - arch_unmap(mm, start, end); > return do_vmi_align_munmap(vmi, vma, mm, start, end, uf, unlock); > } > > @@ -3624,6 +3618,9 @@ static vm_fault_t special_mapping_fault(struct vm_fault *vmf); > */ > static void special_mapping_close(struct vm_area_struct *vma) > { > + const struct vm_special_mapping *sm = vma->vm_private_data; > + if (sm->close) > + sm->close(sm, vma); > } > > static const char *special_mapping_name(struct vm_area_struct *vma)