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 5FA78C4167B for ; Tue, 28 Nov 2023 05:39:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EFA4F6B02EE; Tue, 28 Nov 2023 00:39:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E82386B02F0; Tue, 28 Nov 2023 00:39:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D232F6B02F9; Tue, 28 Nov 2023 00:39:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id C2E1A6B02EE for ; Tue, 28 Nov 2023 00:39:31 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 9CF9A1C00C2 for ; Tue, 28 Nov 2023 05:39:31 +0000 (UTC) X-FDA: 81506260542.20.1B26561 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by imf23.hostedemail.com (Postfix) with ESMTP id CC6E6140003 for ; Tue, 28 Nov 2023 05:39:29 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=vccYDWb+; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of pcc@google.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=pcc@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1701149969; 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=Hd11373At0fgNthDfz475jB2pnftz8WhsrA0gYblitY=; b=O9mR/JN3LXnmzPOapgnD0Z7OVBKGihCwDJxVWnT+Q4IabTu1HaGo2dwg7+l3OHnJcJW3t/ aLJ52kR6fQuvZWpP1p8XoEXvkcWwrYAit84fUQFwBUJ47Mc+4blygWNS7PIx/H9U7I0Kkf civ73AUzBZmZ8X0KPPQsQzQT0FXrp+0= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=vccYDWb+; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of pcc@google.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=pcc@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701149969; a=rsa-sha256; cv=none; b=ELY338hosI9xeJJ33QlqGbNmxsN5tVBAIU2cWcwvDVUFK7wvGqyAMf2qPs6MLNNIN8tkr4 aQdXFhshxULlQN5cNaNLX8Qpmj+K70RB0ne+gwgj3IRX2bpCiYjGwFT/S6qiuXks3R4m/l 5ZQjH5F3vM1sLgHEZOf8MPhIIbHQyRA= Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-1cfd9ce0745so48795ad.1 for ; Mon, 27 Nov 2023 21:39:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1701149968; x=1701754768; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Hd11373At0fgNthDfz475jB2pnftz8WhsrA0gYblitY=; b=vccYDWb+veMjuq0r0V5D66QhAP72B+Gzwz0yxzeKxuE1Mr9Om8y7Xo1fKRPmC5R5op 9gbU7nV4mO62oojGTzCf/3+F08hbSUU7gmHfJRR8TWzWNS7d0NJyDSP0+fBOV8xVUqb1 Yes+3Y4CnZtpfRn5IrIqsV8RNgPgHZP7wDWjapJsrgEzy41oGPmWKUIGT/9XfbbMiYGN wSYW2sOLu3oNww2zwLR7EFdNttinY+yEhb5CN1rM+ajbm92Hdzbxo1wvWbZOieM1gMOO vXdSOU1SEHD4GbvVYtUj6tWe7FFPNfPaPFpclgsMQaooYhJd/tiz1NET4PSuOIaJXnTz rmjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701149968; x=1701754768; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Hd11373At0fgNthDfz475jB2pnftz8WhsrA0gYblitY=; b=MZ3uMuIDmbX+TP06WLV67h2dwttTGIJZooBrxsgTUleoDFA6FDQYNmR190MyvhmQ8Q 1APD9iPPxDtzWtlGpRIm4mamMpyzFIKE+0ZU+zm4TdlXgnZ4ZKniXNPq4v0VKpmm+vVl 0IhGcpsT4MvlxjNDUEOmSJvHWkzh+10kvU/pJg7aj6w0PU5Kt5L5Nrwa8C/v6bb57Nu0 r6m6JhYOsHoINyCk6fAgJsZDZF2fuvwTYDe+EsDUvTnwSfLC6SQWNRLrF2Tu/C6HwMJW 72RRowBvamXGVSAUZa7et+jUDZospiIVXx4R+9vXpnTMy+k3ubUVTHhk8w4uFZBjys9s Iy3Q== X-Gm-Message-State: AOJu0YwCWckNAkfXE69XrNYAQU8MIhRtQqzORnV6CKGo/e3C3HDQ0LIa 58BBpeeMO8XZlomtVENAsDo5S13hrWSDXBrz04Cajw== X-Google-Smtp-Source: AGHT+IHMM+TBLPbm7+22ArJ0V2KCgdhbcD8w4150pEudfRnDapexGxJDfjwu4kPbNStb74F9bfmDWp9Y8DnvbExoUpc= X-Received: by 2002:a17:903:1206:b0:1cf:6f62:88d9 with SMTP id l6-20020a170903120600b001cf6f6288d9mr1243304plh.9.1701149968448; Mon, 27 Nov 2023 21:39:28 -0800 (PST) MIME-Version: 1.0 References: <20231119165721.9849-1-alexandru.elisei@arm.com> <20231119165721.9849-22-alexandru.elisei@arm.com> In-Reply-To: <20231119165721.9849-22-alexandru.elisei@arm.com> From: Peter Collingbourne Date: Mon, 27 Nov 2023 21:39:17 -0800 Message-ID: Subject: Re: [PATCH RFC v2 21/27] mm: arm64: Handle tag storage pages mapped before mprotect(PROT_MTE) To: Alexandru Elisei 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: CC6E6140003 X-Stat-Signature: qmj3ioak7upw5npunowrhryw3spd71ud X-HE-Tag: 1701149969-355871 X-HE-Meta: U2FsdGVkX1/wpM/qAKbxgYGm7HWgf3gTBGnifU1+lL5knb2zobJBU5+sNHqt900BDVoxD/htfH0IH/jFo/baSNb/bzp5rpqBhSqOfTW6jADks+0t4en2QxAG7U9h+1JdVCpkMsGdbzbBRNzCdcQOkaJqNYbXguMgKHswPyF6iRoo6StPy372k37HQiEtIaXMf1Ai8aA+WG4jjRkRG/Y4w1e0u7NeD0oqkwgJZJCIjUgjrj++us5MVZvmy7bfdth+/h56zBkhO+7tRVVmwyQdZDic/CG1lfrPOYhCo1LVD+dyXK28UFStqx6gZAgmbrB3zmmiwDPd8y3yN8TwExIDSUTJNv+g5sSVl7zUwJyjZxAFT6Cn3v+2hDwszMkOk2fg5/fa6IVkRfscJeK1IwAvBRYg43HOiR6PdgToafBd0t/5oX6U23mQ8mb2U1gvt8ibHOOJY9o3co1fzVKeJArTJVxWYgtbaP6ukjyZxBVBkwqRlI1vcktzXIqk1N5+pFSRR104fhSbzNUqZmVXsKuqvphlXXXg+txKk50BZsF92yjOuKDmJHcjUNPW/HpSys+9In9wDTgsTBARtLkI8xUe6j56qPH+aEbbFICFnrcgTOPCVdtYyQQpiLhGUEAoUeoYlz2v3Z11MhaD7A2TI5ksRPxyTGt+Ts29sAzGDuK9WACIiFbTmobeehkHpaEPbDXnuGfkW/ZnigzqeaHsVoX6mX78pcTOKCK8Gu58h4Zf4G92aEWPetpYeCk1wpJC/ZVzwzygIKtdbHa+2vL5GuLHE8/S9HUD5XXRgYIOPnn9f0gaIxDosAOTOH4lotVW2OkhaAH3Y2Ju4Pih9zo5WWNjWz7Wc5rcWZmxKVLtQ5vfaQGtS23vp8IM9p4XFDUnZRHGcSNMXlUviHaQXoVNAe2nJYYoergb5jyOIO9vtQry1KyKnfbqgwVccOBGOhj3YUae4IO+2qN8vxnq7ae7KOq cKgTDGUe vJligMUD9QAFlDT1lQDxl1QR5SHMk2ZFXJzeGMs5jr4C/dHuwCGOKvErTR88n1uDslKyhx83Ni66KXifE6xxvNhwL9L20KAQNe9BWsKUPbJFebsf+FptZYSvUZX/rzPJtvDSIS44hSkm8iUMCtng8Vb/nvMHtVd8OBotwNXi572hQNKZtyhMNeFmEu30QVbHRDo93Qu0FuWikpaPi91YSrXL+RXAnJ7RMkZ6H92O3k6EPk9eUN82O6SloNp1lKTKrhA7x1743oy24qYQApwUwCk+8HcQ4iwteoYCc0hbo9InPDZtfdsTjHfcGofwTM63TyeuCj6tVqD6TqNTbfUREyEym/Q== 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 Alexandru, On Sun, Nov 19, 2023 at 8:59=E2=80=AFAM Alexandru Elisei wrote: > > Signed-off-by: Alexandru Elisei > --- > arch/arm64/include/asm/mte_tag_storage.h | 1 + > arch/arm64/kernel/mte_tag_storage.c | 15 +++++++ > arch/arm64/mm/fault.c | 55 ++++++++++++++++++++++++ > include/linux/migrate.h | 8 +++- > include/linux/migrate_mode.h | 1 + > mm/internal.h | 6 --- > 6 files changed, 78 insertions(+), 8 deletions(-) > > diff --git a/arch/arm64/include/asm/mte_tag_storage.h b/arch/arm64/includ= e/asm/mte_tag_storage.h > index b97406d369ce..6a8b19a6a758 100644 > --- a/arch/arm64/include/asm/mte_tag_storage.h > +++ b/arch/arm64/include/asm/mte_tag_storage.h > @@ -33,6 +33,7 @@ int reserve_tag_storage(struct page *page, int order, g= fp_t gfp); > void free_tag_storage(struct page *page, int order); > > bool page_tag_storage_reserved(struct page *page); > +bool page_is_tag_storage(struct page *page); > > vm_fault_t handle_page_missing_tag_storage(struct vm_fault *vmf); > vm_fault_t handle_huge_page_missing_tag_storage(struct vm_fault *vmf); > diff --git a/arch/arm64/kernel/mte_tag_storage.c b/arch/arm64/kernel/mte_= tag_storage.c > index a1cc239f7211..5096ce859136 100644 > --- a/arch/arm64/kernel/mte_tag_storage.c > +++ b/arch/arm64/kernel/mte_tag_storage.c > @@ -500,6 +500,21 @@ bool page_tag_storage_reserved(struct page *page) > return test_bit(PG_tag_storage_reserved, &page->flags); > } > > +bool page_is_tag_storage(struct page *page) > +{ > + unsigned long pfn =3D page_to_pfn(page); > + struct range *tag_range; > + int i; > + > + for (i =3D 0; i < num_tag_regions; i++) { > + tag_range =3D &tag_regions[i].tag_range; > + if (tag_range->start <=3D pfn && pfn <=3D tag_range->end) > + return true; > + } > + > + return false; > +} > + > int reserve_tag_storage(struct page *page, int order, gfp_t gfp) > { > unsigned long start_block, end_block; > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c > index 6730a0812a24..964c5ae161a3 100644 > --- a/arch/arm64/mm/fault.c > +++ b/arch/arm64/mm/fault.c > @@ -12,6 +12,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -956,6 +957,50 @@ void tag_clear_highpage(struct page *page) > } > > #ifdef CONFIG_ARM64_MTE_TAG_STORAGE > + > +#define MR_TAGGED_TAG_STORAGE MR_ARCH_1 > + > +extern bool isolate_lru_page(struct page *page); > +extern void putback_movable_pages(struct list_head *l); Could we move these declarations to a non-mm-internal header and #include it instead of manually declaring them here? > + > +/* Returns with the page reference dropped. */ > +static void migrate_tag_storage_page(struct page *page) > +{ > + struct migration_target_control mtc =3D { > + .nid =3D NUMA_NO_NODE, > + .gfp_mask =3D GFP_HIGHUSER_MOVABLE | __GFP_TAGGED, > + }; > + unsigned long i, nr_pages =3D compound_nr(page); > + LIST_HEAD(pagelist); > + int ret, tries; > + > + lru_cache_disable(); > + > + for (i =3D 0; i < nr_pages; i++) { > + if (!isolate_lru_page(page + i)) { > + ret =3D -EAGAIN; > + goto out; > + } > + /* Isolate just grabbed another reference, drop ours. */ > + put_page(page + i); > + list_add_tail(&(page + i)->lru, &pagelist); > + } > + > + tries =3D 5; > + while (tries--) { > + ret =3D migrate_pages(&pagelist, alloc_migration_target, = NULL, (unsigned long)&mtc, > + MIGRATE_SYNC, MR_TAGGED_TAG_STORAGE, = NULL); > + if (ret =3D=3D 0 || ret !=3D -EBUSY) This could be simplified to: if (ret !=3D -EBUSY) Peter