From patchwork Fri Apr 4 15:43:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikita Kalyazin X-Patchwork-Id: 14038636 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 5DADCC36014 for ; Fri, 4 Apr 2025 15:44:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF7476B0029; Fri, 4 Apr 2025 11:44:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C7FBE6B002A; Fri, 4 Apr 2025 11:44:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B1FF36B002B; Fri, 4 Apr 2025 11:44:28 -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 8EEB36B0029 for ; Fri, 4 Apr 2025 11:44:28 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 2B4E31204C1 for ; Fri, 4 Apr 2025 15:44:29 +0000 (UTC) X-FDA: 83296783458.25.316A39E Received: from smtp-fw-52005.amazon.com (smtp-fw-52005.amazon.com [52.119.213.156]) by imf26.hostedemail.com (Postfix) with ESMTP id 56F64140005 for ; Fri, 4 Apr 2025 15:44:27 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=QVFG3Qax; spf=pass (imf26.hostedemail.com: domain of "prvs=182d669d3=kalyazin@amazon.co.uk" designates 52.119.213.156 as permitted sender) smtp.mailfrom="prvs=182d669d3=kalyazin@amazon.co.uk"; dmarc=pass (policy=quarantine) header.from=amazon.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743781467; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=dh/0PI2ns4oZ37OX+8TMvz834BKQ/4DyQ5yTHrbPiLw=; b=LoiuatC/mzmgJMkZrEn9da95HbwQXhYxJj4uLRuXuHAyqaV6GMsa7+Jp+Ic0OKzwUrYk4P y0KMWmnGDsG6L2QMfQhPRE2nWAnEK0onxTHCvWsJwURNMmfVP445Sl+7kyatdVJqnbuqj9 it+msbzYLz+C5ZzmMe8A7hVmOLwUrBU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743781467; a=rsa-sha256; cv=none; b=lICnknFPRHAm6fp5JZEmb8Ol3ApMvSC2mFb8HQE2O7mRJwy7APDBjIj+JU6bTQLhocfqbx QFk7zyzm/7JZrXeHstt4pI5AQscewp/T7OmtxTQSHi/2UETQ692UibfkEZaBsJte4xm5Lw Bfj5wPUlZ4IDTy7mYHND+8M1aOaCLuw= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=QVFG3Qax; spf=pass (imf26.hostedemail.com: domain of "prvs=182d669d3=kalyazin@amazon.co.uk" designates 52.119.213.156 as permitted sender) smtp.mailfrom="prvs=182d669d3=kalyazin@amazon.co.uk"; dmarc=pass (policy=quarantine) header.from=amazon.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1743781468; x=1775317468; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dh/0PI2ns4oZ37OX+8TMvz834BKQ/4DyQ5yTHrbPiLw=; b=QVFG3QaxmCrGVKvb0SR++lXOwXXPCHhFmq3GdDqLDT7kVWJ+TY4sLZiq qe8FQqxwhaC5SZw/a2Q3u9T9pMfyUBiiInAqmyMELzjiqyRF+FuqaLUw4 eOqe81x9vX3RA9cxHshwBq0sDsaF57pwIheXdCIYYtZvYICfJpVjt9C7w 4=; X-IronPort-AV: E=Sophos;i="6.15,188,1739836800"; d="scan'208";a="732940908" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev) ([10.43.8.6]) by smtp-border-fw-52005.iad7.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2025 15:44:23 +0000 Received: from EX19MTAUWC001.ant.amazon.com [10.0.21.151:37011] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.25.120:2525] with esmtp (Farcaster) id 08c94e81-d4d9-4237-8218-603f770ff779; Fri, 4 Apr 2025 15:44:21 +0000 (UTC) X-Farcaster-Flow-ID: 08c94e81-d4d9-4237-8218-603f770ff779 Received: from EX19D003UWB003.ant.amazon.com (10.13.138.116) by EX19MTAUWC001.ant.amazon.com (10.250.64.174) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Fri, 4 Apr 2025 15:44:21 +0000 Received: from EX19MTAUWA001.ant.amazon.com (10.250.64.204) by EX19D003UWB003.ant.amazon.com (10.13.138.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Fri, 4 Apr 2025 15:44:21 +0000 Received: from email-imr-corp-prod-iad-1box-1a-6851662a.us-east-1.amazon.com (10.25.36.214) by mail-relay.amazon.com (10.250.64.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14 via Frontend Transport; Fri, 4 Apr 2025 15:44:21 +0000 Received: from dev-dsk-kalyazin-1a-a12e27e2.eu-west-1.amazon.com (dev-dsk-kalyazin-1a-a12e27e2.eu-west-1.amazon.com [172.19.103.116]) by email-imr-corp-prod-iad-1box-1a-6851662a.us-east-1.amazon.com (Postfix) with ESMTPS id 709954032D; Fri, 4 Apr 2025 15:44:18 +0000 (UTC) From: Nikita Kalyazin To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v3 2/6] mm: provide can_userfault vma operation Date: Fri, 4 Apr 2025 15:43:48 +0000 Message-ID: <20250404154352.23078-3-kalyazin@amazon.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250404154352.23078-1-kalyazin@amazon.com> References: <20250404154352.23078-1-kalyazin@amazon.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 56F64140005 X-Stat-Signature: wwkf5wumr8eetrwj9jcdag99dco3uyun X-HE-Tag: 1743781467-325967 X-HE-Meta: U2FsdGVkX1+ksBQsCHrIiwdpj/bk9zResHwjBRZ3vjzpRRBmCKQbOq5b5YCJfxRhNjcPUaByX73mAeQtDyml86QpqOyZxV3BVAVfue5MXoYZiC+S5Bu7CkwGET9rbgh2jFWvPF69+Q/a7bJWy3/1ZQ9IZSelGgCmlKCitbJrb/iVudJI8cJPXfmI9DOMp1qQvusmeTHtrmxAg4/mKB65gHo3q9hOlnBdTFd51KYoHIziDDPEZv1Qez7q58X3Rq+DbHu43fX/Y227ftGKd+jY6o1Z8cOyWrgmKWC4aJ6OF1tQ1rPZlL0I7BQ2gFw3RyLJR3f5UnbOlH8aNJl9LIIlTVYPlz00yBRltGkH86pXnVP9lkpuFW2zXujEALEP8bAvHJ2PQHgbxC3IL/qNEMQc9QEZdAPpd7EtA2BxUjsUb9ChGUcTWzF6n+cpacFPVIAO3bP3bfpq0dBdKuxhXwG7yLoCkItGXjmWbyx5fz/K3wmGo/TqkLmX4SbCoVqNOZhSItxo3scsyjmbQ1+P4pWwoYbigRuQ8YzkxkU4IHEC5uC7D/cICLVdui/e8jqRQMayR116VpiD0hQrKvKgYlxOH9nJwlPGcE1c2ttG3Iuw56FPOpaONXGuJgwUdNgFjJ/mHxrTk0XzjeoCjuxvdBeXUpr7QokiqNKl3cjFJrCuqoTACmyzS1OJSMpxxYITVtXYp1k8ptYPAhHub/7HkHIyptNpTWmA6nLBf9in0JXrKH/BWk+bi0D3dPG1pYQAVFuMl6bDkMrbs3R7lTI0+tMts3pR65SWHfpArtrHC7mR73bCQ0viW0k8wpRaMALz0sP5wENsAC7EDJp7z3fde088p5Xx8jI5DHdpU8Axprqtcy/8hWZYXy2giN8Irr+qDKRC9BrBnoD78IoFxsRcRZBRJ2vh3Cyj9YYyZrLoQ6lYZL7fjI7Z50z2HPThrtiW98L5Fdq0IzMtBcpgNkf+Znu V+oRTXA5 us6pTys7ZiE+VNLEN6DbNgyUyxj1DrQZaNv60mHpCkXGZPt5hAg1dNdV0P7PWTZimy5YHZ3qZ4JWX7/FtwJWP51Sh+PxtgWDVzXYVIkBNxoBADOCSidsffy0xFFj4vfYwYNokk3SD7s7EhX8AuJeS3yCHPfAZ55xOKnNRhQO+Vu8ou0nIKEihj8DMZBu2jn4oZjEm1lEb4DOYLEXz8iqhRbPm7A9wUr4AAmiANZFjDxxoh7tcA5MtVLgTmHifijqCa8nLbjB3bTuL5cI= 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: The new operation allows to decouple the userfaulfd code from dependencies to VMA types, specifically, shmem and hugetlb. The vm_flags bitmap argument is processed with "any" logic, meaning if the VMA type supports any of the flags set, it returns true. This is to avoid multiple calls when checking for __VM_UFFD_FLAGS. Signed-off-by: Nikita Kalyazin --- include/linux/mm.h | 5 +++++ mm/hugetlb.c | 7 +++++++ mm/shmem.c | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index 8483e09aeb2c..488d721d8542 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -680,6 +680,11 @@ struct vm_operations_struct { */ struct page *(*find_special_page)(struct vm_area_struct *vma, unsigned long addr); + /* + * True if the VMA supports userfault at least for one of the vm_flags + */ + bool (*can_userfault)(struct vm_area_struct *vma, + unsigned long vm_flags); }; #ifdef CONFIG_NUMA_BALANCING diff --git a/mm/hugetlb.c b/mm/hugetlb.c index c004cfdcd4e2..f3901c11e1fd 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -5143,6 +5143,12 @@ static unsigned long hugetlb_vm_op_pagesize(struct vm_area_struct *vma) return huge_page_size(hstate_vma(vma)); } +static bool hugetlb_vm_op_can_userfault(struct vm_area_struct *vma, + unsigned long vm_flags) +{ + return true; +} + /* * We cannot handle pagefaults against hugetlb pages at all. They cause * handle_mm_fault() to try to instantiate regular-sized pages in the @@ -5168,6 +5174,7 @@ const struct vm_operations_struct hugetlb_vm_ops = { .close = hugetlb_vm_op_close, .may_split = hugetlb_vm_op_split, .pagesize = hugetlb_vm_op_pagesize, + .can_userfault = hugetlb_vm_op_can_userfault, }; static pte_t make_huge_pte(struct vm_area_struct *vma, struct page *page, diff --git a/mm/shmem.c b/mm/shmem.c index b4159303fe59..0b9e19abd1e9 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2891,6 +2891,12 @@ static struct mempolicy *shmem_get_policy(struct vm_area_struct *vma, return mpol_shared_policy_lookup(&SHMEM_I(inode)->policy, index); } +static bool shmem_can_userfault(struct vm_area_struct *vma, + unsigned long vm_flags) +{ + return true; +} + static struct mempolicy *shmem_get_pgoff_policy(struct shmem_inode_info *info, pgoff_t index, unsigned int order, pgoff_t *ilx) { @@ -5309,6 +5315,7 @@ static const struct vm_operations_struct shmem_vm_ops = { .set_policy = shmem_set_policy, .get_policy = shmem_get_policy, #endif + .can_userfault = shmem_can_userfault, }; static const struct vm_operations_struct shmem_anon_vm_ops = { @@ -5318,6 +5325,7 @@ static const struct vm_operations_struct shmem_anon_vm_ops = { .set_policy = shmem_set_policy, .get_policy = shmem_get_policy, #endif + .can_userfault = shmem_can_userfault, }; int shmem_init_fs_context(struct fs_context *fc)