summaryrefslogtreecommitdiff
path: root/kernel/events
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/events')
-rw-r--r--kernel/events/core.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 75090403f942..30d9b3182369 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -1240,12 +1240,18 @@ static void get_ctx(struct perf_event_context *ctx)
static void *alloc_task_ctx_data(struct pmu *pmu)
{
+ if (pmu->task_ctx_cache)
+ return kmem_cache_zalloc(pmu->task_ctx_cache, GFP_KERNEL);
+
return kzalloc(pmu->task_ctx_size, GFP_KERNEL);
}
static void free_task_ctx_data(struct pmu *pmu, void *task_ctx_data)
{
- kfree(task_ctx_data);
+ if (pmu->task_ctx_cache && task_ctx_data)
+ kmem_cache_free(pmu->task_ctx_cache, task_ctx_data);
+ else
+ kfree(task_ctx_data);
}
static void free_ctx(struct rcu_head *head)