[PATCH 1/1] ARM: hw_breakpoint: Do not directly check the event's overflow_handler hook

Leizhen (ThunderTown) thunder.leizhen at huawei.com
Sun Feb 7 08:05:36 EST 2021



On 2021/2/7 18:59, Zhen Lei wrote:
> The commit 1879445dfa7b ("perf/core: Set event's default
> ::overflow_handler()") set a default event->overflow_handler in
> perf_event_alloc(), and replace the check event->overflow_handler with
> is_default_overflow_handler(), but one is missing.
> 
> Currently, the bp->overflow_handler can not be NULL. As a result,
> enable_single_step() is always not invoked.

Our test case use "perf record -e mem:$TEST_LOC_ADDR:x -p $TEST_PID sleep 10" to track
the invocation of a test function, the entry address of the function is $TEST_LOC_ADDR.
This function was called only once. Therefore, the sampling result of perf should be one,
as follow:
[ perf record: Captured and wrote 0.001 MB perf.data (1 samples) ]

But it's actually infinite.
[ perf record: Captured and wrote 135.426 MB perf.data (2068004 samples) ]

If sleep 10 is not specified, OOM will be reported.

> 
> Fixes: 1879445dfa7b ("perf/core: Set event's default ::overflow_handler()")
> Signed-off-by: Zhen Lei <thunder.leizhen at huawei.com>
> Cc: Wang Nan <wangnan0 at huawei.com>
> ---
>  arch/arm/kernel/hw_breakpoint.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c
> index 08660ae9dcbce1c..b1423fb130ea4a0 100644
> --- a/arch/arm/kernel/hw_breakpoint.c
> +++ b/arch/arm/kernel/hw_breakpoint.c
> @@ -886,7 +886,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs)
>  			info->trigger = addr;
>  			pr_debug("breakpoint fired: address = 0x%x\n", addr);
>  			perf_bp_event(bp, regs);
> -			if (!bp->overflow_handler)
> +			if (is_default_overflow_handler(bp))
>  				enable_single_step(bp, addr);
>  			goto unlock;
>  		}
> 




More information about the linux-arm-kernel mailing list