diff options
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r-- | kernel/trace/trace_output.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index aea6a1218c7d..070866c32eb9 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c | |||
@@ -124,6 +124,44 @@ EXPORT_SYMBOL(trace_print_symbols_seq); | |||
124 | 124 | ||
125 | #if BITS_PER_LONG == 32 | 125 | #if BITS_PER_LONG == 32 |
126 | const char * | 126 | const char * |
127 | trace_print_flags_seq_u64(struct trace_seq *p, const char *delim, | ||
128 | unsigned long long flags, | ||
129 | const struct trace_print_flags_u64 *flag_array) | ||
130 | { | ||
131 | unsigned long long mask; | ||
132 | const char *str; | ||
133 | const char *ret = trace_seq_buffer_ptr(p); | ||
134 | int i, first = 1; | ||
135 | |||
136 | for (i = 0; flag_array[i].name && flags; i++) { | ||
137 | |||
138 | mask = flag_array[i].mask; | ||
139 | if ((flags & mask) != mask) | ||
140 | continue; | ||
141 | |||
142 | str = flag_array[i].name; | ||
143 | flags &= ~mask; | ||
144 | if (!first && delim) | ||
145 | trace_seq_puts(p, delim); | ||
146 | else | ||
147 | first = 0; | ||
148 | trace_seq_puts(p, str); | ||
149 | } | ||
150 | |||
151 | /* check for left over flags */ | ||
152 | if (flags) { | ||
153 | if (!first && delim) | ||
154 | trace_seq_puts(p, delim); | ||
155 | trace_seq_printf(p, "0x%llx", flags); | ||
156 | } | ||
157 | |||
158 | trace_seq_putc(p, 0); | ||
159 | |||
160 | return ret; | ||
161 | } | ||
162 | EXPORT_SYMBOL(trace_print_flags_seq_u64); | ||
163 | |||
164 | const char * | ||
127 | trace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val, | 165 | trace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val, |
128 | const struct trace_print_flags_u64 *symbol_array) | 166 | const struct trace_print_flags_u64 *symbol_array) |
129 | { | 167 | { |