From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D71F3C3271E for ; Mon, 8 Jul 2024 14:40:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2E9496B0099; Mon, 8 Jul 2024 10:40:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 298C76B009A; Mon, 8 Jul 2024 10:40:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 160676B009B; Mon, 8 Jul 2024 10:40:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id EC0976B0099 for ; Mon, 8 Jul 2024 10:40:29 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 7AAF3C13A2 for ; Mon, 8 Jul 2024 14:40:29 +0000 (UTC) X-FDA: 82316846178.06.8A40C58 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf04.hostedemail.com (Postfix) with ESMTP id D891740012 for ; Mon, 8 Jul 2024 14:40:26 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=D+7UqdX4; spf=pass (imf04.hostedemail.com: domain of "SRS0=B+7m=OI=zx2c4.com=Jason@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=B+7m=OI=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720449613; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0SVD6RYkTCza/OjXuqE4YQ/CLLC7BL/wZbBa6QC5Nrc=; b=0Dsgtqdl/+AhBUtVtgdzAlp76Zs6AZ6Z7liRjtdwKcvwJat/bHSCv2jQsYDGW6N1tZE/g0 cAt1wt/W9F7fpm/hUAtBK5bSFQF/riF9EzFWJemKBa8ZSVxeiKx/hLGUmoDQQaJ4JEWM6z 6EGtQi55tqOW8jn/AamAKKKuXGKedgk= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=D+7UqdX4; spf=pass (imf04.hostedemail.com: domain of "SRS0=B+7m=OI=zx2c4.com=Jason@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=B+7m=OI=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720449613; a=rsa-sha256; cv=none; b=P2LYqHsSieNmYq4KpohrsVZZOr1mNgwrfEwtobFabqW5DYJg0ZinKxD3qj1W/9eK3f5AZL wWGN9FXhtZ5agPrb/fEwjK/niV5X+AyksrG7v7hEmQeztRSr84xAmRZibXVqO9kmMQsOC/ s9hS9X//hQ3LIH1CdI+Fe+GMkFKZA2Y= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 91496CE0D89; Mon, 8 Jul 2024 14:40:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8716BC116B1; Mon, 8 Jul 2024 14:40:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zx2c4.com; s=20210105; t=1720449617; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=0SVD6RYkTCza/OjXuqE4YQ/CLLC7BL/wZbBa6QC5Nrc=; b=D+7UqdX4S41qYEPlxYdtc5sdLpbHcUWJLWFBchA8QpkcMrzJ6naGFIFnFW+bv7OFTRJ5TN X1boeGv+DE0zXLWSyKeSAHPkq4sBCwiCd3RLO2SmG7U3Vb4Gh1WNSqn5seigTA4ciGXXGm 8//4T7XZREEJMIQ2JoxezeEkzywtsUc= Received: by mail.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id 58b436e1 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 8 Jul 2024 14:40:16 +0000 (UTC) Date: Mon, 8 Jul 2024 16:40:09 +0200 From: "Jason A. Donenfeld" To: David Hildenbrand Cc: Linus Torvalds , linux-kernel@vger.kernel.org, patches@lists.linux.dev, tglx@linutronix.de, linux-crypto@vger.kernel.org, linux-api@vger.kernel.org, x86@kernel.org, Greg Kroah-Hartman , Adhemerval Zanella Netto , Carlos O'Donell , Florian Weimer , Arnd Bergmann , Jann Horn , Christian Brauner , David Hildenbrand , linux-mm@kvack.org Subject: Re: [PATCH v21 1/4] mm: add VM_DROPPABLE for designating always lazily freeable mappings Message-ID: References: <20240707002658.1917440-1-Jason@zx2c4.com> <20240707002658.1917440-2-Jason@zx2c4.com> <1583c837-a4d5-4a8a-9c1d-2c64548cd199@redhat.com> <6705c6c8-8b6a-4d03-ae0f-aa83442ec0ab@redhat.com> <7439da2e-4a60-4643-9804-17e99ce6e312@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: D891740012 X-Stat-Signature: n84ort8oqfki1wad5gd89xpxscumfbow X-HE-Tag: 1720449626-267770 X-HE-Meta: U2FsdGVkX1+aep05r8ZpYjfxKncQIhOIGmw9z0bEAyY3Ux99fNE4SLFX4VcVgwzVknEEbGr4XYcx77FlW8ZUevNxX6bF3zRLtNE99LOB7qIKHRf1Btlro+N8A7pB0dPnaHUUgjDajiAtBIFe9dy7L/XZmi44JrrOaPBvK4d5nXt1Ynopb9hTR22q0XsGaG/7alEdWl6iP9KPC5cG1sxkIpgZp9gJh50ugD0LL4K7DoF2FHz+yGWDlfgWvhWl/1xyStCDavF5u+OpwD5rL8k8NqYTcE5OyzMQw7/FhP6tIjpLffwrXjW95i+Ov9tZrJ322Wr00wBt4DDNACDRuoBn+kZBSNjvwdXj+Ex584gSpOLBdVcxWPP2My1QUem80WRr8RzerGE9+pCYN8QAO7JglLeVR5T43xxuDjgAYj9NULgAkIEyLl/t8961Lh35QGHpW2+LjSQsQRlXYq5LO3ScuJD7U4n0pUPoTN3tpAltUCxI7SUnOs59qFX4DpW2BR1Yo1/Ga89vuwxfvwMW3TjZBYHa7DQa+6yQBvRrdfwZNB0tXGbPIhFznI5JRdbQNT6L9e62mRirIZys0SWa+qkffIcOyXlzKpOttnbOtnF2trUIspNFA2/+eW00gIzAhIPEzlxZ3W0F0B/Pb3grOcDyNnJn+qfrbR3W9174JAqe/s4eem65wi0zQEP/Ymj4iZYKYQLCopX7Xf0V6E7jQhqbtvK0xSvO4GRp0HKK6FHdgJ3qFstQX8tqEzPsgXiEnCVzq0hVs6aLwurjnnF4nw0RnJ89X5LlU/Nod+YG3QI0jbCMTQpUVU7zjoDuEDbNUyXykm+0noTN8mtuqRpcvP/XcTh+thDlQ0E/cTDmhJhyHTDXe4vaI/zKpjmrhW3DL5V2gTYzMowXJ8Di4m2Dg8UkuE7Yf4n//mkSCtq6U/372PZMBgsqm7tm9srE00a5Xhoy7/zpqgtR8WZ5XClWsFA NaiLUTRH 3DiFlY1MX/KVxQCK3/bPG0/gKhKgYQyHgUHw+6OFz2uJKDd/1lWJ9/qLMaBtH9VneZOgLjp3ffbjokWOLscO0OJ3/HPJb9pDFa2ULinF94hj0UcsszA13TqtiTTFB91+2ME3TkjVKQbJaqL7YHBAJOTXn2g7Lb5N7J+/E9wW62JfcD9BP1wXuVzIFdK28aVaDFhHkUYhm5z1wqO8tN7qPh2owrVU8d66c/seMKZlw4UfBHeMUmKAZMEpdwNax3UmeX8mUO1iG4CkaZ/uNirQgsujRCwoeOefAYW7WIfqIYMZl4SBVrMbfFQfwZ/RVbU8YbuMyO1ygVSgpA6AlCIgBwgUq8qjnu3WJu7xB5gvnTK2dI3yYmjpc8ieQZhb93iYa8wioIdFokU9PNGMBYphVq3htMLkDi4H2cBrAlGVNAPGESvNaM21sZXS/5xQUvm/g3AtE/1E4+LM7aAVqTdqSTX65fSDtif5kiQuZsyyw1m59IwztmkeyITvedtWrrZQ3leZ3 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi David, Linus, Below is what I understand the suggestions about the UX to be. The full commit is in https://git.zx2c4.com/linux-rng/log/ but here's the part we've been discussing. I've held off on David's suggestion changing "DROPPABLE" to "VOLATILE" to give Linus some time to wake up on the west coast and voice his preference for "DROPPABLE". But the rest is in place. Jason diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h index a246e11988d5..e89d00528f2f 100644 --- a/include/uapi/linux/mman.h +++ b/include/uapi/linux/mman.h @@ -17,6 +17,7 @@ #define MAP_SHARED 0x01 /* Share changes */ #define MAP_PRIVATE 0x02 /* Changes are private */ #define MAP_SHARED_VALIDATE 0x03 /* share + validate extension flags */ +#define MAP_DROPPABLE 0x08 /* Zero memory under memory pressure. */ /* * Huge page size encoding when MAP_HUGETLB is specified, and a huge page diff --git a/mm/madvise.c b/mm/madvise.c index a77893462b92..cba5bc652fc4 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1068,13 +1068,16 @@ static int madvise_vma_behavior(struct vm_area_struct *vma, new_flags |= VM_WIPEONFORK; break; case MADV_KEEPONFORK: + if (vma->vm_flags & VM_DROPPABLE) + return -EINVAL; new_flags &= ~VM_WIPEONFORK; break; case MADV_DONTDUMP: new_flags |= VM_DONTDUMP; break; case MADV_DODUMP: - if (!is_vm_hugetlb_page(vma) && new_flags & VM_SPECIAL) + if ((!is_vm_hugetlb_page(vma) && new_flags & VM_SPECIAL) || + (vma->vm_flags & VM_DROPPABLE)) return -EINVAL; new_flags &= ~VM_DONTDUMP; break; diff --git a/mm/mlock.c b/mm/mlock.c index 30b51cdea89d..b87b3d8cc9cc 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -485,7 +485,7 @@ static int mlock_fixup(struct vma_iterator *vmi, struct vm_area_struct *vma, if (newflags == oldflags || (oldflags & VM_SPECIAL) || is_vm_hugetlb_page(vma) || vma == get_gate_vma(current->mm) || - vma_is_dax(vma) || vma_is_secretmem(vma)) + vma_is_dax(vma) || vma_is_secretmem(vma) || (oldflags & VM_DROPPABLE)) /* don't set VM_LOCKED or VM_LOCKONFAULT and don't count */ goto out; diff --git a/mm/mmap.c b/mm/mmap.c index 83b4682ec85c..b3d38179dd42 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1369,6 +1369,34 @@ unsigned long do_mmap(struct file *file, unsigned long addr, pgoff = 0; vm_flags |= VM_SHARED | VM_MAYSHARE; break; + case MAP_DROPPABLE: + /* + * A locked or stack area makes no sense to be droppable. + * + * Also, since droppable pages can just go away at any time + * it makes no sense to copy them on fork or dump them. + * + * And don't attempt to combine with hugetlb for now. + */ + if (flags & (MAP_LOCKED | MAP_HUGETLB)) + return -EINVAL; + if (vm_flags & (VM_GROWSDOWN | VM_GROWSUP)) + return -EINVAL; + + vm_flags |= VM_DROPPABLE; + + /* + * If the pages can be dropped, then it doesn't make + * sense to reserve them. + */ + vm_flags |= VM_NORESERVE; + + /* + * Likewise, they're volatile enough that they + * shouldn't survive forks or coredumps. + */ + vm_flags |= VM_WIPEONFORK | VM_DONTDUMP; + fallthrough; case MAP_PRIVATE: /* * Set pgoff according to addr for anon_vma.