aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/perf_event.c15
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);
5654err_group_fd: 5654err_group_fd:
5655 fput_light(group_file, fput_needed); 5655 fput_light(group_file, fput_needed);
5656err_alloc:
5657 free_event(event); 5656 free_event(event);
5658err_fd: 5657err_fd:
5659 put_unused_fd(event_fd); 5658 put_unused_fd(event_fd);