aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_output.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2009-03-06 11:21:49 -0500
committerIngo Molnar <mingo@elte.hu>2009-03-06 11:59:12 -0500
commit769b0441f438c4bb4872cb8560eb6fe51bcc09ee (patch)
tree9908682dfd89e97c3097a7c3adcae35d821e1895 /kernel/trace/trace_output.c
parent1ba28e02a18cbdbea123836f6c98efb09cbf59ec (diff)
tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk()
Impact: faster and lighter tracing Now that we have trace_bprintk() which is faster and consume lesser memory than trace_printk() and has the same purpose, we can now drop the old implementation in favour of the binary one from trace_bprintk(), which means we move all the implementation of trace_bprintk() to trace_printk(), so the Api doesn't change except that we must now use trace_seq_bprintk() to print the TRACE_PRINT entries. Some changes result of this: - Previously, trace_bprintk depended of a single tracer and couldn't work without. This tracer has been dropped and the whole implementation of trace_printk() (like the module formats management) is now integrated in the tracing core (comes with CONFIG_TRACING), though we keep the file trace_printk (previously trace_bprintk.c) where we can find the module management. Thus we don't overflow trace.c - changes some parts to use trace_seq_bprintk() to print TRACE_PRINT entries. - change a bit trace_printk/trace_vprintk macros to support non-builtin formats constants, and fix 'const' qualifiers warnings. But this is all transparent for developers. - etc... V2: - Rebase against last changes - Fix mispell on the changelog V3: - Rebase against last changes (moving trace_printk() to kernel.h) Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Acked-by: Steven Rostedt <rostedt@goodmis.org> LKML-Reference: <1236356510-8381-5-git-send-email-fweisbec@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r--kernel/trace/trace_output.c70
1 files changed, 12 insertions, 58 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index 4ab71201862e..ef8fd661b217 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -53,8 +53,7 @@ trace_seq_printf(struct trace_seq *s, const char *fmt, ...)
53 return len; 53 return len;
54} 54}
55 55
56static int 56int trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
57trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
58{ 57{
59 int len = (PAGE_SIZE - 1) - s->len; 58 int len = (PAGE_SIZE - 1) - s->len;
60 int ret; 59 int ret;
@@ -834,54 +833,12 @@ static struct trace_event trace_user_stack_event = {
834}; 833};
835 834
836/* TRACE_PRINT */ 835/* TRACE_PRINT */
837static enum print_line_t trace_print_print(struct trace_iterator *iter,
838 int flags)
839{
840 struct print_entry *field;
841 struct trace_seq *s = &iter->seq;
842
843 trace_assign_type(field, iter->ent);
844
845 if (!seq_print_ip_sym(s, field->ip, flags))
846 goto partial;
847
848 if (!trace_seq_printf(s, ": %s", field->buf))
849 goto partial;
850
851 return TRACE_TYPE_HANDLED;
852
853 partial:
854 return TRACE_TYPE_PARTIAL_LINE;
855}
856
857static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags)
858{
859 struct print_entry *field;
860
861 trace_assign_type(field, iter->ent);
862
863 if (!trace_seq_printf(&iter->seq, "# %lx %s", field->ip, field->buf))
864 goto partial;
865
866 return TRACE_TYPE_HANDLED;
867
868 partial:
869 return TRACE_TYPE_PARTIAL_LINE;
870}
871
872static struct trace_event trace_print_event = {
873 .type = TRACE_PRINT,
874 .trace = trace_print_print,
875 .raw = trace_print_raw,
876};
877
878/* TRACE_BPRINTK */
879static enum print_line_t 836static enum print_line_t
880trace_bprintk_print(struct trace_iterator *iter, int flags) 837trace_print_print(struct trace_iterator *iter, int flags)
881{ 838{
882 struct trace_entry *entry = iter->ent; 839 struct trace_entry *entry = iter->ent;
883 struct trace_seq *s = &iter->seq; 840 struct trace_seq *s = &iter->seq;
884 struct bprintk_entry *field; 841 struct print_entry *field;
885 842
886 trace_assign_type(field, entry); 843 trace_assign_type(field, entry);
887 844
@@ -900,14 +857,13 @@ trace_bprintk_print(struct trace_iterator *iter, int flags)
900 return TRACE_TYPE_PARTIAL_LINE; 857 return TRACE_TYPE_PARTIAL_LINE;
901} 858}
902 859
903static enum print_line_t 860
904trace_bprintk_raw(struct trace_iterator *iter, int flags) 861static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags)
905{ 862{
906 struct trace_entry *entry = iter->ent; 863 struct print_entry *field;
907 struct trace_seq *s = &iter->seq; 864 struct trace_seq *s = &iter->seq;
908 struct bprintk_entry *field;
909 865
910 trace_assign_type(field, entry); 866 trace_assign_type(field, iter->ent);
911 867
912 if (!trace_seq_printf(s, ": %lx : ", field->ip)) 868 if (!trace_seq_printf(s, ": %lx : ", field->ip))
913 goto partial; 869 goto partial;
@@ -921,12 +877,11 @@ trace_bprintk_raw(struct trace_iterator *iter, int flags)
921 return TRACE_TYPE_PARTIAL_LINE; 877 return TRACE_TYPE_PARTIAL_LINE;
922} 878}
923 879
924static struct trace_event trace_bprintk_event = { 880
925 .type = TRACE_BPRINTK, 881static struct trace_event trace_print_event = {
926 .trace = trace_bprintk_print, 882 .type = TRACE_PRINT,
927 .raw = trace_bprintk_raw, 883 .trace = trace_print_print,
928 .hex = trace_nop_print, 884 .raw = trace_print_raw,
929 .binary = trace_nop_print,
930}; 885};
931 886
932static struct trace_event *events[] __initdata = { 887static struct trace_event *events[] __initdata = {
@@ -937,7 +892,6 @@ static struct trace_event *events[] __initdata = {
937 &trace_stack_event, 892 &trace_stack_event,
938 &trace_user_stack_event, 893 &trace_user_stack_event,
939 &trace_print_event, 894 &trace_print_event,
940 &trace_bprintk_event,
941 NULL 895 NULL
942}; 896};
943 897