From: Tong Tiangen <tongtiangen@huawei.com>
To: Catalin Marinas <catalin.marinas@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,
Will Deacon <will@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
James Morse <james.morse@arm.com>,
Robin Murphy <robin.murphy@arm.com>,
Andrey Konovalov <andreyknvl@gmail.com>,
Dmitry Vyukov <dvyukov@google.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nicholas Piggin <npiggin@gmail.com>,
Andrey Ryabinin <ryabinin.a.a@gmail.com>,
Alexander Potapenko <glider@google.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Aneesh Kumar K.V <aneesh.kumar@kernel.org>,
"Naveen N. Rao" <naveen.n.rao@linux.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>, <x86@kernel.org>,
"H. Peter Anvin" <hpa@zytor.com>,
Madhavan Srinivasan <maddy@linux.ibm.com>,
<linux-arm-kernel@lists.infradead.org>, <linux-mm@kvack.org>,
<linuxppc-dev@lists.ozlabs.org>, <linux-kernel@vger.kernel.org>,
<kasan-dev@googlegroups.com>, <wangkefeng.wang@huawei.com>,
Guohanjun <guohanjun@huawei.com>
Subject: Re: [PATCH v13 4/5] arm64: support copy_mc_[user]_highpage()
Date: Fri, 14 Feb 2025 09:45:55 +0800 [thread overview]
Message-ID: <6aecab97-5ba8-38dd-1df7-87e5f557017e@huawei.com> (raw)
In-Reply-To: <Z6zWSXzKctkpyH7-@arm.com>
在 2025/2/13 1:11, Catalin Marinas 写道:
> On Mon, Dec 09, 2024 at 10:42:56AM +0800, Tong Tiangen wrote:
>> Currently, many scenarios that can tolerate memory errors when copying page
>> have been supported in the kernel[1~5], all of which are implemented by
>> copy_mc_[user]_highpage(). arm64 should also support this mechanism.
>>
>> Due to mte, arm64 needs to have its own copy_mc_[user]_highpage()
>> architecture implementation, macros __HAVE_ARCH_COPY_MC_HIGHPAGE and
>> __HAVE_ARCH_COPY_MC_USER_HIGHPAGE have been added to control it.
>>
>> Add new helper copy_mc_page() which provide a page copy implementation with
>> hardware memory error safe. The code logic of copy_mc_page() is the same as
>> copy_page(), the main difference is that the ldp insn of copy_mc_page()
>> contains the fixup type EX_TYPE_KACCESS_ERR_ZERO_MEM_ERR, therefore, the
>> main logic is extracted to copy_page_template.S. In addition, the fixup of
>> MOPS insn is not considered at present.
>
> Could we not add the exception table entry permanently but ignore the
> exception table entry if it's not on the do_sea() path? That would save
> some code duplication.
The location of the added exception table entry is likely to appear on
the a path, which should not be avoided. What we can do is merge
duplicate code as much as possible, and extract common code into common
files, as we did in this patch.
>
>> diff --git a/arch/arm64/lib/copy_mc_page.S b/arch/arm64/lib/copy_mc_page.S
>> new file mode 100644
>> index 000000000000..51564828c30c
>> --- /dev/null
>> +++ b/arch/arm64/lib/copy_mc_page.S
>> @@ -0,0 +1,37 @@
>> +/* SPDX-License-Identifier: GPL-2.0-only */
>> +
>> +#include <linux/linkage.h>
>> +#include <linux/const.h>
>> +#include <asm/assembler.h>
>> +#include <asm/page.h>
>> +#include <asm/cpufeature.h>
>> +#include <asm/alternative.h>
>> +#include <asm/asm-extable.h>
>> +#include <asm/asm-uaccess.h>
>> +
>> +/*
>> + * Copy a page from src to dest (both are page aligned) with memory error safe
>> + *
>> + * Parameters:
>> + * x0 - dest
>> + * x1 - src
>> + * Returns:
>> + * x0 - Return 0 if copy success, or -EFAULT if anything goes wrong
>> + * while copying.
>> + */
>> + .macro ldp1 reg1, reg2, ptr, val
>> + KERNEL_MEM_ERR(9998f, ldp \reg1, \reg2, [\ptr, \val])
>> + .endm
>> +
>> +SYM_FUNC_START(__pi_copy_mc_page)
>> +#include "copy_page_template.S"
>> +
>> + mov x0, #0
>> + ret
>> +
>> +9998: mov x0, #-EFAULT
>> + ret
>> +
>> +SYM_FUNC_END(__pi_copy_mc_page)
>> +SYM_FUNC_ALIAS(copy_mc_page, __pi_copy_mc_page)
>> +EXPORT_SYMBOL(copy_mc_page)
> [...]
>> diff --git a/arch/arm64/lib/copy_page_template.S b/arch/arm64/lib/copy_page_template.S
>> new file mode 100644
>> index 000000000000..f96c7988c93d
>> --- /dev/null
>> +++ b/arch/arm64/lib/copy_page_template.S
>> @@ -0,0 +1,70 @@
>> +/* SPDX-License-Identifier: GPL-2.0-only */
>> +/*
>> + * Copyright (C) 2012 ARM Ltd.
>> + */
>> +
>> +/*
>> + * Copy a page from src to dest (both are page aligned)
>> + *
>> + * Parameters:
>> + * x0 - dest
>> + * x1 - src
>> + */
>> +
>> +#ifdef CONFIG_AS_HAS_MOPS
>> + .arch_extension mops
>> +alternative_if_not ARM64_HAS_MOPS
>> + b .Lno_mops
>> +alternative_else_nop_endif
>> +
>> + mov x2, #PAGE_SIZE
>> + cpypwn [x0]!, [x1]!, x2!
>> + cpymwn [x0]!, [x1]!, x2!
>> + cpyewn [x0]!, [x1]!, x2!
>> + ret
>> +.Lno_mops:
>> +#endif
> [...]
>
> So if we have FEAT_MOPS, the machine check won't work?
>
> Kristina is going to post MOPS support for the uaccess routines soon.
> You can see how they are wired up and do something similar here.
>
> But I'd prefer if we had the same code, only the exception table entry
> treated differently. Similarly for the MTE tag copying.
Does MOPS also support features similar to memory error safe? I'll see
how he handles it.
>
next prev parent reply other threads:[~2025-02-14 1:46 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-09 2:42 [PATCH v13 0/5]arm64: add ARCH_HAS_COPY_MC support Tong Tiangen
2024-12-09 2:42 ` [PATCH v13 1/5] uaccess: add generic fallback version of copy_mc_to_user() Tong Tiangen
2024-12-09 2:42 ` [PATCH v13 2/5] arm64: add support for ARCH_HAS_COPY_MC Tong Tiangen
2025-02-12 16:21 ` Catalin Marinas
2025-02-14 1:44 ` Tong Tiangen
2025-03-24 16:54 ` Luck, Tony
2025-04-03 2:48 ` Tong Tiangen
2025-03-28 17:06 ` Yeoreum Yun
2025-04-03 2:36 ` Tong Tiangen
2024-12-09 2:42 ` [PATCH v13 3/5] mm/hwpoison: return -EFAULT when copy fail in copy_mc_[user]_highpage() Tong Tiangen
2024-12-09 2:42 ` [PATCH v13 4/5] arm64: support copy_mc_[user]_highpage() Tong Tiangen
2025-02-12 17:11 ` Catalin Marinas
2025-02-14 1:45 ` Tong Tiangen [this message]
2025-02-14 2:49 ` Tong Tiangen
2025-02-14 17:24 ` Catalin Marinas
2025-02-17 8:07 ` Tong Tiangen
2025-02-17 14:55 ` Catalin Marinas
2025-02-18 11:51 ` Tong Tiangen
2025-02-18 19:42 ` Catalin Marinas
2025-03-04 14:10 ` Tong Tiangen
2024-12-09 2:42 ` [PATCH v13 5/5] arm64: introduce copy_mc_to_kernel() implementation Tong Tiangen
2025-02-12 17:18 ` Catalin Marinas
2025-02-14 2:57 ` Tong Tiangen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6aecab97-5ba8-38dd-1df7-87e5f557017e@huawei.com \
--to=tongtiangen@huawei.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@gmail.com \
--cc=aneesh.kumar@kernel.org \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=christophe.leroy@csgroup.eu \
--cc=dave.hansen@linux.intel.com \
--cc=dvyukov@google.com \
--cc=glider@google.com \
--cc=guohanjun@huawei.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=kasan-dev@googlegroups.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mark.rutland@arm.com \
--cc=mchehab+huawei@kernel.org \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=naveen.n.rao@linux.ibm.com \
--cc=npiggin@gmail.com \
--cc=robin.murphy@arm.com \
--cc=ryabinin.a.a@gmail.com \
--cc=tglx@linutronix.de \
--cc=vincenzo.frascino@arm.com \
--cc=wangkefeng.wang@huawei.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox