File tree Expand file tree Collapse file tree 2 files changed +44
-0
lines changed Expand file tree Collapse file tree 2 files changed +44
-0
lines changed Original file line number Diff line number Diff line change 8
8
#ifndef _ASM_RISCV_PERF_EVENT_H
9
9
#define _ASM_RISCV_PERF_EVENT_H
10
10
11
+ #ifdef CONFIG_PERF_EVENTS
11
12
#include <linux/perf_event.h>
13
+ extern unsigned long perf_instruction_pointer (struct pt_regs * regs );
14
+ extern unsigned long perf_misc_flags (struct pt_regs * regs );
15
+ #define perf_misc_flags (regs ) perf_misc_flags(regs)
12
16
#define perf_arch_bpf_user_pt_regs (regs ) (struct user_regs_struct *)regs
13
17
14
18
#define perf_arch_fetch_caller_regs (regs , __ip ) { \
17
21
(regs)->sp = current_stack_pointer; \
18
22
(regs)->status = SR_PP; \
19
23
}
24
+ #endif
25
+
20
26
#endif /* _ASM_RISCV_PERF_EVENT_H */
Original file line number Diff line number Diff line change @@ -28,11 +28,49 @@ static bool fill_callchain(void *entry, unsigned long pc)
28
28
void perf_callchain_user (struct perf_callchain_entry_ctx * entry ,
29
29
struct pt_regs * regs )
30
30
{
31
+ if (perf_guest_state ()) {
32
+ /* TODO: We don't support guest os callchain now */
33
+ return ;
34
+ }
35
+
31
36
arch_stack_walk_user (fill_callchain , entry , regs );
32
37
}
33
38
34
39
void perf_callchain_kernel (struct perf_callchain_entry_ctx * entry ,
35
40
struct pt_regs * regs )
36
41
{
42
+ if (perf_guest_state ()) {
43
+ /* TODO: We don't support guest os callchain now */
44
+ return ;
45
+ }
46
+
37
47
walk_stackframe (NULL , regs , fill_callchain , entry );
38
48
}
49
+
50
+ unsigned long perf_instruction_pointer (struct pt_regs * regs )
51
+ {
52
+ if (perf_guest_state ())
53
+ return perf_guest_get_ip ();
54
+
55
+ return instruction_pointer (regs );
56
+ }
57
+
58
+ unsigned long perf_misc_flags (struct pt_regs * regs )
59
+ {
60
+ unsigned int guest_state = perf_guest_state ();
61
+ unsigned long misc = 0 ;
62
+
63
+ if (guest_state ) {
64
+ if (guest_state & PERF_GUEST_USER )
65
+ misc |= PERF_RECORD_MISC_GUEST_USER ;
66
+ else
67
+ misc |= PERF_RECORD_MISC_GUEST_KERNEL ;
68
+ } else {
69
+ if (user_mode (regs ))
70
+ misc |= PERF_RECORD_MISC_USER ;
71
+ else
72
+ misc |= PERF_RECORD_MISC_KERNEL ;
73
+ }
74
+
75
+ return misc ;
76
+ }
You can’t perform that action at this time.
0 commit comments