aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/trace/trace_functions_graph.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index 2d25ad1526bb..b6fce365ef27 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -1309,15 +1309,19 @@ void graph_trace_open(struct trace_iterator *iter)
1309{ 1309{
1310 /* pid and depth on the last trace processed */ 1310 /* pid and depth on the last trace processed */
1311 struct fgraph_data *data; 1311 struct fgraph_data *data;
1312 gfp_t gfpflags;
1312 int cpu; 1313 int cpu;
1313 1314
1314 iter->private = NULL; 1315 iter->private = NULL;
1315 1316
1316 data = kzalloc(sizeof(*data), GFP_KERNEL); 1317 /* We can be called in atomic context via ftrace_dump() */
1318 gfpflags = (in_atomic() || irqs_disabled()) ? GFP_ATOMIC : GFP_KERNEL;
1319
1320 data = kzalloc(sizeof(*data), gfpflags);
1317 if (!data) 1321 if (!data)
1318 goto out_err; 1322 goto out_err;
1319 1323
1320 data->cpu_data = alloc_percpu(struct fgraph_cpu_data); 1324 data->cpu_data = alloc_percpu_gfp(struct fgraph_cpu_data, gfpflags);
1321 if (!data->cpu_data) 1325 if (!data->cpu_data)
1322 goto out_err_free; 1326 goto out_err_free;
1323 1327