]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf/core: Pass GFP flags to attach_task_ctx_data()
authorNamhyung Kim <namhyung@kernel.org>
Wed, 11 Feb 2026 22:32:19 +0000 (14:32 -0800)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 27 Feb 2026 15:40:21 +0000 (16:40 +0100)
This is a preparation for the next change to reduce the computational
complexity in the global context data handling for LBR callstacks.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260211223222.3119790-2-namhyung@kernel.org
kernel/events/core.c

index ac70d68217b6398e48b305dc22c20e3e172dba32..90b0c9324cbf7c4aa5a2aadd4399c364480ff496 100644 (file)
@@ -5370,15 +5370,15 @@ static void unaccount_freq_event(void)
 
 
 static struct perf_ctx_data *
-alloc_perf_ctx_data(struct kmem_cache *ctx_cache, bool global)
+alloc_perf_ctx_data(struct kmem_cache *ctx_cache, bool global, gfp_t gfp_flags)
 {
        struct perf_ctx_data *cd;
 
-       cd = kzalloc_obj(*cd);
+       cd = kzalloc_obj(*cd, gfp_flags);
        if (!cd)
                return NULL;
 
-       cd->data = kmem_cache_zalloc(ctx_cache, GFP_KERNEL);
+       cd->data = kmem_cache_zalloc(ctx_cache, gfp_flags);
        if (!cd->data) {
                kfree(cd);
                return NULL;
@@ -5412,11 +5412,11 @@ static inline void perf_free_ctx_data_rcu(struct perf_ctx_data *cd)
 
 static int
 attach_task_ctx_data(struct task_struct *task, struct kmem_cache *ctx_cache,
-                    bool global)
+                    bool global, gfp_t gfp_flags)
 {
        struct perf_ctx_data *cd, *old = NULL;
 
-       cd = alloc_perf_ctx_data(ctx_cache, global);
+       cd = alloc_perf_ctx_data(ctx_cache, global, gfp_flags);
        if (!cd)
                return -ENOMEM;
 
@@ -5499,7 +5499,7 @@ again:
 
        return 0;
 alloc:
-       ret = attach_task_ctx_data(p, ctx_cache, true);
+       ret = attach_task_ctx_data(p, ctx_cache, true, GFP_KERNEL);
        put_task_struct(p);
        if (ret) {
                __detach_global_ctx_data();
@@ -5519,7 +5519,7 @@ attach_perf_ctx_data(struct perf_event *event)
                return -ENOMEM;
 
        if (task)
-               return attach_task_ctx_data(task, ctx_cache, false);
+               return attach_task_ctx_data(task, ctx_cache, false, GFP_KERNEL);
 
        ret = attach_global_ctx_data(ctx_cache);
        if (ret)
@@ -9240,7 +9240,7 @@ perf_event_alloc_task_data(struct task_struct *child,
 
        return;
 attach:
-       attach_task_ctx_data(child, ctx_cache, true);
+       attach_task_ctx_data(child, ctx_cache, true, GFP_KERNEL);
 }
 
 void perf_event_fork(struct task_struct *task)