diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/perf_event.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/kernel/perf_event.c b/kernel/perf_event.c index 86f394e15d53..ce95617f5d2c 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c | |||
@@ -5550,17 +5550,11 @@ SYSCALL_DEFINE5(perf_event_open, | |||
5550 | if (event_fd < 0) | 5550 | if (event_fd < 0) |
5551 | return event_fd; | 5551 | return event_fd; |
5552 | 5552 | ||
5553 | event = perf_event_alloc(&attr, cpu, group_leader, NULL, NULL); | ||
5554 | if (IS_ERR(event)) { | ||
5555 | err = PTR_ERR(event); | ||
5556 | goto err_fd; | ||
5557 | } | ||
5558 | |||
5559 | if (group_fd != -1) { | 5553 | if (group_fd != -1) { |
5560 | group_leader = perf_fget_light(group_fd, &fput_needed); | 5554 | group_leader = perf_fget_light(group_fd, &fput_needed); |
5561 | if (IS_ERR(group_leader)) { | 5555 | if (IS_ERR(group_leader)) { |
5562 | err = PTR_ERR(group_leader); | 5556 | err = PTR_ERR(group_leader); |
5563 | goto err_alloc; | 5557 | goto err_fd; |
5564 | } | 5558 | } |
5565 | group_file = group_leader->filp; | 5559 | group_file = group_leader->filp; |
5566 | if (flags & PERF_FLAG_FD_OUTPUT) | 5560 | if (flags & PERF_FLAG_FD_OUTPUT) |
@@ -5569,6 +5563,12 @@ SYSCALL_DEFINE5(perf_event_open, | |||
5569 | group_leader = NULL; | 5563 | group_leader = NULL; |
5570 | } | 5564 | } |
5571 | 5565 | ||
5566 | event = perf_event_alloc(&attr, cpu, group_leader, NULL, NULL); | ||
5567 | if (IS_ERR(event)) { | ||
5568 | err = PTR_ERR(event); | ||
5569 | goto err_fd; | ||
5570 | } | ||
5571 | |||
5572 | /* | 5572 | /* |
5573 | * Special case software events and allow them to be part of | 5573 | * Special case software events and allow them to be part of |
5574 | * any hardware group. | 5574 | * any hardware group. |
@@ -5653,7 +5653,6 @@ err_context: | |||
5653 | put_ctx(ctx); | 5653 | put_ctx(ctx); |
5654 | err_group_fd: | 5654 | err_group_fd: |
5655 | fput_light(group_file, fput_needed); | 5655 | fput_light(group_file, fput_needed); |
5656 | err_alloc: | ||
5657 | free_event(event); | 5656 | free_event(event); |
5658 | err_fd: | 5657 | err_fd: |
5659 | put_unused_fd(event_fd); | 5658 | put_unused_fd(event_fd); |