[PATCH v3 04/13] arm64: debug: call step handlers statically
Ada Couprie Diaz
ada.coupriediaz at arm.com
Mon Jun 16 06:39:43 PDT 2025
On 13/06/2025 08:47, Anshuman Khandual wrote:
> On 09/06/25 11:04 PM, Ada Couprie Diaz wrote:
>> [...]
>>
>> diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c
>> index b5a3b9c85a65..8f6ce2ea005c 100644
>> --- a/arch/arm64/kernel/kgdb.c
>> +++ b/arch/arm64/kernel/kgdb.c
>> @@ -250,7 +250,7 @@ int kgdb_compiled_brk_handler(struct pt_regs *regs, unsigned long esr)
>> }
>> NOKPROBE_SYMBOL(kgdb_compiled_brk_handler);
>>
>> -static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned long esr)
>> +int kgdb_singlestep_handler(struct pt_regs *regs, unsigned long esr)
> This rename makes sense but as mentioned later kgdb_single_step_handler()
> might save some changes in uprobes callback function.
That's fair. I think I would prefer the `_single_step_` version now as
well, so I'll go for it.
As per the other patch, would it make sense to split the rename here as
well ? Would it be OK if it were in the same commit as the breakpoint
exception handlers ?
>> {
>> if (!kgdb_single_step)
>> return DBG_HOOK_ERROR;
>> @@ -258,11 +258,7 @@ static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned long esr)
>> kgdb_handle_exception(0, SIGTRAP, 0, regs);
>> return DBG_HOOK_HANDLED;
>> }
>> -NOKPROBE_SYMBOL(kgdb_step_brk_fn);
>> -
>> -static struct step_hook kgdb_step_hook = {
>> - .fn = kgdb_step_brk_fn
>> -};
>> +NOKPROBE_SYMBOL(kgdb_singlestep_handler);
>>
>> static int __kgdb_notify(struct die_args *args, unsigned long cmd)
>> {
>> @@ -301,13 +297,7 @@ static struct notifier_block kgdb_notifier = {
>> */
>> int kgdb_arch_init(void)
>> {
>> - int ret = register_die_notifier(&kgdb_notifier);
>> -
>> - if (ret != 0)
>> - return ret;
>> -
>> - register_kernel_step_hook(&kgdb_step_hook);
>> - return 0;
>> + return register_die_notifier(&kgdb_notifier);
>> }
>>
>> /*
>> @@ -317,7 +307,6 @@ int kgdb_arch_init(void)
>> */
>> void kgdb_arch_exit(void)
>> {
>> - unregister_kernel_step_hook(&kgdb_step_hook);
>> unregister_die_notifier(&kgdb_notifier);
>> }
> kgdb_arch_init()/_exit() now deals only with kgdb_notifier registration
> and un-registration only.
That is correct, however is there something you want me to do/change
regarding this ? It feels like those would still be the best places for
the `kgdb_notifier` (un)registration.
>> diff --git a/arch/arm64/kernel/probes/uprobes.c b/arch/arm64/kernel/probes/uprobes.c
>> index ad68b4a5974d..fefc990860bc 100644
>> --- a/arch/arm64/kernel/probes/uprobes.c
>> +++ b/arch/arm64/kernel/probes/uprobes.c
>> @@ -182,7 +182,7 @@ int uprobe_brk_handler(struct pt_regs *regs,
>> return DBG_HOOK_ERROR;
>> }
>>
>> -static int uprobe_single_step_handler(struct pt_regs *regs,
>> +int uprobe_singlestep_handler(struct pt_regs *regs,
>> unsigned long esr)
> A small nit - if the kgdb handler be changed as kgdb_single_step_handler()
> the above rename can be skipped.
ACK above.
>> {
>>
>> struct uprobe_task *utask = current->utask;
>> @@ -194,15 +194,8 @@ static int uprobe_single_step_handler(struct pt_regs *regs,
>> return DBG_HOOK_ERROR;
>> }
>>
>> -/* uprobe single step handler hook */
>> -static struct step_hook uprobes_step_hook = {
>> - .fn = uprobe_single_step_handler,
>> -};
>> -
>> static int __init arch_init_uprobes(void)
>> {
>> - register_user_step_hook(&uprobes_step_hook);
>> -
>> return 0;
>> }
>>
> The arch hook arch_init_uprobes() is redundant now and can be dropped.
>
> static int __init arch_init_uprobes(void)
> {
> return 0;
> }
> device_initcall(arch_init_uprobes);
>
> git grep arch_init_uprobes
> arch/arm64/kernel/probes/uprobes.c:static int __init arch_init_uprobes(void)
> arch/arm64/kernel/probes/uprobes.c:device_initcall(arch_init_uprobes);
Absolutely right, I did miss that. I will clean up in v4.
> Otherwise LGTM.
Thanks for the comments,
Ada
More information about the linux-arm-kernel
mailing list