All of lore.kernel.org
 help / color / mirror / Atom feed
From: Will Deacon <will@kernel.org>
To: Ada Couprie Diaz <ada.coupriediaz@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Anshuman Khandual <anshuman.khandual@arm.com>,
	"Luis Claudio R . Goncalves" <lgoncalv@redhat.com>
Subject: Re: [PATCH v4 11/13] arm64: debug: split brk64 exception entry
Date: Fri, 27 Jun 2025 16:47:25 +0100	[thread overview]
Message-ID: <aF69DcN20brBmXEh@willie-the-truck> (raw)
In-Reply-To: <20250620211207.773980-12-ada.coupriediaz@arm.com>

On Fri, Jun 20, 2025 at 10:12:05PM +0100, Ada Couprie Diaz wrote:
> Currently all debug exceptions share common entry code and are routed
> to `do_debug_exception()`, which calls dynamically-registered
> handlers for each specific debug exception. This is unfortunate as
> different debug exceptions have different entry handling requirements,
> and it would be better to handle these distinct requirements earlier.
> 
> The BRK64 instruction can only be triggered by a BRK instruction. Thus,
> we know that the PC is a legitimate address and isn't being used to train
> a branch predictor with a bogus address : we don't need to call
> `arm64_apply_bp_hardening()`.
> 
> We do not need to handle the Cortex-A76 erratum #1463225 either, as it
> only relevant for single stepping at EL1.
> BRK64 does not write FAR_EL1 either, as only hardware watchpoints do so.
> 
> Split the BRK64 exception entry, adjust the function signature, and its
> behaviour to match the lack of needed mitigations.
> Further, as the EL0 and EL1 code paths are cleanly separated, we can split
> `do_brk64()` into `do_el0_brk64()` and `do_el1_brk64()`, and call them
> directly from the relevant entry paths.
> Use `die()` directly for the EL1 error path, as in `do_el1_bti()` and
> `do_el1_undef()`.
> We can also remove `NOKRPOBE_SYMBOL` for the EL0 path, as it cannot
> lead to a kprobe recursion.
> 
> When taking a BRK64 exception from EL0, the exception handling is safely
> preemptible : the only possible handler is `uprobe_brk_handler()`.
> It only operates on task-local data and properly checks its validity,
> then raises a Thread Information Flag, processed before returning
> to userspace in `do_notify_resume()`, which is already preemptible.
> Thus we can safely unmask interrupts and enable preemption before
> handling the break itself, fixing a PREEMPT_RT issue where the handler
> could call a sleeping function with preemption disabled.
> 
> Given that the break hook registration is handled statically in
> `call_break_hook` since
> (arm64: debug: call software break handlers statically)
> and that we now bypass the exception handler registration, this change
> renders `early_brk64` redundant : its functionality is now handled through
> the post-init path.
> 
> This also removes the last usage of `el1_dbg()`.
> 
> Signed-off-by: Ada Couprie Diaz <ada.coupriediaz@arm.com>
> Tested-by: Luis Claudio R. Goncalves <lgoncalv@redhat.com>
> ---
>  arch/arm64/include/asm/exception.h |  2 ++
>  arch/arm64/kernel/debug-monitors.c | 48 ++++++++++++++----------------
>  arch/arm64/kernel/entry-common.c   | 19 ++++++++----
>  3 files changed, 38 insertions(+), 31 deletions(-)

Reviewed-by: Will Deacon <will@kernel.org>

Will


  reply	other threads:[~2025-06-27 17:05 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-20 21:11 [PATCH v4 00/13] arm64: debug: remove hook registration, split exception entry Ada Couprie Diaz
2025-06-20 21:11 ` [PATCH v4 01/13] arm64: debug: clean up single_step_handler logic Ada Couprie Diaz
2025-06-27 15:44   ` Will Deacon
2025-06-20 21:11 ` [PATCH v4 02/13] arm64: refactor aarch32_break_handler() Ada Couprie Diaz
2025-06-27 15:45   ` Will Deacon
2025-06-20 21:11 ` [PATCH v4 03/13] arm64: debug: call software breakpoint handlers statically Ada Couprie Diaz
2025-06-27 15:45   ` Will Deacon
2025-06-20 21:11 ` [PATCH v4 04/13] arm64: debug: call step " Ada Couprie Diaz
2025-06-27 15:45   ` Will Deacon
2025-06-20 21:11 ` [PATCH v4 05/13] arm64: debug: remove break/step handler registration infrastructure Ada Couprie Diaz
2025-06-27 15:45   ` Will Deacon
2025-06-20 21:12 ` [PATCH v4 06/13] arm64: entry: Add entry and exit functions for debug exceptions Ada Couprie Diaz
2025-06-27 15:46   ` Will Deacon
2025-06-20 21:12 ` [PATCH v4 07/13] arm64: debug: split hardware breakpoint exception entry Ada Couprie Diaz
2025-06-27 15:46   ` Will Deacon
2025-06-20 21:12 ` [PATCH v4 08/13] arm64: debug: refactor reinstall_suspended_bps() Ada Couprie Diaz
2025-06-27 15:46   ` Will Deacon
2025-06-20 21:12 ` [PATCH v4 09/13] arm64: debug: split single stepping exception entry Ada Couprie Diaz
2025-06-27 15:46   ` Will Deacon
2025-06-20 21:12 ` [PATCH v4 10/13] arm64: debug: split hardware watchpoint " Ada Couprie Diaz
2025-06-27 15:46   ` Will Deacon
2025-06-20 21:12 ` [PATCH v4 11/13] arm64: debug: split brk64 " Ada Couprie Diaz
2025-06-27 15:47   ` Will Deacon [this message]
2025-06-20 21:12 ` [PATCH v4 12/13] arm64: debug: split bkpt32 " Ada Couprie Diaz
2025-06-27 15:47   ` Will Deacon
2025-06-20 21:12 ` [PATCH v4 13/13] arm64: debug: remove debug exception registration infrastructure Ada Couprie Diaz
2025-06-27 15:47   ` Will Deacon
2025-06-27 15:48 ` [PATCH v4 00/13] arm64: debug: remove hook registration, split exception entry Will Deacon
2025-06-27 17:27   ` Ada Couprie Diaz

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=aF69DcN20brBmXEh@willie-the-truck \
    --to=will@kernel.org \
    --cc=ada.coupriediaz@arm.com \
    --cc=anshuman.khandual@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=lgoncalv@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.