diff options
| author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2011-04-09 15:17:41 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2011-05-28 12:01:10 -0400 |
| commit | 9137fb28ac74d05eb66d1d8e6778eaa14e6fed43 (patch) | |
| tree | d27d1bd1c2fd89b50feafdb04ac868225b69a812 /kernel/events | |
| parent | 075e0b00857e166dcc3e39037a1fc5a90acac709 (diff) | |
perf: Clean up 'ctx' reference counting
Small cleanup to how we refcount in find_get_context(), this also
allows us to use put_ctx() to free things instead of using kfree().
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20110409192141.719340481@chello.nl
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/events')
| -rw-r--r-- | kernel/events/core.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index 4d9a1f014286..d665ac4242f2 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
| @@ -2835,16 +2835,12 @@ retry: | |||
| 2835 | unclone_ctx(ctx); | 2835 | unclone_ctx(ctx); |
| 2836 | ++ctx->pin_count; | 2836 | ++ctx->pin_count; |
| 2837 | raw_spin_unlock_irqrestore(&ctx->lock, flags); | 2837 | raw_spin_unlock_irqrestore(&ctx->lock, flags); |
| 2838 | } | 2838 | } else { |
| 2839 | |||
| 2840 | if (!ctx) { | ||
| 2841 | ctx = alloc_perf_context(pmu, task); | 2839 | ctx = alloc_perf_context(pmu, task); |
| 2842 | err = -ENOMEM; | 2840 | err = -ENOMEM; |
| 2843 | if (!ctx) | 2841 | if (!ctx) |
| 2844 | goto errout; | 2842 | goto errout; |
| 2845 | 2843 | ||
| 2846 | get_ctx(ctx); | ||
| 2847 | |||
| 2848 | err = 0; | 2844 | err = 0; |
| 2849 | mutex_lock(&task->perf_event_mutex); | 2845 | mutex_lock(&task->perf_event_mutex); |
| 2850 | /* | 2846 | /* |
| @@ -2856,14 +2852,14 @@ retry: | |||
| 2856 | else if (task->perf_event_ctxp[ctxn]) | 2852 | else if (task->perf_event_ctxp[ctxn]) |
| 2857 | err = -EAGAIN; | 2853 | err = -EAGAIN; |
| 2858 | else { | 2854 | else { |
| 2855 | get_ctx(ctx); | ||
| 2859 | ++ctx->pin_count; | 2856 | ++ctx->pin_count; |
| 2860 | rcu_assign_pointer(task->perf_event_ctxp[ctxn], ctx); | 2857 | rcu_assign_pointer(task->perf_event_ctxp[ctxn], ctx); |
| 2861 | } | 2858 | } |
| 2862 | mutex_unlock(&task->perf_event_mutex); | 2859 | mutex_unlock(&task->perf_event_mutex); |
| 2863 | 2860 | ||
| 2864 | if (unlikely(err)) { | 2861 | if (unlikely(err)) { |
| 2865 | put_task_struct(task); | 2862 | put_ctx(ctx); |
| 2866 | kfree(ctx); | ||
| 2867 | 2863 | ||
| 2868 | if (err == -EAGAIN) | 2864 | if (err == -EAGAIN) |
| 2869 | goto retry; | 2865 | goto retry; |
