diff options
Diffstat (limited to 'kernel/perf_event.c')
-rw-r--r-- | kernel/perf_event.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/kernel/perf_event.c b/kernel/perf_event.c index 8e55b440e28a..cda17acfcaf8 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c | |||
@@ -3886,15 +3886,10 @@ static void perf_swevent_ctx_event(struct perf_event_context *ctx, | |||
3886 | { | 3886 | { |
3887 | struct perf_event *event; | 3887 | struct perf_event *event; |
3888 | 3888 | ||
3889 | if (system_state != SYSTEM_RUNNING || list_empty(&ctx->event_list)) | ||
3890 | return; | ||
3891 | |||
3892 | rcu_read_lock(); | ||
3893 | list_for_each_entry_rcu(event, &ctx->event_list, event_entry) { | 3889 | list_for_each_entry_rcu(event, &ctx->event_list, event_entry) { |
3894 | if (perf_swevent_match(event, type, event_id, data, regs)) | 3890 | if (perf_swevent_match(event, type, event_id, data, regs)) |
3895 | perf_swevent_add(event, nr, nmi, data, regs); | 3891 | perf_swevent_add(event, nr, nmi, data, regs); |
3896 | } | 3892 | } |
3897 | rcu_read_unlock(); | ||
3898 | } | 3893 | } |
3899 | 3894 | ||
3900 | static int *perf_swevent_recursion_context(struct perf_cpu_context *cpuctx) | 3895 | static int *perf_swevent_recursion_context(struct perf_cpu_context *cpuctx) |
@@ -3926,9 +3921,9 @@ static void do_perf_sw_event(enum perf_type_id type, u32 event_id, | |||
3926 | (*recursion)++; | 3921 | (*recursion)++; |
3927 | barrier(); | 3922 | barrier(); |
3928 | 3923 | ||
3924 | rcu_read_lock(); | ||
3929 | perf_swevent_ctx_event(&cpuctx->ctx, type, event_id, | 3925 | perf_swevent_ctx_event(&cpuctx->ctx, type, event_id, |
3930 | nr, nmi, data, regs); | 3926 | nr, nmi, data, regs); |
3931 | rcu_read_lock(); | ||
3932 | /* | 3927 | /* |
3933 | * doesn't really matter which of the child contexts the | 3928 | * doesn't really matter which of the child contexts the |
3934 | * events ends up in. | 3929 | * events ends up in. |