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 5E79EC47DDF for ; Tue, 30 Jan 2024 11:38:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9A3506B008C; Tue, 30 Jan 2024 06:38:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 778A06B0092; Tue, 30 Jan 2024 06:38:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5F1D06B0093; Tue, 30 Jan 2024 06:38:13 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 4A5856B008C for ; Tue, 30 Jan 2024 06:38:13 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 23A9680808 for ; Tue, 30 Jan 2024 11:38:13 +0000 (UTC) X-FDA: 81735778866.24.06B0F89 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf06.hostedemail.com (Postfix) with ESMTP id 5AE7D180004 for ; Tue, 30 Jan 2024 11:38:11 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of alexandru.elisei@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=alexandru.elisei@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706614691; 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; bh=ogig7Q8KDTVrRhwsL87GPNKiUj3+j3EuOUkoIhvkBp8=; b=rzhh1mP1gD/E6wr8WJHDA+8JxEJ0LLELalrgHXWcUlogkXNdy26flEhgCBbMvF6jhBv24N BqitGMeVri6fpJ+E2xJa67okKWwxPS8sblrdLPMyJnpkOp7atVH4glzDHx9GGXLkOogZC9 sdhE0MR+hOiNw+lPWhB+BOF4D5qF/DE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706614691; a=rsa-sha256; cv=none; b=wbJrj4HJ1gOand3084Ou8R1k1ULbj+Tg6ZmlA/ct9XM6v8IFhUtZp1BLK+Me/XBYv5IC0g 77GtLJx2XI1rq9KV6p2x+D4QoTVZqP3Hquabkg1QYT4a0jyEkKk5PbCsSiqAc35CdeNFLE HwIBIWK9t6s9RKM0nHmW3ZBSOKgu/NA= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of alexandru.elisei@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=alexandru.elisei@arm.com; dmarc=pass (policy=none) header.from=arm.com 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 2F6CEDA7; Tue, 30 Jan 2024 03:38:54 -0800 (PST) Received: from raptor (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 070733F5A1; Tue, 30 Jan 2024 03:38:04 -0800 (PST) Date: Tue, 30 Jan 2024 11:38:02 +0000 From: Alexandru Elisei To: Peter Collingbourne Cc: 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, 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: Re: [PATCH RFC v3 23/35] arm64: mte: Try to reserve tag storage in arch_alloc_page() Message-ID: References: <20240125164256.4147-1-alexandru.elisei@arm.com> <20240125164256.4147-24-alexandru.elisei@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Stat-Signature: 5w1wncutjko6h11pox5ta4u34dkbz4eq X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 5AE7D180004 X-Rspam-User: X-HE-Tag: 1706614691-704794 X-HE-Meta: U2FsdGVkX1+hnnUXqwZy+ZkHvECUarvGeZfC6r/ZqGq8K4P8cSDs/ttzPjjIifbYnqvIyFcUhWPkh9NdbntDTCuWMjrGIGVyBhH6Ftoh6nR1fj36i0ndXwJ+1P7AU3AEDGB9ZRSC6Nz1LFDGBStV8zf3yExDHdEwKyRtvtBoXTBEX7A7IL5dfoOWW+uwDNWeTBgIm2ayHDkqrKf9kcFpjqEocoVhaM9LZHwZqHEfXVUUM6MmXz4VHJE1GG1hny/6mo7913D9V6XxEZpqRl5DccNc8ypLynsq2vofSeBpYhfd1meD9E/uuuwihAAxGDrO/UAHaCqyLhuBQc1OKLutbnyMsITUjyRRPIAMiYNfAg3BB3TZcWGEumoV/XaB5gNKAyrH8vYo4LnELvCQxxHN2Q08RYWX7IrJXgEPoPM8QjcgHBrB/NTb61YyIWlqNhgwYt7IdTI3x5Itxa7XbSdABZxECckXMAbgbLCD++aqznK8N2uBQ8OGcUQJExQdD+HudBlCyOOZLstlMMMmDRmZEQKJEyhRQUTd+ud07MFgyles5rW2VeG3qV76EWCRoIgxEftI6IWNfQjcjmkqJYjxHdKbu9CbVdVHcASqzdBLWSy7I8Uugm4Ejpr43RHOGMuOzFoTfxKHJIDEKgbKZV5GDToq7YsVvg9lRMJjQwa5B3uxLu0w7Bix5OIOqX0b6LjvjeNj1BFmCAbGU8hQjhMd4ijaSZdQKZIrw3Wfwebu9/2FDekmOkeqYymQRtPlLXR9TsMfpsQFfz+huItpHvrQgV4hKc0fL8DUtbjWMPJ/swd02CFP1KHLNw/4BShTd059SzXO7vNFj1P9NeZiDB1RuPcz6xrYE9FnMYpUyrUK1SuW1KHDp20YE224LAlghdMaJdjf3kK1DI4Z+a/J9Fs7LjzE+zDYlEcf7oFNNZ9IHF7q7Zn9wZCMix8lYI+9TgPZj+ByI1JQDC1G1B6u9Ew weMV+hnT Ncwoy4YGTcdCTVMJfGdTbqooHwJRj+gP0nlaLeQ3rs9pTRWTqqw0SbKdJBHXofFxV4L/JPGQ4M6dOz/ygaiRoxoOI3J4OUqkteqgenqsDuaB9u6HdRK5uULIylYvQFIXlN3XReHjFgr+izLO2wkEIkmcowXCKObOIfcB0Lf6EjBSqeoHdBH1gLgafvPC8PjeG1Isc/jkORhu6dKPMKnQgdzctCttCLVw/Iqt61DAf+tgp3fig/xbYzqhTTFUrinEn37it 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 Peter, On Mon, Jan 29, 2024 at 04:04:18PM -0800, Peter Collingbourne wrote: > On Thu, Jan 25, 2024 at 8:45 AM Alexandru Elisei > wrote: > > > > Reserve tag storage for a page that is being allocated as tagged. This > > is a best effort approach, and failing to reserve tag storage is > > allowed. > > > > When all the associated tagged pages have been freed, return the tag > > storage pages back to the page allocator, where they can be used again for > > data allocations. > > > > Signed-off-by: Alexandru Elisei > > --- > > > > Changes since rfc v2: > > > > * Based on rfc v2 patch #16 ("arm64: mte: Manage tag storage on page > > allocation"). > > * Fixed calculation of the number of associated tag storage blocks (Hyesoo > > Yu). > > * Tag storage is reserved in arch_alloc_page() instead of > > arch_prep_new_page(). > > > > arch/arm64/include/asm/mte.h | 16 +- > > arch/arm64/include/asm/mte_tag_storage.h | 31 +++ > > arch/arm64/include/asm/page.h | 5 + > > arch/arm64/include/asm/pgtable.h | 19 ++ > > arch/arm64/kernel/mte_tag_storage.c | 234 +++++++++++++++++++++++ > > arch/arm64/mm/fault.c | 7 + > > fs/proc/page.c | 1 + > > include/linux/kernel-page-flags.h | 1 + > > include/linux/page-flags.h | 1 + > > include/trace/events/mmflags.h | 3 +- > > mm/huge_memory.c | 1 + > > 11 files changed, 316 insertions(+), 3 deletions(-) > > > > diff --git a/arch/arm64/include/asm/mte.h b/arch/arm64/include/asm/mte.h > > index 8034695b3dd7..6457b7899207 100644 > > --- a/arch/arm64/include/asm/mte.h > > +++ b/arch/arm64/include/asm/mte.h > > @@ -40,12 +40,24 @@ void mte_free_tag_buf(void *buf); > > #ifdef CONFIG_ARM64_MTE > > > > /* track which pages have valid allocation tags */ > > -#define PG_mte_tagged PG_arch_2 > > +#define PG_mte_tagged PG_arch_2 > > /* simple lock to avoid multiple threads tagging the same page */ > > -#define PG_mte_lock PG_arch_3 > > +#define PG_mte_lock PG_arch_3 > > +/* Track if a tagged page has tag storage reserved */ > > +#define PG_tag_storage_reserved PG_arch_4 > > + > > +#ifdef CONFIG_ARM64_MTE_TAG_STORAGE > > +DECLARE_STATIC_KEY_FALSE(tag_storage_enabled_key); > > +extern bool page_tag_storage_reserved(struct page *page); > > +#endif > > > > static inline void set_page_mte_tagged(struct page *page) > > { > > +#ifdef CONFIG_ARM64_MTE_TAG_STORAGE > > + /* Open code mte_tag_storage_enabled() */ > > + WARN_ON_ONCE(static_branch_likely(&tag_storage_enabled_key) && > > + !page_tag_storage_reserved(page)); > > +#endif > > /* > > * Ensure that the tags written prior to this function are visible > > * before the page flags update. > > diff --git a/arch/arm64/include/asm/mte_tag_storage.h b/arch/arm64/include/asm/mte_tag_storage.h > > index 7b3f6bff8e6f..09f1318d924e 100644 > > --- a/arch/arm64/include/asm/mte_tag_storage.h > > +++ b/arch/arm64/include/asm/mte_tag_storage.h > > @@ -5,6 +5,12 @@ > > #ifndef __ASM_MTE_TAG_STORAGE_H > > #define __ASM_MTE_TAG_STORAGE_H > > > > +#ifndef __ASSEMBLY__ > > + > > +#include > > + > > +#include > > + > > #ifdef CONFIG_ARM64_MTE_TAG_STORAGE > > > > DECLARE_STATIC_KEY_FALSE(tag_storage_enabled_key); > > @@ -15,6 +21,15 @@ static inline bool tag_storage_enabled(void) > > } > > > > void mte_init_tag_storage(void); > > + > > +static inline bool alloc_requires_tag_storage(gfp_t gfp) > > +{ > > + return gfp & __GFP_TAGGED; > > +} > > +int reserve_tag_storage(struct page *page, int order, gfp_t gfp); > > +void free_tag_storage(struct page *page, int order); > > + > > +bool page_tag_storage_reserved(struct page *page); > > #else > > static inline bool tag_storage_enabled(void) > > { > > @@ -23,6 +38,22 @@ static inline bool tag_storage_enabled(void) > > static inline void mte_init_tag_storage(void) > > { > > } > > +static inline bool alloc_requires_tag_storage(struct page *page) > > This function should take a gfp_t to match the > CONFIG_ARM64_MTE_TAG_STORAGE case. Ah, yes, it should, nice catch, the compiler didn't throw an error. Will fix, thanks! Alex