With 4k guest and 64k host, on aarch64(Ampere's Altra Max CPU) hit Call trace: Steps: 1) System setup hugepages on host. # echo 50 > /proc/sys/vm/nr_hugepages 2) Mount this hugepage to /mnt/kvm_hugepage. # mount -t hugetlbfs -o pagesize=524288K none /mnt/kvm_hugepage 3) HugePages didn't leak when using non-existent mem-path. # cd /home/kar/workspace/avocado-vt/virttest; mkdir -p /mnt/tmp 4) Run memory heavy stress inside guest. # /usr/libexec/qemu-kvm \ ... -m 25600 \ -object '{"size": 26843545600, "mem-path": "/mnt/tmp", "id": "mem-machine_mem", "qom-type": "memory-backend-file"}' \ -smp 60,maxcpus=60,cores=30,threads=1,clusters=1,sockets=2 \ login guest: # nohup stress --vm 50 --vm-bytes 256M --timeout 30s > /dev/null & ------> hit Call trace On guest kernel: 2023-09-18 07:54:03: [ 76.592706] CPU: 23 PID: 254 Comm: kworker/23:1 Kdump: loaded Not tainted 6.6.0-rc2-zhenyzha_4k+ #3 2023-09-18 07:54:03: [ 76.593782] Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20230524-3.el9 05/24/2023 2023-09-18 07:54:03: [ 76.594641] Workqueue: rcu_gp wait_rcu_exp_gp 2023-09-18 07:54:03: [ 76.595248] pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) 2023-09-18 07:54:03: [ 76.596025] pc : smp_call_function_single+0xe4/0x1e8 2023-09-18 07:54:03: [ 76.596833] lr : __sync_rcu_exp_select_node_cpus+0x27c/0x428 2023-09-18 07:54:03: [ 76.597534] sp : ffff800084a0bc60 2023-09-18 07:54:03: [ 76.598078] x29: ffff800084a0bc60 x28: ffff0003fdad9440 x27: 0000000000000001 2023-09-18 07:54:03: [ 76.598874] x26: ffff800081a541b0 x25: ffff800081e0af40 x24: ffff0000c425ed80 2023-09-18 07:54:03: [ 76.599817] x23: 0000000000000004 x22: ffff800081532fa0 x21: 0000000000000ffe 2023-09-18 07:54:03: [ 76.600621] x20: ffff800081537440 x19: ffff800084a0bca0 x18: 0000000000000001 2023-09-18 07:54:03: [ 76.601420] x17: 0000000000000000 x16: ffff800080f352e8 x15: 0000ffff97d02fff 2023-09-18 07:54:03: [ 76.602212] x14: 0000000000000000 x13: 0000000000000030 x12: 0101010101010101 2023-09-18 07:54:03: [ 76.603158] x11: ffff800081532fa0 x10: 0000000000000001 x9 : ffff80008014c714 2023-09-18 07:54:03: [ 76.603963] x8 : ffff800081e03130 x7 : ffff800081521008 x6 : ffff80008014e070 2023-09-18 07:54:03: [ 76.604759] x5 : 0000000000000000 x4 : ffff0003fda34c88 x3 : 0000000000000001 2023-09-18 07:54:03: [ 76.605703] x2 : 0000000000000000 x1 : ffff0003fda34c80 x0 : 000000000000001c 2023-09-18 07:54:03: [ 76.606507] Call trace: 2023-09-18 07:54:03: [ 76.606990] smp_call_function_single+0xe4/0x1e8 2023-09-18 07:54:03: [ 76.607617] __sync_rcu_exp_select_node_cpus+0x27c/0x428 2023-09-18 07:54:03: [ 76.608290] sync_rcu_exp_select_cpus+0x164/0x2e0 2023-09-18 07:54:03: [ 76.608963] wait_rcu_exp_gp+0x1c/0x38 2023-09-18 07:54:03: [ 76.609563] process_one_work+0x174/0x3c8 2023-09-18 07:54:03: [ 76.610181] worker_thread+0x2c8/0x3e0 2023-09-18 07:54:03: [ 76.610776] kthread+0x100/0x110 2023-09-18 07:54:03: [ 76.611330] ret_from_fork+0x10/0x20 2023-09-18 07:54:15: [ 88.396191] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks: 2023-09-18 07:54:15: [ 88.397195] rcu: 11-...0: (18 ticks this GP) idle=79ec/1/0x4000000000000000 softirq=577/579 fqs=1215 2023-09-18 07:54:15: [ 88.398244] rcu: 25-...0: (1 GPs behind) idle=599c/1/0x4000000000000000 softirq=300/301 fqs=1215 2023-09-18 07:54:15: [ 88.399254] rcu: 33-...0: (36 ticks this GP) idle=e454/1/0x4000000000000000 softirq=717/719 fqs=1216 2023-09-18 07:54:15: [ 88.400275] rcu: (detected by 19, t=6006 jiffies, g=1173, q=61327 ncpus=38) 2023-09-18 07:54:15: [ 88.401135] Task dump for CPU 11: 2023-09-18 07:54:15: [ 88.401711] task:stress state:R running task stack:0 pid:3182 ppid:3178 flags:0x00000202 2023-09-18 07:54:15: [ 88.402794] Call trace: 2023-09-18 07:54:15: [ 88.403312] __switch_to+0xc8/0x110 2023-09-18 07:54:15: [ 88.403915] do_page_fault+0x198/0x4e0 2023-09-18 07:54:15: [ 88.404533] do_translation_fault+0x38/0x68 2023-09-18 07:54:15: [ 88.405169] do_mem_abort+0x48/0xa0 2023-09-18 07:54:15: [ 88.405771] el0_da+0x4c/0x180 2023-09-18 07:54:15: [ 88.406337] el0t_64_sync_handler+0xdc/0x150 2023-09-18 07:54:15: [ 88.406991] el0t_64_sync+0x17c/0x180 2023-09-18 07:54:15: [ 88.407601] Task dump for CPU 25: 2023-09-18 07:54:15: [ 88.408182] task:stress state:R running task stack:0 pid:3200 ppid:3178 flags:0x00000203 2023-09-18 07:54:15: [ 88.409258] Call trace: 2023-09-18 07:54:15: [ 88.409769] __switch_to+0xc8/0x110 2023-09-18 07:54:15: [ 88.410339] 0x440dc0 2023-09-18 07:54:15: [ 88.410816] Task dump for CPU 33: 2023-09-18 07:54:15: [ 88.411362] task:stress state:R running task stack:0 pid:3191 ppid:3178 flags:0x00000203 2023-09-18 07:54:15: [ 88.412403] Call trace: 2023-09-18 07:54:15: [ 88.412866] __switch_to+0xc8/0x110 2023-09-18 07:54:15: [ 88.413405] __memcg_kmem_charge_page+0x270/0x2c0 2023-09-18 07:54:15: [ 88.414033] __alloc_pages+0x100/0x278 2023-09-18 07:54:15: [ 88.414585] memcg_stock+0x0/0x58 On host kernel: 173242 Sep 18 08:57:51 virt-mtsnow-02 kernel: ------------[ cut here ]------------ 173243 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 52 kernel messages 173244 Sep 18 08:57:51 virt-mtsnow-02 kernel: do_cow_fault+0xf0/0x300 173245 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 162 kernel messages 173246 Sep 18 08:57:51 virt-mtsnow-02 kernel: CPU: 14 PID: 11294 Comm: qemu-kvm Tainted: G W 6.6.0-rc2-zhenyzha-64k+ #1 173247 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 226 kernel messages 173248 Sep 18 08:57:51 virt-mtsnow-02 kernel: x21: 0000000000000000 173249 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 120 kernel messages 173250 Sep 18 08:57:51 virt-mtsnow-02 kernel: __do_fault+0x40/0x210 173251 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 39 kernel messages 173252 Sep 18 08:57:51 virt-mtsnow-02 kernel: do_el0_svc+0xb4/0xd0 173253 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 325 kernel messages 173254 Sep 18 08:57:51 virt-mtsnow-02 kernel: get_user_pages_unlocked+0xc4/0x3b8 173255 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 255 kernel messages 173256 Sep 18 08:57:51 virt-mtsnow-02 kernel: pci_hyperv_intf i2c_designware_core 173257 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 87 kernel messages 173258 Sep 18 08:57:51 virt-mtsnow-02 kernel: xfs_filemap_fault+0x54/0x68 [xfs] 173259 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 248 kernel messages 173260 Sep 18 08:57:51 virt-mtsnow-02 kernel: pci_hyperv_intf 173261 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 69 kernel messages 173262 Sep 18 08:57:51 virt-mtsnow-02 kernel: Hardware name: GIGABYTE R152-P31-00/MP32-AR1-00, BIOS F18v (SCP: 1.08.20211002) 12/01/2021 173263 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 297 kernel messages 173264 Sep 18 08:57:51 virt-mtsnow-02 kernel: __filemap_add_folio+0x33c/0x4e0 173265 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 12 kernel messages 173266 Sep 18 08:57:51 virt-mtsnow-02 kernel: x26: 0000000000000001 173267 Sep 18 08:57:51 virt-mtsnow-02 systemd-journald[15184]: Missed 74 kernel messages [ 5456.588346] ------------[ cut here ]------------ [ 5456.588358] x10: 000000000000000a [ 5456.588365] dm_mod [ 5456.588372] nft_compat [ 5456.588374] Hardware name: GIGABYTE R152-P31-00/MP32-AR1-00, BIOS F18v (SCP: 1.08.20211002) 12/01/2021 [ 5456.588417] fat [ 5456.588421] x16: 000000009872d4d0 [ 5456.588430] ipmi_msghandler arm_cmn [ 5456.588439] x10: 000000000000000a [ 5456.588414] __xfs_filemap_fault+0x60/0x3c0 [xfs] [ 5456.588454] x5 : 0000000000000028 [ 5456.588460] nvme_core [ 5456.588474] pci_hyperv_intf [ 5456.588482] ------------[ cut here ]------------ [ 5456.588488] page_cache_async_ra+0x64/0xa8 [ 5456.588491] filemap_fault+0x238/0xaa8 [ 5456.588506] nf_defrag_ipv4 nf_tables [ 5456.588514] nfs_acl [ 5456.588518] x22: ffffffc202880000 [ 5456.588525] netfs [ 5456.588527] stp [ 5456.588539] acpi_ipmi [ 5456.588546] x10: 000000000000000a [ 5456.588554] x7 : ffff07ffa0a67210 [ 5456.588562] get_user_pages_unlocked+0xc4/0x3b8 [ 5456.588567] __gfn_to_pfn_memslot+0xa4/0xf8 [ 5456.588575] xas_split_alloc+0xf8/0x128 [ 5456.588581] sha1_ce [ 5456.588588] i2c_algo_bit [ 5456.588592] page_cache_async_ra+0x64/0xa8 Using @gshan@xxxxxxxxxx 's patch:KVM: arm64: Fix soft-lockup on relaxing PTE permission Still hit Call trace: 2023-09-18 10:56:20: [ 57.494201] watchdog: BUG: soft lockup - CPU#58 stuck for 22s! [gsd-power:4858] 2023-09-18 10:56:20: [ 57.495674] Modules linked in: nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 rfkill ip_set nf_tables nfnetlink qrtr vfat fat fuse xfs libcrc32c virtio_gpu virtio_dma_buf drm_shmem_helper nvme_tcp drm_kms_helper nvme_fabrics nvme_core nvme_common sg drm crct10dif_ce ghash_ce sha2_ce sha256_arm64 sha1_ce virtio_net net_failover virtio_scsi failover virtio_mmio dm_multipath dm_mirror dm_region_hash dm_log dm_mod be2iscsi cxgb4i cxgb4 tls libcxgbi libcxgb qla4xxx iscsi_boot_sysfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi 2023-09-18 10:56:20: [ 57.501871] CPU: 58 PID: 4858 Comm: gsd-power Kdump: loaded Not tainted 6.6.0-rc2-zhenyzha_4k+ #3 2023-09-18 10:56:20: [ 57.502719] Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20230524-3.el9 05/24/2023 2023-09-18 10:56:20: [ 57.503540] pstate: 20400005 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) 2023-09-18 10:56:20: [ 57.504612] pc : smp_call_function_many_cond+0x16c/0x618 2023-09-18 10:56:20: [ 57.505425] lr : smp_call_function_many_cond+0x188/0x618 2023-09-18 10:56:20: [ 57.505974] sp : ffff8000870f38f0 2023-09-18 10:56:20: [ 57.506370] x29: ffff8000870f38f0 x28: 000000000000003c x27: ffff00063c5dcaa0 2023-09-18 10:56:20: [ 57.507041] x26: 000000000000003c x25: 000000000000003b x24: ffff00063c5b6848 2023-09-18 10:56:20: [ 57.507812] x23: 0000000000000000 x22: ffff00063c5b6848 x21: ffff800081a541b0 2023-09-18 10:56:20: [ 57.508513] x20: ffff00063c5b6840 x19: ffff800081a4f840 x18: 0000000000000014 2023-09-18 10:56:20: [ 57.509247] x17: 00000000fd875552 x16: 0000000044ca0210 x15: 000000005df1120b 2023-09-18 10:56:20: [ 57.509947] x14: 00000000ac15cb21 x13: 00000000b7ff1817 x12: 0000000006d3918c 2023-09-18 10:56:20: [ 57.510645] x11: 00000000ba65fdab x10: 00000000f60c2b88 x9 : ffff80008061a9dc 2023-09-18 10:56:20: [ 57.511264] x8 : ffff00063c5b6a50 x7 : 0000000000000000 x6 : 0000000001000000 2023-09-18 10:56:20: [ 57.511817] x5 : 000000000000003c x4 : 0000000000000007 x3 : ffff00063bf28aa8 2023-09-18 10:56:20: [ 57.512415] x2 : 0000000000000000 x1 : 0000000000000011 x0 : 0000000000000007 2023-09-18 10:56:20: [ 57.513092] Call trace: 2023-09-18 10:56:20: [ 57.515105] smp_call_function_many_cond+0x16c/0x618 2023-09-18 10:56:20: [ 57.515684] kick_all_cpus_sync+0x48/0x80 2023-09-18 10:56:20: [ 57.516039] flush_icache_range+0x40/0x60 2023-09-18 10:56:20: [ 57.516413] bpf_int_jit_compile+0x1ac/0x5f8 2023-09-18 10:56:20: [ 57.516821] bpf_prog_select_runtime+0xd4/0x110 2023-09-18 10:56:20: [ 57.517279] bpf_prepare_filter+0x1e8/0x220 2023-09-18 10:56:20: [ 57.517727] __get_filter+0xdc/0x180 2023-09-18 10:56:20: [ 57.518231] sk_attach_filter+0x1c/0xb0 2023-09-18 10:56:20: [ 57.518605] sk_setsockopt+0x9dc/0x1230 2023-09-18 10:56:20: [ 57.518909] sock_setsockopt+0x18/0x28 2023-09-18 10:56:20: [ 57.519177] __sys_setsockopt+0x164/0x190 2023-09-18 10:56:20: [ 57.519501] __arm64_sys_setsockopt+0x2c/0x40 2023-09-18 10:56:20: [ 57.519911] invoke_syscall.constprop.0+0x7c/0xd0 2023-09-18 10:56:20: [ 57.520345] do_el0_svc+0xb4/0xd0 2023-09-18 10:56:20: [ 57.520670] el0_svc+0x50/0x228 2023-09-18 10:56:20: [ 57.521331] el0t_64_sync_handler+0x134/0x150 2023-09-18 10:56:20: [ 57.521758] el0t_64_sync+0x17c/0x180 2023-09-18 10:56:23: [ 60.724199] watchdog: BUG: soft lockup - CPU#28 stuck for 26s! [(fwupd):5108] [ 6253.928601] CPU: 64 PID: 18885 Comm: qemu-kvm Kdump: loaded Tainted: G W 6.6.0-rc1-zhenyzha_64k+ #2 [ 6253.939021] Hardware name: GIGABYTE R152-P31-00/MP32-AR1-00, BIOS F31n (SCP: 2.10.20220810) 09/30/2022 [ 6253.948312] pstate: 80400009 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 6253.955262] pc : xas_split_alloc+0xf8/0x128 [ 6253.959432] lr : __filemap_add_folio+0x33c/0x4e0 [ 6253.964037] sp : ffff80008b10f210 [ 6253.967338] x29: ffff80008b10f210 x28: ffffba8c43708c00 x27: 0000000000000001 [ 6253.974461] x26: 0000000000000001 x25: ffffffffffffc005 x24: 0000000000000000 [ 6253.981583] x23: ffff80008b10f2c0 x22: 00000a36da000101 x21: 0000000000000000 [ 6253.988706] x20: ffffffc203be2a00 x19: 000000000000000d x18: 0000000000000014 [ 6253.995828] x17: 00000000be237f61 x16: 000000001baa68cc x15: ffffba8c429a5944 [ 6254.002950] x14: ffffba8c429b57bc x13: ffffba8c429a5944 x12: ffffba8c429b57bc [ 6254.010073] x11: ffffba8c4297160c x10: ffffba8c4365d414 x9 : ffffba8c4365857c [ 6254.017195] x8 : ffff80008b10f210 x7 : ffff07ffa1304900 x6 : ffff80008b10f210 [ 6254.024317] x5 : 000000000000000e x4 : 0000000000000000 x3 : 0000000000012c40 [ 6254.031439] x2 : 000000000000000d x1 : 000000000000000c x0 : 0000000000000000 [ 6254.038562] Call trace: [ 6254.040995] xas_split_alloc+0xf8/0x128 [ 6254.044818] __filemap_add_folio+0x33c/0x4e0 [ 6254.049076] filemap_add_folio+0x48/0xd0 [ 6254.052986] page_cache_ra_unbounded+0xf0/0x1f0 [ 6254.057504] page_cache_ra_order+0x8c/0x310 [ 6254.061675] filemap_fault+0x67c/0xaa8 [ 6254.065412] __xfs_filemap_fault+0x60/0x3c0 [xfs] [ 6254.070163] xfs_filemap_fault+0x54/0x68 [xfs] [ 6254.074651] __do_fault+0x40/0x210 [ 6254.078040] do_cow_fault+0xf0/0x300 [ 6254.081602] do_pte_missing+0x140/0x238 [ 6254.085426] handle_pte_fault+0x100/0x160 [ 6254.089423] __handle_mm_fault+0x100/0x310 [ 6254.093506] handle_mm_fault+0x6c/0x270 [ 6254.097330] faultin_page+0x70/0x128 [ 6254.100893] __get_user_pages+0xc8/0x2d8 [ 6254.104802] get_user_pages_unlocked+0xc4/0x3b8 [ 6254.109320] hva_to_pfn+0xf8/0x468 [ 6254.112709] __gfn_to_pfn_memslot+0xa4/0xf8 [ 6254.116879] user_mem_abort+0x174/0x7e8 [ 6254.120702] kvm_handle_guest_abort+0x2dc/0x450 [ 6254.125220] handle_exit+0x70/0x1c8 [ 6254.128696] kvm_arch_vcpu_ioctl_run+0x224/0x5b8 [ 6254.133300] kvm_vcpu_ioctl+0x28c/0x9d0 [ 6254.137123] __arm64_sys_ioctl+0xa8/0xf0 [ 6254.141033] invoke_syscall.constprop.0+0x7c/0xd0 [ 6254.145725] do_el0_svc+0xb4/0xd0 [ 6254.149028] el0_svc+0x50/0x228 [ 6254.152157] el0t_64_sync_handler+0x134/0x150 [ 6254.156501] el0t_64_sync+0x17c/0x180 [ 6254.160151] ---[ end trace 0000000000000000 ]--- [ 6254.164766] ------------[ cut here ]------------ [ 6254.169370] WARNING: CPU: 64 PID: 18885 at lib/xarray.c:1010 xas_split_alloc+0xf8/0x128 [ 6254.177361] Modules linked in: loop isofs cdrom vhost_net vhost vhost_iotlb tap tun bluetooth tls nfsv3 rpcsec_gss_krb5 nfsv4 dns_resolver nfs fscache netfs rpcrdma rdma_cm iw_cm ib_cm ib_core xt_CHECKSUM xt_MASQUERADE xt_conntrack ipt_REJECT nf_reject_ipv4 nft_compat nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables nfnetlink bridge stp llc rfkill vfat fat ast drm_shmem_helper drm_kms_helper acpi_ipmi ipmi_ssif arm_spe_pmu ipmi_devintf ipmi_msghandler arm_cmn arm_dmc620_pmu arm_dsu_pmu cppc_cpufreq drm fuse nfsd auth_rpcgss nfs_acl lockd grace sunrpc xfs libcrc32c crct10dif_ce ghash_ce igb sha2_ce sha256_arm64 sha1_ce sbsa_gwdt i2c_designware_platform i2c_algo_bit i2c_designware_core xgene_hwmon sg dm_mirror dm_region_hash dm_log dm_mod Tested-by: Zhenyu Zhang <zhenyzha@xxxxxxxxxx> On Mon, Sep 4, 2023 at 1:20 AM Joel Fernandes (Google) <joel@xxxxxxxxxxxxxxxxx> wrote: > > Hello! > > Here is v6 of the mremap start address optimization / fix for exec warning. > Should be hopefully final now and only 2/7 and 6/7 need a tag. Thanks a lot to > Lorenzo and Linus for the detailed reviews. > > Description of patches > ====================== > These patches optimizes the start addresses in move_page_tables() and tests the > changes. It addresses a warning [1] that occurs due to a downward, overlapping > move on a mutually-aligned offset within a PMD during exec. By initiating the > copy process at the PMD level when such alignment is present, we can prevent > this warning and speed up the copying process at the same time. Linus Torvalds > suggested this idea. Check the individual patches for more details. > [1] https://lore.kernel.org/all/ZB2GTBD%2FLWTrkOiO@xxxxxxxxxxxxxx/ > > History of patches: > v5->v6: > 1. Reworking the stack case a bit more and tested it (should be final now). > 2. Other small nits. > > v4->v5: > 1. Rebased on mainline. > 2. Several improvement suggestions from Lorenzo. > > v3->v4: > 1. Care to be taken to move purely within a VMA, in other words this check > in call_align_down(): > if (vma->vm_start != addr_masked) > return false; > > As an example of why this is needed: > Consider the following range which is 2MB aligned and is > a part of a larger 10MB range which is not shown. Each > character is 256KB below making the source and destination > 2MB each. The lower case letters are moved (s to d) and the > upper case letters are not moved. > > |DDDDddddSSSSssss| > > If we align down 'ssss' to start from the 'SSSS', we will end up destroying > SSSS. The above if statement prevents that and I verified it. > > I also added a test for this in the last patch. > > 2. Handle the stack case separately. We do not care about #1 for stack movement > because the 'SSSS' does not matter during this move. Further we need to do this > to prevent the stack move warning. > > if (!for_stack && vma->vm_start <= addr_masked) > return false; > > v2->v3: > 1. Masked address was stored in int, fixed it to unsigned long to avoid truncation. > 2. We now handle moves happening purely within a VMA, a new test is added to handle this. > 3. More code comments. > > v1->v2: > 1. Trigger the optimization for mremaps smaller than a PMD. I tested by tracing > that it works correctly. > > 2. Fix issue with bogus return value found by Linus if we broke out of the > above loop for the first PMD itself. > > v1: Initial RFC. > > Joel Fernandes (1): > selftests: mm: Add a test for moving from an offset from start of > mapping > > Joel Fernandes (Google) (6): > mm/mremap: Optimize the start addresses in move_page_tables() > mm/mremap: Allow moves within the same VMA for stack moves > selftests: mm: Fix failure case when new remap region was not found > selftests: mm: Add a test for mutually aligned moves > PMD size > selftests: mm: Add a test for remapping to area immediately after > existing mapping > selftests: mm: Add a test for remapping within a range > > fs/exec.c | 2 +- > include/linux/mm.h | 2 +- > mm/mremap.c | 73 +++++- > tools/testing/selftests/mm/mremap_test.c | 301 +++++++++++++++++++---- > 4 files changed, 329 insertions(+), 49 deletions(-) > > -- > 2.42.0.283.g2d96d420d3-goog >