[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