diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/trace/trace.h | 3 | ||||
| -rw-r--r-- | kernel/trace/trace_events.c | 8 | ||||
| -rw-r--r-- | kernel/trace/trace_events_filter.c | 25 |
3 files changed, 15 insertions, 21 deletions
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 54fd9bcd0a65..90a848debcba 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
| @@ -840,7 +840,8 @@ struct filter_pred { | |||
| 840 | int trace_define_field(struct ftrace_event_call *call, char *type, | 840 | int trace_define_field(struct ftrace_event_call *call, char *type, |
| 841 | char *name, int offset, int size); | 841 | char *name, int offset, int size); |
| 842 | extern void filter_free_pred(struct filter_pred *pred); | 842 | extern void filter_free_pred(struct filter_pred *pred); |
| 843 | extern int filter_print_preds(struct filter_pred **preds, char *buf); | 843 | extern void filter_print_preds(struct filter_pred **preds, |
| 844 | struct trace_seq *s); | ||
| 844 | extern int filter_parse(char **pbuf, struct filter_pred *pred); | 845 | extern int filter_parse(char **pbuf, struct filter_pred *pred); |
| 845 | extern int filter_add_pred(struct ftrace_event_call *call, | 846 | extern int filter_add_pred(struct ftrace_event_call *call, |
| 846 | struct filter_pred *pred); | 847 | struct filter_pred *pred); |
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index a9381384aa9e..d132997ab756 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
| @@ -481,8 +481,8 @@ event_filter_read(struct file *filp, char __user *ubuf, size_t cnt, | |||
| 481 | 481 | ||
| 482 | trace_seq_init(s); | 482 | trace_seq_init(s); |
| 483 | 483 | ||
| 484 | r = filter_print_preds(call->preds, s->buffer); | 484 | filter_print_preds(call->preds, s); |
| 485 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, r); | 485 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); |
| 486 | 486 | ||
| 487 | kfree(s); | 487 | kfree(s); |
| 488 | 488 | ||
| @@ -547,8 +547,8 @@ subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt, | |||
| 547 | 547 | ||
| 548 | trace_seq_init(s); | 548 | trace_seq_init(s); |
| 549 | 549 | ||
| 550 | r = filter_print_preds(system->preds, s->buffer); | 550 | filter_print_preds(system->preds, s); |
| 551 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, r); | 551 | r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); |
| 552 | 552 | ||
| 553 | kfree(s); | 553 | kfree(s); |
| 554 | 554 | ||
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c index 3f0b79f8a4bc..9fca8bb1c06b 100644 --- a/kernel/trace/trace_events_filter.c +++ b/kernel/trace/trace_events_filter.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/ctype.h> | 24 | #include <linux/ctype.h> |
| 25 | 25 | ||
| 26 | #include "trace.h" | 26 | #include "trace.h" |
| 27 | #include "trace_output.h" | ||
| 27 | 28 | ||
| 28 | static int filter_pred_64(struct filter_pred *pred, void *event) | 29 | static int filter_pred_64(struct filter_pred *pred, void *event) |
| 29 | { | 30 | { |
| @@ -108,16 +109,15 @@ int filter_match_preds(struct ftrace_event_call *call, void *rec) | |||
| 108 | return 1; | 109 | return 1; |
| 109 | } | 110 | } |
| 110 | 111 | ||
| 111 | int filter_print_preds(struct filter_pred **preds, char *buf) | 112 | void filter_print_preds(struct filter_pred **preds, struct trace_seq *s) |
| 112 | { | 113 | { |
| 113 | ssize_t this_len = 0; | ||
| 114 | char *field_name; | 114 | char *field_name; |
| 115 | struct filter_pred *pred; | 115 | struct filter_pred *pred; |
| 116 | int i; | 116 | int i; |
| 117 | 117 | ||
| 118 | if (!preds) { | 118 | if (!preds) { |
| 119 | this_len += sprintf(buf + this_len, "none\n"); | 119 | trace_seq_printf(s, "none\n"); |
| 120 | return this_len; | 120 | return; |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | for (i = 0; i < MAX_FILTER_PRED; i++) { | 123 | for (i = 0; i < MAX_FILTER_PRED; i++) { |
| @@ -125,23 +125,16 @@ int filter_print_preds(struct filter_pred **preds, char *buf) | |||
| 125 | pred = preds[i]; | 125 | pred = preds[i]; |
| 126 | field_name = pred->field_name; | 126 | field_name = pred->field_name; |
| 127 | if (i) | 127 | if (i) |
| 128 | this_len += sprintf(buf + this_len, | 128 | trace_seq_printf(s, pred->or ? "|| " : "&& "); |
| 129 | pred->or ? "|| " : "&& "); | 129 | trace_seq_printf(s, "%s ", field_name); |
| 130 | this_len += sprintf(buf + this_len, | 130 | trace_seq_printf(s, pred->not ? "!= " : "== "); |
| 131 | "%s ", field_name); | ||
| 132 | this_len += sprintf(buf + this_len, | ||
| 133 | pred->not ? "!= " : "== "); | ||
| 134 | if (pred->str_val) | 131 | if (pred->str_val) |
| 135 | this_len += sprintf(buf + this_len, | 132 | trace_seq_printf(s, "%s\n", pred->str_val); |
| 136 | "%s\n", pred->str_val); | ||
| 137 | else | 133 | else |
| 138 | this_len += sprintf(buf + this_len, | 134 | trace_seq_printf(s, "%llu\n", pred->val); |
| 139 | "%llu\n", pred->val); | ||
| 140 | } else | 135 | } else |
| 141 | break; | 136 | break; |
| 142 | } | 137 | } |
| 143 | |||
| 144 | return this_len; | ||
| 145 | } | 138 | } |
| 146 | 139 | ||
| 147 | static struct ftrace_event_field * | 140 | static struct ftrace_event_field * |
