diff options
Diffstat (limited to 'kernel/trace/trace_functions_graph.c')
-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 9cfea4c6d314..a51e79688455 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c | |||
@@ -1308,15 +1308,19 @@ void graph_trace_open(struct trace_iterator *iter) | |||
1308 | { | 1308 | { |
1309 | /* pid and depth on the last trace processed */ | 1309 | /* pid and depth on the last trace processed */ |
1310 | struct fgraph_data *data; | 1310 | struct fgraph_data *data; |
1311 | gfp_t gfpflags; | ||
1311 | int cpu; | 1312 | int cpu; |
1312 | 1313 | ||
1313 | iter->private = NULL; | 1314 | iter->private = NULL; |
1314 | 1315 | ||
1315 | data = kzalloc(sizeof(*data), GFP_KERNEL); | 1316 | /* We can be called in atomic context via ftrace_dump() */ |
1317 | gfpflags = (in_atomic() || irqs_disabled()) ? GFP_ATOMIC : GFP_KERNEL; | ||
1318 | |||
1319 | data = kzalloc(sizeof(*data), gfpflags); | ||
1316 | if (!data) | 1320 | if (!data) |
1317 | goto out_err; | 1321 | goto out_err; |
1318 | 1322 | ||
1319 | data->cpu_data = alloc_percpu(struct fgraph_cpu_data); | 1323 | data->cpu_data = alloc_percpu_gfp(struct fgraph_cpu_data, gfpflags); |
1320 | if (!data->cpu_data) | 1324 | if (!data->cpu_data) |
1321 | goto out_err_free; | 1325 | goto out_err_free; |
1322 | 1326 | ||