diff options
| -rw-r--r-- | kernel/trace/trace_events.c | 15 | ||||
| -rw-r--r-- | kernel/trace/trace_functions_graph.c | 8 |
2 files changed, 20 insertions, 3 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 7da1dfeb322e..3ab69fb72b85 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
| @@ -565,6 +565,7 @@ static int __ftrace_set_clr_event(struct trace_array *tr, const char *match, | |||
| 565 | static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set) | 565 | static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set) |
| 566 | { | 566 | { |
| 567 | char *event = NULL, *sub = NULL, *match; | 567 | char *event = NULL, *sub = NULL, *match; |
| 568 | int ret; | ||
| 568 | 569 | ||
| 569 | /* | 570 | /* |
| 570 | * The buf format can be <subsystem>:<event-name> | 571 | * The buf format can be <subsystem>:<event-name> |
| @@ -590,7 +591,13 @@ static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set) | |||
| 590 | event = NULL; | 591 | event = NULL; |
| 591 | } | 592 | } |
| 592 | 593 | ||
| 593 | return __ftrace_set_clr_event(tr, match, sub, event, set); | 594 | ret = __ftrace_set_clr_event(tr, match, sub, event, set); |
| 595 | |||
| 596 | /* Put back the colon to allow this to be called again */ | ||
| 597 | if (buf) | ||
| 598 | *(buf - 1) = ':'; | ||
| 599 | |||
| 600 | return ret; | ||
| 594 | } | 601 | } |
| 595 | 602 | ||
| 596 | /** | 603 | /** |
| @@ -1753,6 +1760,8 @@ static void update_event_printk(struct ftrace_event_call *call, | |||
| 1753 | ptr++; | 1760 | ptr++; |
| 1754 | /* Check for alpha chars like ULL */ | 1761 | /* Check for alpha chars like ULL */ |
| 1755 | } while (isalnum(*ptr)); | 1762 | } while (isalnum(*ptr)); |
| 1763 | if (!*ptr) | ||
| 1764 | break; | ||
| 1756 | /* | 1765 | /* |
| 1757 | * A number must have some kind of delimiter after | 1766 | * A number must have some kind of delimiter after |
| 1758 | * it, and we can ignore that too. | 1767 | * it, and we can ignore that too. |
| @@ -1779,12 +1788,16 @@ static void update_event_printk(struct ftrace_event_call *call, | |||
| 1779 | do { | 1788 | do { |
| 1780 | ptr++; | 1789 | ptr++; |
| 1781 | } while (isalnum(*ptr) || *ptr == '_'); | 1790 | } while (isalnum(*ptr) || *ptr == '_'); |
| 1791 | if (!*ptr) | ||
| 1792 | break; | ||
| 1782 | /* | 1793 | /* |
| 1783 | * If what comes after this variable is a '.' or | 1794 | * If what comes after this variable is a '.' or |
| 1784 | * '->' then we can continue to ignore that string. | 1795 | * '->' then we can continue to ignore that string. |
| 1785 | */ | 1796 | */ |
| 1786 | if (*ptr == '.' || (ptr[0] == '-' && ptr[1] == '>')) { | 1797 | if (*ptr == '.' || (ptr[0] == '-' && ptr[1] == '>')) { |
| 1787 | ptr += *ptr == '.' ? 1 : 2; | 1798 | ptr += *ptr == '.' ? 1 : 2; |
| 1799 | if (!*ptr) | ||
| 1800 | break; | ||
| 1788 | goto skip_more; | 1801 | goto skip_more; |
| 1789 | } | 1802 | } |
| 1790 | /* | 1803 | /* |
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 | ||
