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 C77ECC7115B for ; Fri, 20 Jun 2025 19:03:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6594C6B009B; Fri, 20 Jun 2025 15:03:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 594D66B009C; Fri, 20 Jun 2025 15:03:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 45C016B009D; Fri, 20 Jun 2025 15:03:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 2DC666B009B for ; Fri, 20 Jun 2025 15:03:59 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id EF7CF81204 for ; Fri, 20 Jun 2025 19:03:58 +0000 (UTC) X-FDA: 83576703756.12.D0CE96D Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf20.hostedemail.com (Postfix) with ESMTP id C33801C0012 for ; Fri, 20 Jun 2025 19:03:56 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=G04HaBIA; spf=pass (imf20.hostedemail.com: domain of peterx@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750446236; 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=MlVYTqcNyEXwc8zN1rOa2F8O42Bhf5IYSqZeViP+B0U=; b=h6fLqUkbHWvL+5yKllVTJZ2UHnHpMwIx57XOhc7899ffIcCJQygS4F2fvoYtFa7uNJvdTg xsdzUym9XFXutgK5crQ+xCcOaBAPsmnjRongrZf5IieTJFzj8esFx1TVXCV53NeVb6O9US F7ZdpGLJRWW7umkACSUHC5MW2Swl0Es= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=G04HaBIA; spf=pass (imf20.hostedemail.com: domain of peterx@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750446236; a=rsa-sha256; cv=none; b=7fH3kdSaywPrVyjetUV1F2KWO2OYTdY1YqWEStK4/TdzwK0LXXYa9LKYIYmMb6ZDU+TGbl blSGio8G+pJvzoeV2OyqdpDOURDWbIm2CGI0isl0tB5BmuTcC7UO5XCK5GdiKHt0EU6tWY fcwAv0R2k+sJKaroTWh/qPMat0cfHPk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1750446236; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MlVYTqcNyEXwc8zN1rOa2F8O42Bhf5IYSqZeViP+B0U=; b=G04HaBIAKfJSyTU26796vGYPgHaJw6KzyiNOSGmubnymAL/kZhXjExwM6K2FxjwYy/POcD 8eV0Ks2w99YD1XRahPaQpFfaXTkHEgKNPGlEDNM+Q+EaxlDsdo01phZIN/89tUzE/OmS2j l5079fHml5URGo09VgPTonmdstExxaM= Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-628-ekzK39LuMlqmZiMT4gFFHQ-1; Fri, 20 Jun 2025 15:03:55 -0400 X-MC-Unique: ekzK39LuMlqmZiMT4gFFHQ-1 X-Mimecast-MFC-AGG-ID: ekzK39LuMlqmZiMT4gFFHQ_1750446234 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-235e7550f7bso19395645ad.3 for ; Fri, 20 Jun 2025 12:03:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750446234; x=1751051034; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MlVYTqcNyEXwc8zN1rOa2F8O42Bhf5IYSqZeViP+B0U=; b=CsBv1f9Ut3uuFfFTa/67wqXYD+JWsV7S+iyoUf76W6wVdA0BTWrzNKRGj6uCOPZt8N bCJi+Xh4V5hVSDnQfm9q+2oK7E4fozUaZg6qSREELEPA7MEMnKE5U0V09AVvvRfl19p1 xsOk3XFMhOOPEcBxQYcmrbTWmI3giVeXVMgKr5YuPVC27wgJ+Uu0kHZL5aAU/LzVliow rUD6NYsodI3yOrBlVZtBUEXMMzCrs9yXmZvr/trrFAG7yjWbg7mVeAJHyCNA4ws4lwq4 dRXmw6lgZxkaOlrs7e1HHar8VPU9GVEDrdXVuCAHX1ghTIOmeDqz7QEfGguRrA+h3dSv MBFQ== X-Gm-Message-State: AOJu0Yzj1yyNwMAVqeIbv4ZrwAnbOZcO2W/uU9TOkVEJVrSdGtd1kK3F CZP5UAumWsJPWwON3tybHJA4cPNXUu/4/gEriRJ9ValQgF8Op98B6mo9ILA+tr8aWFpc16KSzh8 84M3iyLwux6717XLWmyS5qeYvKW54SFbwcZE/gW/B9p0HGzTey1+c1Ud6QcXxbcr49cn1WpQEI0 3P0OKHmXLkbS0M08B0grwYaNSVthpqv/LC5g== X-Gm-Gg: ASbGncvijDTNU7e2wgdN19N8N/zWkgzhA/vbqDpF+MEVdZUdzQT3PeUtaFTt6hEmZxn Ik0i0aFHmCutJd9IHa4VWbG4XCbKGeU7lyD03DyHhu1Fbdsr1j3ScPXVXvD1QoDPEGsfvAdKnWJ vmuaybfb9e+WstGl9nPHajeoi3QTm0sQUN4/YGLA3qPLGB60vmGw1cRVdKo5Jh+3QN+5ffzd1AR KVSJpwBxG1BwyNJKjT6mubFUI5JKMbzIuz1eVG/+ttaUrth7Hhhkr5zOUbn8bluDClI7pX6ZUyJ B8ZK7ujaHzc= X-Received: by 2002:a17:902:e842:b0:235:ea0d:ae21 with SMTP id d9443c01a7336-237d996585fmr70252535ad.35.1750446233883; Fri, 20 Jun 2025 12:03:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG+SvCa7Srq7yrsaP9omrf+ymFZqhKwNSmDUngwJyl3buQUDwE3xOiUUDw2ItAjef9vi4uYAw== X-Received: by 2002:a17:902:e842:b0:235:ea0d:ae21 with SMTP id d9443c01a7336-237d996585fmr70251825ad.35.1750446233263; Fri, 20 Jun 2025 12:03:53 -0700 (PDT) Received: from x1.com ([85.131.185.92]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-237d8609968sm24235535ad.136.2025.06.20.12.03.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Jun 2025 12:03:52 -0700 (PDT) From: Peter Xu To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Nikita Kalyazin , peterx@redhat.com, Hugh Dickins , Oscar Salvador , Michal Hocko , David Hildenbrand , Muchun Song , Andrea Arcangeli , Ujwal Kundur , Suren Baghdasaryan , Andrew Morton , Vlastimil Babka , "Liam R . Howlett" , James Houghton , Mike Rapoport , Lorenzo Stoakes , Axel Rasmussen Subject: [PATCH 2/4] mm/shmem: Support vm_uffd_ops API Date: Fri, 20 Jun 2025 15:03:40 -0400 Message-ID: <20250620190342.1780170-3-peterx@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250620190342.1780170-1-peterx@redhat.com> References: <20250620190342.1780170-1-peterx@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: bDsXN0967aIwFldEoPakAbBIixw8vUTddqrn4TClu6k_1750446234 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspamd-Server: rspam11 X-Rspam-User: X-Rspamd-Queue-Id: C33801C0012 X-Stat-Signature: gttkxzgcns8bkakhdikas36b8r8mxxao X-HE-Tag: 1750446236-804832 X-HE-Meta: U2FsdGVkX1+Nq3lmwjC3S1dH9jukaLD1nNq0xmC6aZ/CwoXvq0QlPecBe+Hmipi9SUAsipnpBP8akMHi30cIMB1UGCQORbI8HXOGq/AU5tbRRueITjo+rAkWUDx4xic6NnMQfXaN6PXTaEmzGiYa/ydY0UivnEVX0rSPx/J7XZAc/juoCFxMcIuY2xaaxdUqOYmoZwMKlICxPEhsF8E15SSkEbCH2t2TdkjkIKAhmRg2GlmnHrG2plnKKgpRXbIl9ZtlGo7JOyCactXkA+BxUxHYASFpD9JB/hOgTOB2HwN42G6SSyOZBFwRWRDsAp/cCe5yLDl5kDvlw/cQBojjDehvxeSRuUtsAMuA8GXc0VNa7QIwNTVkbnCL+GhO92Rot4vdVjD24CbNp/Po5j1Kg7dYj8WK6iaI0iS3MPoFdw2uQRseaFtOwVItYIjprQ3gFTT+mrZ9xodnDXpjVwCTI9l56cnL1BXULnM2dXEGeMqTXHaXDZqu6pVjmnyR44qe58MVI6bUkjabxZXUwlC7u3gGV0QV8Nugrkr0O1jkuW+O1+qD5D2EDG8dXEYFFImJHzvfKEJpqXf7v8DdHjA9msp9fBINvyjcyrI/42xebuXrlhDHoCdkE8IDfUInZjilafoQT2C/KcMEfl9xy5SgFe4+S26JzMUoB1fhAyYL+k7XVjTHphL7ZrxZ1yiaBnZZnDjiX2iubTXyfTgCwAjfvok95YSKbn9A7KWtl5vNzSee7fBhoulTtzkIENLdZ5BUxPxQxr2mld36AlQzGU4LkMHvqHIDQajqBsplb338a11f+cLwyG1lK4spWAoIjghFJVfq/jmbWakNiOY75IxOt+cbI9VcIXvxrnPa7CHTP8eaL4EuWPZ0FGL/K8HY3/IMUhPryqMyDaCaGfEKL8cOCqia50Pp48x0X95c/EsUOsQ7WWd+UkzPezUUwQZJRfox2N1BjgfWZvLlwuJHU7y l+sWJ1hv OPwApiMghRIbTQg2KO6N1nox8viz0XSn0R4y+gtB7SjfO4UMFPudzmuV4gcozrYrgXxD+jvbc7zF7GBcAuVN6ztbQs/NiGFu7E1LKReqayx5Pwvb48NLVAAVIGLSQkY1TxGMTlWHoRzia0xmWCCt19Lc78h3Tkx7WuJT/RBGLhTIJYoJr/ikuQbddM6LSIlohcafpeK/15pbdUwyVHq4z5fOlXwnDA2Ex7sAtLfr46xIUD0udDZv41Eze4RHdP1FQiTUl7eS+IyqYbnOBH5H8fj2Q1Aoe996UPeF1KPFnGHGRz8UY5mJH39OtgiQJys802EKK469G3B1j07ASZgL6xmUIT1a9xOPAQeJwayn+zx2WGph6MD0rUwieSPi9qKl0O8kuHAXML/AbigbG8wppm8CKfO+WINyT+ET6NKK7Hdhz5/jM4oUDgbIA61p4UPzIXoJ5PKIK+UNk0lOL/Pl3Ug3iqM9kYL2nuYset4/G5GPnNyXP++nY28ydxgTuGGSJ3qUr 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: Add support for the new vm_uffd_ops API for shmem. Note that this only introduces the support, the API is not yet used by core mm. Due to the tailored uffd_copy() API, shmem is extremely easy to support it by reusing the existing mfill function. It only needs a separate uffd_get_folio() definition but that's oneliner. Cc: Hugh Dickins Signed-off-by: Peter Xu --- mm/shmem.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/mm/shmem.c b/mm/shmem.c index 0bc30dafad90..bd0a29000318 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -3151,6 +3151,13 @@ static inline struct inode *shmem_get_inode(struct mnt_idmap *idmap, #endif /* CONFIG_TMPFS_QUOTA */ #ifdef CONFIG_USERFAULTFD + +static int shmem_uffd_get_folio(struct inode *inode, pgoff_t pgoff, + struct folio **folio) +{ + return shmem_get_folio(inode, pgoff, 0, folio, SGP_NOALLOC); +} + int shmem_mfill_atomic_pte(pmd_t *dst_pmd, struct vm_area_struct *dst_vma, unsigned long dst_addr, @@ -5194,6 +5201,19 @@ static int shmem_error_remove_folio(struct address_space *mapping, return 0; } +#ifdef CONFIG_USERFAULTFD +static const vm_uffd_ops shmem_uffd_ops = { + .uffd_features = __VM_UFFD_FLAGS, + .uffd_ioctls = BIT(_UFFDIO_COPY) | + BIT(_UFFDIO_ZEROPAGE) | + BIT(_UFFDIO_WRITEPROTECT) | + BIT(_UFFDIO_CONTINUE) | + BIT(_UFFDIO_POISON), + .uffd_get_folio = shmem_uffd_get_folio, + .uffd_copy = shmem_mfill_atomic_pte, +}; +#endif + static const struct address_space_operations shmem_aops = { .dirty_folio = noop_dirty_folio, #ifdef CONFIG_TMPFS @@ -5296,6 +5316,9 @@ static const struct vm_operations_struct shmem_vm_ops = { .set_policy = shmem_set_policy, .get_policy = shmem_get_policy, #endif +#ifdef CONFIG_USERFAULTFD + .userfaultfd_ops = &shmem_uffd_ops, +#endif }; static const struct vm_operations_struct shmem_anon_vm_ops = { @@ -5305,6 +5328,9 @@ static const struct vm_operations_struct shmem_anon_vm_ops = { .set_policy = shmem_set_policy, .get_policy = shmem_get_policy, #endif +#ifdef CONFIG_USERFAULTFD + .userfaultfd_ops = &shmem_uffd_ops, +#endif }; int shmem_init_fs_context(struct fs_context *fc) -- 2.49.0