diff options
-rw-r--r-- | kernel/trace/trace_functions_graph.c | 8 |
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 | ||