From patchwork Fri Feb 21 16:07:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Roy X-Patchwork-Id: 13985870 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 277C5C021B6 for ; Fri, 21 Feb 2025 16:09:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A724F28000C; Fri, 21 Feb 2025 11:09:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9F9DD280001; Fri, 21 Feb 2025 11:09:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 84DF828000C; Fri, 21 Feb 2025 11:09:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 63F33280001 for ; Fri, 21 Feb 2025 11:09:35 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 175B21CA933 for ; Fri, 21 Feb 2025 16:09:35 +0000 (UTC) X-FDA: 83144437110.05.1F0AF51 Received: from smtp-fw-9106.amazon.com (smtp-fw-9106.amazon.com [207.171.188.206]) by imf08.hostedemail.com (Postfix) with ESMTP id CDADB160016 for ; Fri, 21 Feb 2025 16:09:32 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=amazon.co.uk header.s=amazon201209 header.b=HJfy7QZW; spf=pass (imf08.hostedemail.com: domain of "prvs=140b82bcc=roypat@amazon.co.uk" designates 207.171.188.206 as permitted sender) smtp.mailfrom="prvs=140b82bcc=roypat@amazon.co.uk"; dmarc=pass (policy=quarantine) header.from=amazon.co.uk ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740154173; 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=Kfd1Zplwy2qRjve62vAKobnSTBEdWZ73b7NbT1dhvg4=; b=jXNbaMxyJ2WDXlUJI/3zvr0XyOwIm5E8E59at3dIgrCZz3+zcqNfMUOAHQqrN0X6in+g55 4BvZAMDGBuiMT7/O7vb50hFZUmxFKW1aHwIlBIjCzsyJCzzH9D2PDPLRReKgxmYNVcRaMb HaRo6nBGqwgAyF8qfJnShvyohk/y62w= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=amazon.co.uk header.s=amazon201209 header.b=HJfy7QZW; spf=pass (imf08.hostedemail.com: domain of "prvs=140b82bcc=roypat@amazon.co.uk" designates 207.171.188.206 as permitted sender) smtp.mailfrom="prvs=140b82bcc=roypat@amazon.co.uk"; dmarc=pass (policy=quarantine) header.from=amazon.co.uk ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740154173; a=rsa-sha256; cv=none; b=r+julQ/cIWidPCCfO/Ee/80KQcglYkNT+boxE9c//9ZjZD+MQaVNwCQRl3H1HniHoSpHzn ccx1HwDyP/yg23qbZoDt9vOB992785oYJdB0I/ZuI+A6L388blBVkNZaXOWjiDPSLKRjrL 1RTU2bw/2XmurhI+WpThL7fYKbU2ibs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.co.uk; i=@amazon.co.uk; q=dns/txt; s=amazon201209; t=1740154173; x=1771690173; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Kfd1Zplwy2qRjve62vAKobnSTBEdWZ73b7NbT1dhvg4=; b=HJfy7QZWgJX19RZPxiJ478xggde2N7v0Cce7ytnHTGaVDlfbNucNSV7w dvNffA+Zh1pv9GYXB1gV6jr0dIo+yy/92SxZ4rP/j/6w7blD14qChzXZU yi+dzI6boSHVgi6NJiZ6+X/6/WAojuR276Amc3TK1iypAFccvpdeBOSwr E=; X-IronPort-AV: E=Sophos;i="6.13,305,1732579200"; d="scan'208";a="800876125" Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev) ([10.25.36.210]) by smtp-border-fw-9106.sea19.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Feb 2025 16:09:27 +0000 Received: from EX19MTAUWA002.ant.amazon.com [10.0.38.20:57570] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.55.141:2525] with esmtp (Farcaster) id 034d3b2a-db78-4a01-a02f-f39d1fe30c84; Fri, 21 Feb 2025 16:09:26 +0000 (UTC) X-Farcaster-Flow-ID: 034d3b2a-db78-4a01-a02f-f39d1fe30c84 Received: from EX19D020UWA003.ant.amazon.com (10.13.138.254) by EX19MTAUWA002.ant.amazon.com (10.250.64.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.39; Fri, 21 Feb 2025 16:09:21 +0000 Received: from EX19MTAUEC001.ant.amazon.com (10.252.135.222) by EX19D020UWA003.ant.amazon.com (10.13.138.254) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Fri, 21 Feb 2025 16:09:20 +0000 Received: from email-imr-corp-prod-pdx-all-2b-c1559d0e.us-west-2.amazon.com (10.43.8.6) by mail-relay.amazon.com (10.252.135.200) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.39 via Frontend Transport; Fri, 21 Feb 2025 16:09:20 +0000 Received: from ua2d7e1a6107c5b.ant.amazon.com (dev-dsk-roypat-1c-dbe2a224.eu-west-1.amazon.com [172.19.88.180]) by email-imr-corp-prod-pdx-all-2b-c1559d0e.us-west-2.amazon.com (Postfix) with ESMTPS id 05B8B401F3; Fri, 21 Feb 2025 16:09:12 +0000 (UTC) From: Patrick Roy To: , , CC: Patrick Roy , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v4 02/12] mm/secretmem: set AS_NO_DIRECT_MAP instead of special-casing Date: Fri, 21 Feb 2025 16:07:15 +0000 Message-ID: <20250221160728.1584559-3-roypat@amazon.co.uk> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221160728.1584559-1-roypat@amazon.co.uk> References: <20250221160728.1584559-1-roypat@amazon.co.uk> MIME-Version: 1.0 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: CDADB160016 X-Stat-Signature: nznqupa6ictcbxmodw5kkby3ws8e8muw X-Rspam-User: X-HE-Tag: 1740154172-143062 X-HE-Meta: U2FsdGVkX1/kQdlc5Ow/iZSHgVIsIDtFq2ZkFVW8TF4xOQlG6+7oulY1H85dU+PMG3oWXlYDFutd5+21Gb1d9qJF3uETdSNjYgbcP7w7Z/dJHDHGXvReUQ+/XcNQyN+ELk7FhSRbKfWL3bjLpqAxOVUQf9xBJdpEo9Z7XgHMis92erOyG22UzUAcJfs8YqKp6I6yJLnw0DKpBWglDA6c5buX0+Ymg2xPcEjHxIY8Kmyas6fHcR3v2eE1KFzLUBB/bINZnxHgMm89rr0WMfphMQvSpCpQx/UgL2jXUj/gceOoEvya6JN+XDv9S+PvWkJXL2kqHeXhUihsh6mCNnVleR38oH4CEXN4eBm/IdlJtYwHU9kQuhSqUq0dqm0k9tW6Beueb72xKH2am/EuOSdOfJOmCCeSRkTNNorYBd9bELztUCY8QVHRwYxLKqqx/hc4HJzVdRmNe21cyoc/EoqsCnr1iEBiwqbxkBXE25OHIgSF2Vesvs2lH1VTpSZGxzJKokjfxHb8LJNf5Rt6VYGLJUVssXkFrFowXbyQyqi9aUR8jw6cED1xdDpYKmhcuPX68crP/2097ZSt0ehFxpTeYERsrVApguONnV1HmOkHG32/tKCLRTNr4jYnI9bBinVZBKLWSjXU8F4yt4JGuwHv0UrgP8fLmLCf1eiVz7LkMjsF1MHCgOPURR6rYRa3us1QSzfWtrq8z8T7AfSbZcsGtkXLqcFq1Ha1Mr01uq93Av3GrGDoXEVZABXa+3Jw72L6zghvZh9R5rlw6TUeeDj5dU8USo66g6zpj5lhun9ug/8zSFamdRaQaXxGY8UNVEPHqV8OMWhY1Acgy04XlhgP8blv+upy39pha4t1kRLXl+vTnBLdnLqGy+3Cg/z+9zzlTi4pq0X34mHWDlBSG2iGtfqtKB0yPtbFX/J44YREOaraAw1ua28V6KddqkfWPW6KAjiMn6X4G82bE0Nfvjc Hz9A0TtG Bkfc++sTz6hH7qNIcohqrfCzVWftIH+5UmIZXFtH6Uh713RSRqjxkQQioPS81IR3WghR8fC3bZVHFo+x1E/tWFZ/DJ++OA6j1J/3Dt5lcXnThDUngP4VENj9TJt/HnlS1j/tPOzvyC9uLX9S31sMJ2kd0rYJLwLDVBKP0eVOMuOma4iajluaG7MmiJaJpBSc5pOcjMWW0ua7vVNVzJzaIPcbuViZRQcswmLLpfqGMmXZUNubfiiXchhXrt9HH2xzsknw6VjrDShpS2jPHxFNKuyQkNXQsLtfoAYFnw+ie3j60xROXFu2emZTUl328qCADd24b3oVo2KoxX6DKEc+5TxQ7nD/+ho9JYNTTHSaWie4LPzGfahVzyTNemJwj3NJZfRPIEHakx3N5etebfMKa2BmOQ8LoLRb751P/gam4TuRmJWGOvG+hFowpuVhOtK6mIfFZXccJx74Qx9ovmaVYPzPpiykda3YpRmfnJVva7X/0fIA5m+zKolx7LxCdNtHCJZQf 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: Make secretmem set AS_NO_DIRECT_MAP on its struct address_space, to drop all the vma_is_secretmem()/secretmem_mapping() checks that are based on checking explicitly for the secretmem ops structures. This drops a optimization in gup_fast_folio_allowed() where secretmem_mapping() was only called if CONFIG_SECRETMEM=y. secretmem is enabled by default since commit b758fe6df50d ("mm/secretmem: make it on by default"), so the secretmem check did not actually end up elided in most cases anymore anyway. Signed-off-by: Patrick Roy --- include/linux/secretmem.h | 18 ------------------ lib/buildid.c | 2 +- mm/gup.c | 14 +------------- mm/mlock.c | 3 +-- mm/secretmem.c | 6 +----- 5 files changed, 4 insertions(+), 39 deletions(-) diff --git a/include/linux/secretmem.h b/include/linux/secretmem.h index e918f96881f5..0ae1fb057b3d 100644 --- a/include/linux/secretmem.h +++ b/include/linux/secretmem.h @@ -4,28 +4,10 @@ #ifdef CONFIG_SECRETMEM -extern const struct address_space_operations secretmem_aops; - -static inline bool secretmem_mapping(struct address_space *mapping) -{ - return mapping->a_ops == &secretmem_aops; -} - -bool vma_is_secretmem(struct vm_area_struct *vma); bool secretmem_active(void); #else -static inline bool vma_is_secretmem(struct vm_area_struct *vma) -{ - return false; -} - -static inline bool secretmem_mapping(struct address_space *mapping) -{ - return false; -} - static inline bool secretmem_active(void) { return false; diff --git a/lib/buildid.c b/lib/buildid.c index 80b5d805067f..33f173a607ad 100644 --- a/lib/buildid.c +++ b/lib/buildid.c @@ -66,7 +66,7 @@ static int freader_get_folio(struct freader *r, loff_t file_off) freader_put_folio(r); /* reject secretmem folios created with memfd_secret() or guest_memfd() */ - if (secretmem_mapping(r->file->f_mapping) || mapping_no_direct_map(r->file->f_mapping)) + if (mapping_no_direct_map(r->file->f_mapping)) return -EFAULT; r->folio = filemap_get_folio(r->file->f_mapping, file_off >> PAGE_SHIFT); diff --git a/mm/gup.c b/mm/gup.c index 7ddaf93c5b6a..b1483a876740 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1283,7 +1283,7 @@ static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags) if ((gup_flags & FOLL_LONGTERM) && vma_is_fsdax(vma)) return -EOPNOTSUPP; - if (vma_is_secretmem(vma) || vma_is_no_direct_map(vma)) + if (vma_is_no_direct_map(vma)) return -EFAULT; if (write) { @@ -2786,7 +2786,6 @@ static bool gup_fast_folio_allowed(struct folio *folio, unsigned int flags) { bool reject_file_backed = false; struct address_space *mapping; - bool check_secretmem = false; unsigned long mapping_flags; /* @@ -2798,14 +2797,6 @@ static bool gup_fast_folio_allowed(struct folio *folio, unsigned int flags) reject_file_backed = true; /* We hold a folio reference, so we can safely access folio fields. */ - - /* secretmem folios are always order-0 folios. */ - if (IS_ENABLED(CONFIG_SECRETMEM) && !folio_test_large(folio)) - check_secretmem = true; - - if (!reject_file_backed && !check_secretmem) - return true; - if (WARN_ON_ONCE(folio_test_slab(folio))) return false; @@ -2847,9 +2838,6 @@ static bool gup_fast_folio_allowed(struct folio *folio, unsigned int flags) * At this point, we know the mapping is non-null and points to an * address_space object. */ - if (check_secretmem && secretmem_mapping(mapping)) - return false; - if (mapping_no_direct_map(mapping)) return false; diff --git a/mm/mlock.c b/mm/mlock.c index 07a351491d9d..a43f308be70d 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -474,8 +474,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_no_direct_map(vma) || - (oldflags & VM_DROPPABLE)) + vma_is_dax(vma) || vma_is_no_direct_map(vma) || (oldflags & VM_DROPPABLE)) /* don't set VM_LOCKED or VM_LOCKONFAULT and don't count */ goto out; diff --git a/mm/secretmem.c b/mm/secretmem.c index 1b0a214ee558..ea4c04d469b1 100644 --- a/mm/secretmem.c +++ b/mm/secretmem.c @@ -136,11 +136,6 @@ static int secretmem_mmap(struct file *file, struct vm_area_struct *vma) return 0; } -bool vma_is_secretmem(struct vm_area_struct *vma) -{ - return vma->vm_ops == &secretmem_vm_ops; -} - static const struct file_operations secretmem_fops = { .release = secretmem_release, .mmap = secretmem_mmap, @@ -214,6 +209,7 @@ static struct file *secretmem_file_create(unsigned long flags) mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); mapping_set_unevictable(inode->i_mapping); + mapping_set_no_direct_map(inode->i_mapping); inode->i_op = &secretmem_iops; inode->i_mapping->a_ops = &secretmem_aops;