aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r--kernel/trace/trace_output.c57
1 files changed, 51 insertions, 6 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index 491832af9ba1..ea9d3b410c7a 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -832,13 +832,13 @@ static struct trace_event trace_user_stack_event = {
832 .binary = trace_special_bin, 832 .binary = trace_special_bin,
833}; 833};
834 834
835/* TRACE_PRINT */ 835/* TRACE_BPRINT */
836static enum print_line_t 836static enum print_line_t
837trace_print_print(struct trace_iterator *iter, int flags) 837trace_bprint_print(struct trace_iterator *iter, int flags)
838{ 838{
839 struct trace_entry *entry = iter->ent; 839 struct trace_entry *entry = iter->ent;
840 struct trace_seq *s = &iter->seq; 840 struct trace_seq *s = &iter->seq;
841 struct print_entry *field; 841 struct bprint_entry *field;
842 842
843 trace_assign_type(field, entry); 843 trace_assign_type(field, entry);
844 844
@@ -858,9 +858,10 @@ trace_print_print(struct trace_iterator *iter, int flags)
858} 858}
859 859
860 860
861static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags) 861static enum print_line_t
862trace_bprint_raw(struct trace_iterator *iter, int flags)
862{ 863{
863 struct print_entry *field; 864 struct bprint_entry *field;
864 struct trace_seq *s = &iter->seq; 865 struct trace_seq *s = &iter->seq;
865 866
866 trace_assign_type(field, iter->ent); 867 trace_assign_type(field, iter->ent);
@@ -878,12 +879,55 @@ static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags)
878} 879}
879 880
880 881
882static struct trace_event trace_bprint_event = {
883 .type = TRACE_BPRINT,
884 .trace = trace_bprint_print,
885 .raw = trace_bprint_raw,
886};
887
888/* TRACE_PRINT */
889static enum print_line_t trace_print_print(struct trace_iterator *iter,
890 int flags)
891{
892 struct print_entry *field;
893 struct trace_seq *s = &iter->seq;
894
895 trace_assign_type(field, iter->ent);
896
897 if (!seq_print_ip_sym(s, field->ip, flags))
898 goto partial;
899
900 if (!trace_seq_printf(s, ": %s", field->buf))
901 goto partial;
902
903 return TRACE_TYPE_HANDLED;
904
905 partial:
906 return TRACE_TYPE_PARTIAL_LINE;
907}
908
909static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags)
910{
911 struct print_entry *field;
912
913 trace_assign_type(field, iter->ent);
914
915 if (!trace_seq_printf(&iter->seq, "# %lx %s", field->ip, field->buf))
916 goto partial;
917
918 return TRACE_TYPE_HANDLED;
919
920 partial:
921 return TRACE_TYPE_PARTIAL_LINE;
922}
923
881static struct trace_event trace_print_event = { 924static struct trace_event trace_print_event = {
882 .type = TRACE_PRINT, 925 .type = TRACE_PRINT,
883 .trace = trace_print_print, 926 .trace = trace_print_print,
884 .raw = trace_print_raw, 927 .raw = trace_print_raw,
885}; 928};
886 929
930
887static struct trace_event *events[] __initdata = { 931static struct trace_event *events[] __initdata = {
888 &trace_fn_event, 932 &trace_fn_event,
889 &trace_ctx_event, 933 &trace_ctx_event,
@@ -891,6 +935,7 @@ static struct trace_event *events[] __initdata = {
891 &trace_special_event, 935 &trace_special_event,
892 &trace_stack_event, 936 &trace_stack_event,
893 &trace_user_stack_event, 937 &trace_user_stack_event,
938 &trace_bprint_event,
894 &trace_print_event, 939 &trace_print_event,
895 NULL 940 NULL
896}; 941};