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 19E22C3064D for ; Tue, 2 Jul 2024 12:34:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 948796B009F; Tue, 2 Jul 2024 08:34:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8F8686B00A1; Tue, 2 Jul 2024 08:34:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7C0266B00A2; Tue, 2 Jul 2024 08:34:43 -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 5DB316B009F for ; Tue, 2 Jul 2024 08:34:43 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E11B9A21EA for ; Tue, 2 Jul 2024 12:34:42 +0000 (UTC) X-FDA: 82294756404.10.342D5F8 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf19.hostedemail.com (Postfix) with ESMTP id AD59F1A0004 for ; Tue, 2 Jul 2024 12:34:40 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; spf=pass (imf19.hostedemail.com: domain of cmarinas@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=cmarinas@kernel.org; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719923669; a=rsa-sha256; cv=none; b=Ka5HVNu3nUEx8SV5T4rHEcT7SsLLM/HM0tEKuhonGpQYR932r7nod8VOedYGHjaXzP6hQG SjpkJzJB0zeF73rqLENV5RajBzwo4oL+0d7FPbQMVUfTaEF0lbHpNKEgoaxGZVmMtofqag 57DNUcQo9+IaP0rqTdtvR1Ws/+5u6pk= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; spf=pass (imf19.hostedemail.com: domain of cmarinas@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=cmarinas@kernel.org; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719923669; 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: in-reply-to:in-reply-to:references:references; bh=9hoVH0GyGia0LlAGw7P5aswQr5Cr9o3mvlInZZEILV8=; b=bzZTqO9a8ywY/lADJfg2h74WZ4FbkGcT1Ova7zG7xuSRIDQZ8oFra/GZV30kz9FHqAYE/d 7P6sFOcwfLA6QpiAd2eEfKIl0g2Uvs7z9dPsFEzR/XsObgpjpbhxb1lWVz71LwJjQ0cVwC eXpuLk2RJqwfI+UoYOvcIp0abbRC3w8= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 420B3CE1D43; Tue, 2 Jul 2024 12:34:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 218CCC116B1; Tue, 2 Jul 2024 12:34:33 +0000 (UTC) Date: Tue, 2 Jul 2024 13:34:31 +0100 From: Catalin Marinas To: Yang Shi Cc: muchun.song@linux.dev, will@kernel.org, akpm@linux-foundation.org, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] hugetlbfs: add MTE support Message-ID: References: <20240625233717.2769975-1-yang@os.amperecomputing.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240625233717.2769975-1-yang@os.amperecomputing.com> X-Stat-Signature: qkbuwsq3utpseumhgbfu81nm6u1n5hju X-Rspamd-Queue-Id: AD59F1A0004 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1719923680-590911 X-HE-Meta: U2FsdGVkX18uKZg1iJnqXdSKrcdxizR4aIKrS7EXiS61dFA5VxZJvidMMegrXPcWk/SLxKbWfWU10ZTkehB/RnlVV2kDztbcEl3x0lm+7ZlIJJUbeZLW54QK1xp5gyBhvclJElRhjOsD/h4GtVPgr4Im6T10nWkE0B1PZsS6J5T2pZeSBpS6HdXBPywGlym8Mg55ABFo864dKB3ePk/Cqp1CTTpDo9+G99eHeqm3F/mElKM/7fjpREOpEsRFHuGN5ocN47zVhSn46k14/rjXxbteHtuchceHwyOVtqZAFFb/a9TzdnfEJ0kBCukgIMbWSefeG0XhsUitZ72sEBSfPhy4KALxic0CbuwW8oqMMOuDfvjQLYWNJAwCBTjmKn48sGIcJeFNg9IU4XujCchnZzA7Ce6/uIK3h1mFiWkL7NxuR8wjkqPJKJFYZf2/fbDVSEfJSpuqVJyygSCfpZH0yjBydgIUOa7tz12048dZrtVo80ovnLMREEUoGTKOnJmShmg95uMHtqtMJK6pmRsnGGz3zLVVRSMhMp02PMMcNjPOclm4GP2y0ZzUjjP4rH4k7GGI+k491HdTYBueul+y1E6LfBqhBJWaT7UJmPB9ipDctpk0wmsNoKjx+k+b01A1DIXjFBo1csW0mIBWCHyFo8Gwv+QzJePj9rJyCr1YBkGgNT7A2QlkmUXDhuDcfFcpaLn6E2sJc8GodShl71925fA2mr3p7+VVdaOTY5nwv6Kh42Ycqdwt1bFb57/gg9Mp6K2oCWHhXUSm1Txm20EWUMrKBuNTCJv35vqUu885X0nXrBdEX5b+XUo92u9taRfvSuIFNqSxUViGlR9MiAQxC41Orb0PHSt1HQ25JOpd4OSFxrw9RgGJNPjeFZr32riF26AadLBm8QOcDRP/ipN2tYukMUl50mSsiC38vK9hJGBirPF/j7zpYI6loCTlMlFy7b+s/N8xNU/fwHiSzY4 /bLKmXLo vh2kCFTbqfqLco3Xwd2MoT8byhV2EWlyD+q7sUPzH5NzMOzi/tc58WRYUZuSioSEtAkbbpV6AlkqsTnOJSz8nW6OqPS+Uee8mNP/9rF97Yz6OVQ1yqB6rrB/roqdoKh+LTZ0YuBhMvL2OX/cp6HxhTo8rXxP37QV5FbOXY7acN37A7EsAotKHjc/P7D04C8Q8swBwLO6VAG9qnsaGUZs8MfJYD2ETXzFH28bZ+NOizRNz5RXhgi/8NbWfBt4hU8tEesJKYTyz0UaG3Gab3NFhyq5bZvOtNcB/AR/OkzcMKoMvq08VkwW2pHwRVpZ2nKdL7ScOjzJDiBUS6dcCgTJmCH0DCUy55wCGXGK2p+yKRarZrB/vyBCXJE27Q8dSk+hKG7XuqY/4pyjjygLOVhaL70iDUlZMM/c+rAQ2EbEMtRafH23rpsPei8KH7g== 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: On Tue, Jun 25, 2024 at 04:37:17PM -0700, Yang Shi wrote: > MTE can be supported on ram based filesystem. It is supported on tmpfs. > There is use case to use MTE on hugetlbfs as well, adding MTE support. > > Signed-off-by: Yang Shi > --- > fs/hugetlbfs/inode.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c > index ecad73a4f713..c34faef62daf 100644 > --- a/fs/hugetlbfs/inode.c > +++ b/fs/hugetlbfs/inode.c > @@ -110,7 +110,7 @@ static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma) > * way when do_mmap unwinds (may be important on powerpc > * and ia64). > */ > - vm_flags_set(vma, VM_HUGETLB | VM_DONTEXPAND); > + vm_flags_set(vma, VM_HUGETLB | VM_DONTEXPAND | VM_MTE_ALLOWED); > vma->vm_ops = &hugetlb_vm_ops; Last time I checked, about a year ago, this was not sufficient. One issue is that there's no arch_clear_hugetlb_flags() implemented by your patch, leaving PG_arch_{2,3} set on a page. The other issue was that I initially tried to do this only on the head page but this did not go well with the folio_copy() -> copy_highpage() which expects the PG_arch_* flags on each individual page. The alternative was for arch_clear_hugetlb_flags() to iterate over all the pages in a folio. I'd also like to see some tests added to tools/testing/selftest/arm64/mte to exercise MAP_HUGETLB with PROT_MTE: write/read tags, a series of mman+munmap (mostly to check if old page flags are still around), force some copy on write. I don't think we should merge the patch without proper tests. An untested hunk on top of your changes: diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index 3954cbd2ff56..5357b00b9087 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -20,7 +20,19 @@ extern bool arch_hugetlb_migration_supported(struct hstate *h); static inline void arch_clear_hugetlb_flags(struct folio *folio) { - clear_bit(PG_dcache_clean, &folio->flags); + unsigned long i, nr_pages = folio_nr_pages(folio); + const unsigned long clear_flags = BIT(PG_dcache_clean) | + BIT(PG_arch_2) | BIT(PG_arch_3); + + if (!system_supports_mte()) { + clear_bit(PG_dcache_clean, &folio->flags); + return; + } + + for (i = 0; i < nr_pages; i++) { + struct page *page = folio_page(folio, i); + page->flags &= ~clear_flags; + } } #define arch_clear_hugetlb_flags arch_clear_hugetlb_flags diff --git a/arch/arm64/include/asm/mman.h b/arch/arm64/include/asm/mman.h index 5966ee4a6154..304dfc499e68 100644 --- a/arch/arm64/include/asm/mman.h +++ b/arch/arm64/include/asm/mman.h @@ -28,7 +28,8 @@ static inline unsigned long arch_calc_vm_flag_bits(unsigned long flags) * backed by tags-capable memory. The vm_flags may be overridden by a * filesystem supporting MTE (RAM-based). */ - if (system_supports_mte() && (flags & MAP_ANONYMOUS)) + if (system_supports_mte() && + (flags & (MAP_ANONYMOUS | MAP_HUGETLB))) return VM_MTE_ALLOWED; return 0; -- Catalin