diff options
Diffstat (limited to 'kernel/perf_event.c')
| -rw-r--r-- | kernel/perf_event.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/perf_event.c b/kernel/perf_event.c index 02efde6c8798..615d024894cf 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c | |||
| @@ -2969,6 +2969,7 @@ static struct perf_callchain_entry *perf_callchain(struct pt_regs *regs) | |||
| 2969 | entry->nr = 0; | 2969 | entry->nr = 0; |
| 2970 | 2970 | ||
| 2971 | if (!user_mode(regs)) { | 2971 | if (!user_mode(regs)) { |
| 2972 | perf_callchain_store(entry, PERF_CONTEXT_KERNEL); | ||
| 2972 | perf_callchain_kernel(entry, regs); | 2973 | perf_callchain_kernel(entry, regs); |
| 2973 | if (current->mm) | 2974 | if (current->mm) |
| 2974 | regs = task_pt_regs(current); | 2975 | regs = task_pt_regs(current); |
| @@ -2976,8 +2977,10 @@ static struct perf_callchain_entry *perf_callchain(struct pt_regs *regs) | |||
| 2976 | regs = NULL; | 2977 | regs = NULL; |
| 2977 | } | 2978 | } |
| 2978 | 2979 | ||
| 2979 | if (regs) | 2980 | if (regs) { |
| 2981 | perf_callchain_store(entry, PERF_CONTEXT_USER); | ||
| 2980 | perf_callchain_user(entry, regs); | 2982 | perf_callchain_user(entry, regs); |
| 2983 | } | ||
| 2981 | 2984 | ||
| 2982 | return entry; | 2985 | return entry; |
| 2983 | } | 2986 | } |
