All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ada Couprie Diaz <ada.coupriediaz@arm.com>
To: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
	"Luis Claudio R. Goncalves" <lgoncalv@redhat.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 02/11] arm64: debug: call software break handlers statically
Date: Mon, 2 Jun 2025 17:39:33 +0100	[thread overview]
Message-ID: <d6a141d8-8889-438f-a8a4-81d9ddf43b6b@arm.com> (raw)
In-Reply-To: <20250520153545.GB18901@willie-the-truck>

On 20/05/2025 16:35, Will Deacon wrote:

> On Mon, May 12, 2025 at 06:43:17PM +0100, Ada Couprie Diaz wrote:
>> diff --git a/arch/arm64/include/asm/kprobes.h b/arch/arm64/include/asm/kprobes.h
>> index be7a3680dadf..b27dd6028e6a 100644
>> --- a/arch/arm64/include/asm/kprobes.h
>> +++ b/arch/arm64/include/asm/kprobes.h
>> @@ -38,6 +38,12 @@ struct kprobe_ctlblk {
>>   void arch_remove_kprobe(struct kprobe *);
>>   int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr);
>>   void __kretprobe_trampoline(void);
>> +int __kprobes kprobe_brk_handler(struct pt_regs *regs,
>> +				 unsigned long esr);
>> +int __kprobes kprobe_ss_brk_handler(struct pt_regs *regs,
>> +				 unsigned long esr);
>> +int __kprobes kretprobe_brk_handler(struct pt_regs *regs,
>> +				 unsigned long esr);
>>   void __kprobes *trampoline_probe_handler(struct pt_regs *regs);
>>   
>>   #endif /* CONFIG_KPROBES */
> If you add these _after_ the #endif...
>
>> diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c
>> index 676fa0231935..4ece4a93b872 100644
>> --- a/arch/arm64/kernel/debug-monitors.c
>> +++ b/arch/arm64/kernel/debug-monitors.c
>> @@ -21,8 +21,11 @@
>>   #include <asm/cputype.h>
>>   #include <asm/daifflags.h>
>>   #include <asm/debug-monitors.h>
>> +#include <asm/kgdb.h>
>> +#include <asm/kprobes.h>
>>   #include <asm/system_misc.h>
>>   #include <asm/traps.h>
>> +#include <asm/uprobes.h>
>>   
>>   /* Determine debug architecture. */
>>   u8 debug_monitors_arch(void)
>> @@ -299,20 +302,50 @@ void unregister_kernel_break_hook(struct break_hook *hook)
>>   
>>   static int call_break_hook(struct pt_regs *regs, unsigned long esr)
>>   {
>> -	struct break_hook *hook;
>> -	struct list_head *list;
>> -
>> -	list = user_mode(regs) ? &user_break_hook : &kernel_break_hook;
>> -
>> -	/*
>> -	 * Since brk exception disables interrupt, this function is
>> -	 * entirely not preemptible, and we can use rcu list safely here.
>> -	 */
>> -	list_for_each_entry_rcu(hook, list, node) {
>> -		if ((esr_brk_comment(esr) & ~hook->mask) == hook->imm)
>> -			return hook->fn(regs, esr);
>> +	if (user_mode(regs)) {
>> +#ifdef CONFIG_UPROBES
>> +		if (esr_brk_comment(esr) == UPROBES_BRK_IMM)
>> +			return uprobe_brk_handler(regs, esr);
>> +#endif
>> +		return DBG_HOOK_ERROR;
>>   	}
>>   
>> +	if (esr_brk_comment(esr) == BUG_BRK_IMM)
>> +		return bug_brk_handler(regs, esr);
>> +
>> +#ifdef CONFIG_CFI_CLANG
>> +	if (esr_is_cfi_brk(esr))
>> +		return cfi_brk_handler(regs, esr);
>> +#endif
>> +
>> +	if (esr_brk_comment(esr) == FAULT_BRK_IMM)
>> +		return reserved_fault_brk_handler(regs, esr);
>> +
>> +#ifdef CONFIG_KASAN_SW_TAGS
>> +	if ((esr_brk_comment(esr) & ~KASAN_BRK_MASK) == KASAN_BRK_IMM)
>> +		return kasan_brk_handler(regs, esr);
>> +#endif
>> +#ifdef CONFIG_UBSAN_TRAP
>> +	if ((esr_brk_comment(esr) & ~UBSAN_BRK_MASK) == UBSAN_BRK_IMM)
>> +		return ubsan_brk_handler(regs, esr);
>> +#endif
>> +#ifdef CONFIG_KGDB
>> +	if (esr_brk_comment(esr) == KGDB_DYN_DBG_BRK_IMM)
>> +		return kgdb_brk_handler(regs, esr);
>> +	if (esr_brk_comment(esr) == KGDB_COMPILED_DBG_BRK_IMM)
>> +		return kgdb_compiled_brk_handler(regs, esr);
>> +#endif
>> +#ifdef CONFIG_KPROBES
>> +	if (esr_brk_comment(esr) == KPROBES_BRK_IMM)
>> +		return kprobe_brk_handler(regs, esr);
>> +	if (esr_brk_comment(esr) == KPROBES_BRK_SS_IMM)
>> +		return kprobe_ss_brk_handler(regs, esr);
>> +#endif
>> +#ifdef CONFIG_KRETPROBES
>> +	if (esr_brk_comment(esr) == KRETPROBES_BRK_IMM)
>> +		return kretprobe_brk_handler(regs, esr);
>> +#endif
> ... then I think you can use IS_ENABLED() here instead of the #ifdefs.
> I didn't check everything, but the diff I was hacking on is below.
>
> Will
Oh, I didn't know about `IS_ENABLED()` !
I took the time to check that all the other functions are 
unconditionally declared
and test a few configs : it seems to be all good and it is much more 
readable than with the #ifdefs.

Thanks for the suggestion !
Ada



  reply	other threads:[~2025-06-02 16:42 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-12 17:43 [PATCH v2 00/11] arm64: debug: remove hook registration, split exception entry Ada Couprie Diaz
2025-05-12 17:43 ` [PATCH v2 01/11] arm64: debug: clean up single_step_handler logic Ada Couprie Diaz
2025-05-20 15:35   ` Will Deacon
2025-05-12 17:43 ` [PATCH v2 02/11] arm64: debug: call software break handlers statically Ada Couprie Diaz
2025-05-20 15:35   ` Will Deacon
2025-06-02 16:39     ` Ada Couprie Diaz [this message]
2025-05-12 17:43 ` [PATCH v2 03/11] arm64: debug: call step " Ada Couprie Diaz
2025-05-20 15:35   ` Will Deacon
2025-05-28 16:02     ` Ada Couprie Diaz
2025-05-12 17:43 ` [PATCH v2 04/11] arm64: debug: remove break/step handler registration infrastructure Ada Couprie Diaz
2025-05-20 15:36   ` Will Deacon
2025-05-12 17:43 ` [PATCH v2 05/11] arm64: entry: Add entry and exit functions for debug exceptions Ada Couprie Diaz
2025-05-20 15:36   ` Will Deacon
2025-05-28 14:08     ` Ada Couprie Diaz
2025-05-29 10:11       ` Will Deacon
2025-05-12 17:43 ` [PATCH v2 06/11] arm64: debug: split hardware breakpoint exeception entry Ada Couprie Diaz
2025-05-20 15:36   ` Will Deacon
2025-05-28 15:17     ` Mark Rutland
2025-05-28 16:10       ` Ada Couprie Diaz
2025-05-12 17:43 ` [PATCH v2 07/11] arm64: debug: split single stepping exception entry Ada Couprie Diaz
2025-05-20 16:29   ` Will Deacon
2025-05-28 15:22     ` Mark Rutland
2025-05-29 10:10       ` Will Deacon
2025-05-29 10:48         ` Ada Couprie Diaz
2025-05-12 17:43 ` [PATCH v2 08/11] arm64: debug: split hardware watchpoint " Ada Couprie Diaz
2025-05-20 16:59   ` Will Deacon
2025-05-28 13:47     ` Ada Couprie Diaz
2025-05-28 15:42       ` Mark Rutland
2025-05-29 10:13         ` Will Deacon
2025-05-12 17:43 ` [PATCH v2 09/11] arm64: debug: split brk64 " Ada Couprie Diaz
2025-05-12 17:43 ` [PATCH v2 10/11] arm64: debug: split bkpt32 " Ada Couprie Diaz
2025-05-21  9:07   ` Will Deacon
2025-05-29 10:43     ` Ada Couprie Diaz
2025-05-12 17:43 ` [PATCH v2 11/11] arm64: debug: remove debug exception registration infrastructure Ada Couprie Diaz
2025-05-21  9:38   ` Will Deacon
2025-05-28 16:41     ` Ada Couprie Diaz
2025-05-29 10:15       ` Will Deacon
2025-05-13 12:25 ` [PATCH v2 00/11] arm64: debug: remove hook registration, split exception entry Luis Claudio R. Goncalves
2025-05-13 15:19   ` Ada Couprie Diaz
2025-05-16 11:57     ` Luis Claudio R. Goncalves
2025-05-28 10:38       ` Ada Couprie Diaz
2025-06-03 16:10         ` 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=d6a141d8-8889-438f-a8a4-81d9ddf43b6b@arm.com \
    --to=ada.coupriediaz@arm.com \
    --cc=bigeasy@linutronix.de \
    --cc=catalin.marinas@arm.com \
    --cc=lgoncalv@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    --cc=will@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 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.