Received: by 2002:a05:7412:1492:b0:e2:908c:2ebd with SMTP id s18csp644975rdh; Wed, 23 Aug 2023 10:25:23 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEjcCCmCTl1a71Eg+ryCSZoCN3Kg8y3vTI5IA/m8Y/7OThfvsc8lX56x65W+seVEYFwa7iP X-Received: by 2002:a17:907:7714:b0:99d:fd27:b38d with SMTP id kw20-20020a170907771400b0099dfd27b38dmr9619691ejc.70.1692811522778; Wed, 23 Aug 2023 10:25:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692811522; cv=none; d=google.com; s=arc-20160816; b=EWj5wjxlCf2aEOUIOhC+oBDcApapSedKEpzkB+OPV6i9faFo+BojizYsrVJ7X/jGe6 l0WHJnFk1vV9yPJic2w5uzMT1lSp3TYg49GpB7+x1A6om1tqOkL0/hu93ttUr9FLEbdo d7tvNmDDewPcBeJrCjzvqYkNYb7nIgnR4S0AJmBOrVMVX1x7a3gsAsTB27xdM+zP3rrI sSrqWaWgozmYaiuIn2ZigDiokCNp2aUDnV6hmvf+JSi8aNYeAkTh1xY1A8LBGXps5YNF IYvkhOfZz02bjk8viKOVZ5ORj7mpEatfhwQKstnQhpoG26AO/8/HR+kR3A4Sv/s3XPY0 Z5yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Y+6K9RhNe7jOhIChMm8dU4Uk3x6aZgKT0cYlxD+b1zA=; fh=imQ/NyNBnYYmfGk25mVbc8KayF+owEio9SAkc/cwCHU=; b=rhPm+1uFNCMVJjZIqtlGgMpKKF9kCbZgC6tgj6x0rtpP06sZpFSD+GMtLQI+nFTjWK xrJTBofVnLSRfgh6GLMnC/zaRw8jy/ZsNmN2XfdCfocqZU2z5mVz+P8AgbfQ5q5yhXAs MbaROi2N0O9UV2Q6Xh10jjciZ2CLrynusaib1nzvnhCtp3MUdLliGwsjOZU+RWBDevhd 1cROI4Q88yHrDx+kHcNc+/YPR+wS99hgyUhxyxXsJP47sTuBHMXm8WvtodBFXqUrR2d/ xhyyQWxTDicODxj96F77ImckARXG9IUt8825JoX5v/6BTboeKDnGPiHMrdD5kx6CQ+uw 0Ezg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v9-20020a1709061dc900b0099331401bdcsi9227384ejh.694.2023.08.23.10.24.57; Wed, 23 Aug 2023 10:25:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235974AbjHWOBq (ORCPT + 99 others); Wed, 23 Aug 2023 10:01:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236008AbjHWN1i (ORCPT ); Wed, 23 Aug 2023 09:27:38 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 5ECF110C7; Wed, 23 Aug 2023 06:27:06 -0700 (PDT) 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 CC9FC1684; Wed, 23 Aug 2023 06:16:30 -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 8E4913F740; Wed, 23 Aug 2023 06:15:44 -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 16/37] arm64: mte: Move tag storage to MIGRATE_MOVABLE when MTE is disabled Date: Wed, 23 Aug 2023 14:13:29 +0100 Message-Id: <20230823131350.114942-17-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 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If MTE is disabled (for example, from the kernel command line with the arm64.nomte option), the tag storage pages behave just like normal pages, because they will never be used to store tags. If that's the case, expose them to the page allocator as MIGRATE_MOVABLE pages. MIGRATE_MOVABLE has been chosen because the bulk of memory allocations comes from userspace, and the migratetype for those allocations is MIGRATE_MOVABLE. MIGRATE_RECLAIMABLE and MIGRATE_UNMOVABLE requests can still use the pages as a fallback. Signed-off-by: Alexandru Elisei --- arch/arm64/kernel/mte_tag_storage.c | 18 ++++++++++++++++++ include/linux/gfp.h | 2 ++ mm/mm_init.c | 3 +-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/mte_tag_storage.c b/arch/arm64/kernel/mte_tag_storage.c index 87160f53960f..4a6bfdf88458 100644 --- a/arch/arm64/kernel/mte_tag_storage.c +++ b/arch/arm64/kernel/mte_tag_storage.c @@ -296,6 +296,24 @@ static int __init mte_tag_storage_activate_regions(void) } } + /* + * MTE disabled, tag storage pages can be used like any other pages. The + * only restriction is that the pages cannot be used by kexec because + * the memory is marked as reserved in the memblock allocator. + */ + if (!system_supports_mte()) { + for (i = 0; i< num_tag_regions; i++) { + tag_range = &tag_regions[i].tag_range; + for (pfn = tag_range->start; + pfn <= tag_range->end; + pfn += pageblock_nr_pages) { + init_reserved_pageblock(pfn_to_page(pfn), MIGRATE_MOVABLE); + } + } + + return 0; + } + for (i = 0; i < num_tag_regions; i++) { tag_range = &tag_regions[i].tag_range; for (pfn = tag_range->start; pfn <= tag_range->end; pfn += pageblock_nr_pages) { diff --git a/include/linux/gfp.h b/include/linux/gfp.h index fb344baa9a9b..622bb9406cae 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -354,6 +354,8 @@ extern struct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask, #endif void free_contig_range(unsigned long pfn, unsigned long nr_pages); +extern void init_reserved_pageblock(struct page *page, enum migratetype migratetype); + #ifdef CONFIG_MEMORY_METADATA extern void init_metadata_reserved_pageblock(struct page *page); #else diff --git a/mm/mm_init.c b/mm/mm_init.c index 467c80e9dacc..eedaacdf153d 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -2330,8 +2330,7 @@ bool __init deferred_grow_zone(struct zone *zone, unsigned int order) #endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */ #if defined(CONFIG_CMA) || defined(CONFIG_MEMORY_METADATA) -static void __init init_reserved_pageblock(struct page *page, - enum migratetype migratetype) +void __init init_reserved_pageblock(struct page *page, enum migratetype migratetype) { unsigned i = pageblock_nr_pages; struct page *p = page; -- 2.41.0