Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 147141
b: refs/heads/master
c: ccff286
h: refs/heads/master
i:
  147139: f3eec38
v: v3
  • Loading branch information
Ingo Molnar committed Dec 11, 2008
1 parent 847517c commit 7efc938
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 04289bb9891882202d7e961c4c04d2376930e9f9
refs/heads/master: ccff286d85098ba5438e22aa2ea807fc1e18cf2f
39 changes: 20 additions & 19 deletions trunk/kernel/perf_counter.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,6 @@ list_del_counter(struct perf_counter *counter, struct perf_counter_context *ctx)

list_del_init(&counter->list_entry);

if (list_empty(&counter->sibling_list))
return;

/*
* If this was a group counter with sibling counters then
* upgrade the siblings to singleton counters by adding them
Expand Down Expand Up @@ -395,9 +392,6 @@ counter_sched_in(struct perf_counter *counter,
struct perf_counter_context *ctx,
int cpu)
{
if (!counter->active)
return;

hw_perf_counter_enable(counter);
counter->active = 1;
counter->oncpu = cpu; /* TODO: put 'cpu' into cpuctx->cpu */
Expand Down Expand Up @@ -876,32 +870,39 @@ asmlinkage int sys_perf_counter_open(
return -EFAULT;

/*
* Look up the group leader:
* Get the target context (task or percpu):
*/
ctx = find_get_context(pid, cpu);
if (IS_ERR(ctx))
return PTR_ERR(ctx);

/*
* Look up the group leader (we will attach this counter to it):
*/
group_leader = NULL;
if (group_fd != -1) {
ret = -EINVAL;
group_file = fget_light(group_fd, &fput_needed);
if (!group_file)
goto out_fput;
goto err_put_context;
if (group_file->f_op != &perf_fops)
goto out_fput;
goto err_put_context;

group_leader = group_file->private_data;
/*
* Do not allow a recursive hierarchy:
* Do not allow a recursive hierarchy (this new sibling
* becoming part of another group-sibling):
*/
if (group_leader->group_leader != group_leader)
goto err_put_context;
/*
* Do not allow to attach to a group in a different
* task or CPU context:
*/
if (group_leader->group_leader)
goto out_fput;
if (group_leader->ctx != ctx)
goto err_put_context;
}

/*
* Get the target context (task or percpu):
*/
ctx = find_get_context(pid, cpu);
if (IS_ERR(ctx))
return PTR_ERR(ctx);

ret = -ENOMEM;
counter = perf_counter_alloc(&hw_event, cpu, group_leader);
if (!counter)
Expand Down

0 comments on commit 7efc938

Please sign in to comment.