From patchwork Wed Aug 23 13:13:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Elisei X-Patchwork-Id: 13362301 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 63FEDEE4993 for ; Wed, 23 Aug 2023 13:16:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 044C428005E; Wed, 23 Aug 2023 09:16:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F374D28005D; Wed, 23 Aug 2023 09:16:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DFFB728005E; Wed, 23 Aug 2023 09:16:38 -0400 (EDT) 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 D15CA28005D for ; Wed, 23 Aug 2023 09:16:38 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A5BF1C0111 for ; Wed, 23 Aug 2023 13:16:38 +0000 (UTC) X-FDA: 81155418876.23.D389EE3 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf13.hostedemail.com (Postfix) with ESMTP id 8CB8320014 for ; Wed, 23 Aug 2023 13:16:36 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf13.hostedemail.com: domain of alexandru.elisei@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=alexandru.elisei@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692796596; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4uPh9wMSKhUVzYjVNVvG0TPCuujYvgNW9n6bQKO5bMc=; b=LEmeNbgmNUCL3+NRiyx0lKS/Z+yAuAd7607cTHTdDuzDMdVDWaFBatL3ZveuLyZAPzLlnw ZZ1m1hAdtcaGW8icaNqbgwmRLBhhR0tmqQYUaJwnKvIWMMErsFwxJhzp2G7hhSxoC5BYnR BKHSTTT0OH/hPIOHHo5kbQxC4x85NeI= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf13.hostedemail.com: domain of alexandru.elisei@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=alexandru.elisei@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692796596; a=rsa-sha256; cv=none; b=lbxkyYmBB87KAwumypS3EVKINkUGtcmBIASxBsDciI6QiVSHX2g3k2SiHTn4ySUY/rzRMZ JIdgzC4ua67gcMcxDBFjNbUeD+TtaXb65HS9lG2lMWdG83yN1l7wyY8MjyACBuxuTZGRWj rSJT8jxO2UR9PPe6KCLOiL/uLLhDOuk= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6F7C11655; Wed, 23 Aug 2023 06:17:16 -0700 (PDT) Received: from e121798.cable.virginm.net (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 880023F740; Wed, 23 Aug 2023 06:16:29 -0700 (PDT) From: Alexandru Elisei To: catalin.marinas@arm.com, will@kernel.org, oliver.upton@linux.dev, maz@kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, arnd@arndb.de, akpm@linux-foundation.org, mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, vschneid@redhat.com, mhiramat@kernel.org, rppt@kernel.org, hughd@google.com Cc: pcc@google.com, steven.price@arm.com, anshuman.khandual@arm.com, vincenzo.frascino@arm.com, david@redhat.com, eugenis@google.com, kcc@google.com, hyesoo.yu@samsung.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH RFC 23/37] mm: Teach vma_alloc_folio() about metadata-enabled VMAs Date: Wed, 23 Aug 2023 14:13:36 +0100 Message-Id: <20230823131350.114942-24-alexandru.elisei@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230823131350.114942-1-alexandru.elisei@arm.com> References: <20230823131350.114942-1-alexandru.elisei@arm.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 8CB8320014 X-Stat-Signature: 3xwgo9fyhwmox9aacrtod7ar97imq86a X-HE-Tag: 1692796596-857260 X-HE-Meta: U2FsdGVkX1/IjBmDmw2dbsQ0zS1G6PwYttEiokb0RYKoGBt0pX/359LcK83bfZUUkCHe9SbArrtzQbLM1pTickEcR4IqDQSZaFl4JHC+lZYx/zs1xOwznK5Qyx5X75ZQ/euavU97ax9JAopOyqRbrv6nqtCjy0FajNzqrteqxMJBzSMfIsha8BDSgOjmLBJ9gnZKTCQLe+13Q80erRqIiG4H11EERNokX2tnE/B4r+x53I7JP3lTklNf3+4KXSR2ZyTBknWoyCUH/WFHaWzco/mQcS5zVf0fk/qpNzmcaTPTY1hkY6Haa96RccAkJvAV8eMoIH541d7jgvp6jlinOOhTir1XowtI2p5amT69KIrwKrcERtQ8zCiv65qBGPa2ppyenUVDbBC1RPScgUQ336HdCLuNzqMI5hlofegNsox+r4EW2pPyqvZsJDt1bJwlgkxrkHC888FbY0MNFxiLV/6faR9w+cXl+RgYe6fjFdt6O5bIGqaPzAfXFG3Mz4IWgmodQTFvM2LtvjiDorNx8fzLVKce+lgRnbuV1aqo/w6zqKLTmU6PvrZsB0n1uCpJGEl9tL4lB08EKNWgOdwO+i/6KynumLGGuQhL785/ivTg9fdUkUNN+1sWAdZXa7JplKr/Wrw3oM3vOMOR0uhIz15t9Plcb7jwr4G4NkPoaAF7ezi+F9FxNpvG0RNTPtSuUxgdzKeQXT6oNjttUD0qe3hiRQUFHA6nWb4ygd0PqmlAQlCOOClkuMCUJ3/qonFqkwaMsfJfYrqpbDvKCw1uRGObwf4VaGeyowz490seqGJ4tHmNbVKe2cvv4ffZelEYJu+BztbaOQj9dXvwh7274wwkRMTSFffWsvXRfChl1xTfuwSk8Za8QhFLaPy/u2Asv7Ns+5ShPFMeuMkdBEiax2wUqXGznK3RWs+WoS42irZrqY8huLNyvZONqkJ/qHqQl5aT8vD9YN+LmKlenpB GmPMX5MN rXSpTnnEJ6O30/X+Hrv/AkUFpRYVBAOUrxLHepT7R/uIPscvzPTrXtXR3DWsQ7IHGBcw0puuNoSwbzykrqXL96q88z2wXBME9V1yWikzoXxD9KOgVB21WpoNnmh/yS1X574fFbqdd/piG+TgO/bgl3FevWAlSdQNc8fPMBPWPF9AjSw8klwGFXyzJa9mkmsKkg20RrUgq4T8r49Q= 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: When an anonymous page is mapped into the user address space as a result of a write fault, that page is zeroed. On arm64, when the VMA has metadata enabled, the tags are zeroed at the same time as the page contents, with the combination of gfp flags __GFP_ZERO | __GFP_TAGGED (which used be called __GFP_ZEROTAGS for this reason). For this use case, it is enough to set the __GFP_TAGGED flag in vma_alloc_zeroed_movable_folio(). But with dynamic tag storage reuse, it becomes necessary to have the __GFP_TAGGED flag set when allocating a page to be mapped in a VMA with metadata enabled in order reserve the corresponding metadata storage. Change vma_alloc_folio() to take into account VMAs with metadata enabled. Signed-off-by: Alexandru Elisei --- arch/arm64/include/asm/page.h | 5 ++--- arch/arm64/mm/fault.c | 19 ------------------- mm/mempolicy.c | 3 +++ 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/arch/arm64/include/asm/page.h b/arch/arm64/include/asm/page.h index 2312e6ee595f..88bab032a493 100644 --- a/arch/arm64/include/asm/page.h +++ b/arch/arm64/include/asm/page.h @@ -29,9 +29,8 @@ void copy_user_highpage(struct page *to, struct page *from, void copy_highpage(struct page *to, struct page *from); #define __HAVE_ARCH_COPY_HIGHPAGE -struct folio *vma_alloc_zeroed_movable_folio(struct vm_area_struct *vma, - unsigned long vaddr); -#define vma_alloc_zeroed_movable_folio vma_alloc_zeroed_movable_folio +#define vma_alloc_zeroed_movable_folio(vma, vaddr) \ + vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr, false) void tag_clear_highpage(struct page *to); #define __HAVE_ARCH_TAG_CLEAR_HIGHPAGE diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 1ca421c11ebc..7e2dcf5e3baf 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -936,25 +936,6 @@ void do_debug_exception(unsigned long addr_if_watchpoint, unsigned long esr, } NOKPROBE_SYMBOL(do_debug_exception); -/* - * Used during anonymous page fault handling. - */ -struct folio *vma_alloc_zeroed_movable_folio(struct vm_area_struct *vma, - unsigned long vaddr) -{ - gfp_t flags = GFP_HIGHUSER_MOVABLE | __GFP_ZERO; - - /* - * If the page is mapped with PROT_MTE, initialise the tags at the - * point of allocation and page zeroing as this is usually faster than - * separate DC ZVA and STGM. - */ - if (vma->vm_flags & VM_MTE) - flags |= __GFP_TAGGED; - - return vma_alloc_folio(flags, 0, vma, vaddr, false); -} - void tag_clear_highpage(struct page *page) { /* Tag storage pages cannot be tagged. */ diff --git a/mm/mempolicy.c b/mm/mempolicy.c index d164b5c50243..782e0771cabd 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -2170,6 +2170,9 @@ struct folio *vma_alloc_folio(gfp_t gfp, int order, struct vm_area_struct *vma, int preferred_nid; nodemask_t *nmask; + if (vma->vm_flags & VM_MTE) + gfp |= __GFP_TAGGED; + pol = get_vma_policy(vma, addr); if (pol->mode == MPOL_INTERLEAVE) {