diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-03-06 11:21:49 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-03-06 11:59:12 -0500 |
| commit | 769b0441f438c4bb4872cb8560eb6fe51bcc09ee (patch) | |
| tree | 9908682dfd89e97c3097a7c3adcae35d821e1895 /kernel/trace/trace_output.c | |
| parent | 1ba28e02a18cbdbea123836f6c98efb09cbf59ec (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.c | 70 |
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 | ||
| 56 | static int | 56 | int trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary) |
| 57 | trace_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 */ |
| 837 | static 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 | |||
| 857 | static 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 | |||
| 872 | static 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 */ | ||
| 879 | static enum print_line_t | 836 | static enum print_line_t |
| 880 | trace_bprintk_print(struct trace_iterator *iter, int flags) | 837 | trace_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 | ||
| 903 | static enum print_line_t | 860 | |
| 904 | trace_bprintk_raw(struct trace_iterator *iter, int flags) | 861 | static 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 | ||
| 924 | static struct trace_event trace_bprintk_event = { | 880 | |
| 925 | .type = TRACE_BPRINTK, | 881 | static 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 | ||
| 932 | static struct trace_event *events[] __initdata = { | 887 | static 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 | ||
