tracing: add trace_seq_vprint interface
The code to update the print formats for events requires a vprintf format in the trace_seq. This patch adds that interface. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Родитель
6556d1df88
Коммит
725c624a58
|
@ -27,6 +27,8 @@ trace_seq_init(struct trace_seq *s)
|
||||||
#ifdef CONFIG_TRACING
|
#ifdef CONFIG_TRACING
|
||||||
extern int trace_seq_printf(struct trace_seq *s, const char *fmt, ...)
|
extern int trace_seq_printf(struct trace_seq *s, const char *fmt, ...)
|
||||||
__attribute__ ((format (printf, 2, 3)));
|
__attribute__ ((format (printf, 2, 3)));
|
||||||
|
extern int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args)
|
||||||
|
__attribute__ ((format (printf, 2, 0)));
|
||||||
extern int
|
extern int
|
||||||
trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary);
|
trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary);
|
||||||
extern void trace_print_seq(struct seq_file *m, struct trace_seq *s);
|
extern void trace_print_seq(struct seq_file *m, struct trace_seq *s);
|
||||||
|
|
|
@ -100,6 +100,38 @@ trace_seq_printf(struct trace_seq *s, const char *fmt, ...)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(trace_seq_printf);
|
EXPORT_SYMBOL_GPL(trace_seq_printf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* trace_seq_vprintf - sequence printing of trace information
|
||||||
|
* @s: trace sequence descriptor
|
||||||
|
* @fmt: printf format string
|
||||||
|
*
|
||||||
|
* The tracer may use either sequence operations or its own
|
||||||
|
* copy to user routines. To simplify formating of a trace
|
||||||
|
* trace_seq_printf is used to store strings into a special
|
||||||
|
* buffer (@s). Then the output may be either used by
|
||||||
|
* the sequencer or pulled into another buffer.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args)
|
||||||
|
{
|
||||||
|
int len = (PAGE_SIZE - 1) - s->len;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!len)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ret = vsnprintf(s->buffer + s->len, len, fmt, args);
|
||||||
|
|
||||||
|
/* If we can't write it all, don't bother writing anything */
|
||||||
|
if (ret >= len)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
s->len += ret;
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(trace_seq_vprintf);
|
||||||
|
|
||||||
int trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
|
int trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
|
||||||
{
|
{
|
||||||
int len = (PAGE_SIZE - 1) - s->len;
|
int len = (PAGE_SIZE - 1) - s->len;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче