tracing: Add trace_array_puts() to write into instance
[ Upstream commitd503b8f747
] Add a generic trace_array_puts() that can be used to "trace_puts()" into an allocated trace_array instance. This is just another variant of trace_array_printk(). Link: https://lkml.kernel.org/r/20230207173026.584717290@goodmis.org Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Ross Zwisler <zwisler@google.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Stable-dep-of:9d52727f80
("tracing: Have tracing_snapshot_instance_cond() write errors to the appropriate instance") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
41afd2473d
commit
5620eeb379
|
@ -33,6 +33,18 @@ struct trace_array;
|
|||
int register_ftrace_export(struct trace_export *export);
|
||||
int unregister_ftrace_export(struct trace_export *export);
|
||||
|
||||
/**
|
||||
* trace_array_puts - write a constant string into the trace buffer.
|
||||
* @tr: The trace array to write to
|
||||
* @str: The constant string to write
|
||||
*/
|
||||
#define trace_array_puts(tr, str) \
|
||||
({ \
|
||||
str ? __trace_array_puts(tr, _THIS_IP_, str, strlen(str)) : -1; \
|
||||
})
|
||||
int __trace_array_puts(struct trace_array *tr, unsigned long ip,
|
||||
const char *str, int size);
|
||||
|
||||
void trace_printk_init_buffers(void);
|
||||
__printf(3, 4)
|
||||
int trace_array_printk(struct trace_array *tr, unsigned long ip,
|
||||
|
|
|
@ -1002,13 +1002,8 @@ __buffer_unlock_commit(struct trace_buffer *buffer, struct ring_buffer_event *ev
|
|||
ring_buffer_unlock_commit(buffer, event);
|
||||
}
|
||||
|
||||
/**
|
||||
* __trace_puts - write a constant string into the trace buffer.
|
||||
* @ip: The address of the caller
|
||||
* @str: The constant string to write
|
||||
* @size: The size of the string.
|
||||
*/
|
||||
int __trace_puts(unsigned long ip, const char *str, int size)
|
||||
int __trace_array_puts(struct trace_array *tr, unsigned long ip,
|
||||
const char *str, int size)
|
||||
{
|
||||
struct ring_buffer_event *event;
|
||||
struct trace_buffer *buffer;
|
||||
|
@ -1016,7 +1011,7 @@ int __trace_puts(unsigned long ip, const char *str, int size)
|
|||
unsigned int trace_ctx;
|
||||
int alloc;
|
||||
|
||||
if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
|
||||
if (!(tr->trace_flags & TRACE_ITER_PRINTK))
|
||||
return 0;
|
||||
|
||||
if (unlikely(tracing_selftest_running || tracing_disabled))
|
||||
|
@ -1025,7 +1020,7 @@ int __trace_puts(unsigned long ip, const char *str, int size)
|
|||
alloc = sizeof(*entry) + size + 2; /* possible \n added */
|
||||
|
||||
trace_ctx = tracing_gen_ctx();
|
||||
buffer = global_trace.array_buffer.buffer;
|
||||
buffer = tr->array_buffer.buffer;
|
||||
ring_buffer_nest_start(buffer);
|
||||
event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc,
|
||||
trace_ctx);
|
||||
|
@ -1047,11 +1042,23 @@ int __trace_puts(unsigned long ip, const char *str, int size)
|
|||
entry->buf[size] = '\0';
|
||||
|
||||
__buffer_unlock_commit(buffer, event);
|
||||
ftrace_trace_stack(&global_trace, buffer, trace_ctx, 4, NULL);
|
||||
ftrace_trace_stack(tr, buffer, trace_ctx, 4, NULL);
|
||||
out:
|
||||
ring_buffer_nest_end(buffer);
|
||||
return size;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__trace_array_puts);
|
||||
|
||||
/**
|
||||
* __trace_puts - write a constant string into the trace buffer.
|
||||
* @ip: The address of the caller
|
||||
* @str: The constant string to write
|
||||
* @size: The size of the string.
|
||||
*/
|
||||
int __trace_puts(unsigned long ip, const char *str, int size)
|
||||
{
|
||||
return __trace_array_puts(&global_trace, ip, str, size);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__trace_puts);
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue