| 1 | |
| 2 | |
| 3 | * Performance event support for parisc
|
| 4 | *
|
| 5 | * Copyright (C) 2025 by Helge Deller <[email protected]>
|
| 6 |
|
| 7 |
|
| 8 | #include <linux/kernel.h>
|
| 9 | #include <linux/perf_event.h>
|
| 10 | #include <asm/unwind.h>
|
| 11 |
|
| 12 | void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
|
| 13 | struct pt_regs *regs)
|
| 14 | {
|
| 15 |
|
| 16 | struct unwind_frame_info info;
|
| 17 |
|
| 18 | unwind_frame_init_task(&info, current, NULL);
|
| 19 | while (1) {
|
| 20 | if (unwind_once(&info) < 0 || info.ip == 0)
|
| 21 | break;
|
| 22 |
|
| 23 | if (!__kernel_text_address(info.ip) ||
|
| 24 | perf_callchain_store(entry, info.ip))
|
| 25 | return;
|
| 26 | }
|
| 27 | }
|