The trace_seq_printf() and friends are used to store strings into a buffer that can be passed around from function to function. If the trace_seq buffer fills up, it will not print any more. The return values were somewhat inconsistant and using trace_seq_has_overflowed() was a better way to know if the write to the trace_seq buffer succeeded or not. Now that all users have removed reading the return value of the printf() type functions, they can safely return void and keep future users of them from reading the inconsistent values as well. Link: http://lkml.kernel.org/r/20141114011411.992510720@goodmis.org Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
123 lines
3.2 KiB
C
123 lines
3.2 KiB
C
#ifndef _LINUX_TRACE_SEQ_H
|
|
#define _LINUX_TRACE_SEQ_H
|
|
|
|
#include <linux/fs.h>
|
|
|
|
#include <asm/page.h>
|
|
|
|
/*
|
|
* Trace sequences are used to allow a function to call several other functions
|
|
* to create a string of data to use (up to a max of PAGE_SIZE).
|
|
*/
|
|
|
|
struct trace_seq {
|
|
unsigned char buffer[PAGE_SIZE];
|
|
unsigned int len;
|
|
unsigned int readpos;
|
|
int full;
|
|
};
|
|
|
|
static inline void
|
|
trace_seq_init(struct trace_seq *s)
|
|
{
|
|
s->len = 0;
|
|
s->readpos = 0;
|
|
s->full = 0;
|
|
}
|
|
|
|
/**
|
|
* trace_seq_buffer_ptr - return pointer to next location in buffer
|
|
* @s: trace sequence descriptor
|
|
*
|
|
* Returns the pointer to the buffer where the next write to
|
|
* the buffer will happen. This is useful to save the location
|
|
* that is about to be written to and then return the result
|
|
* of that write.
|
|
*/
|
|
static inline unsigned char *
|
|
trace_seq_buffer_ptr(struct trace_seq *s)
|
|
{
|
|
return s->buffer + s->len;
|
|
}
|
|
|
|
/**
|
|
* trace_seq_has_overflowed - return true if the trace_seq took too much
|
|
* @s: trace sequence descriptor
|
|
*
|
|
* Returns true if too much data was added to the trace_seq and it is
|
|
* now full and will not take anymore.
|
|
*/
|
|
static inline bool trace_seq_has_overflowed(struct trace_seq *s)
|
|
{
|
|
return s->full || s->len > PAGE_SIZE - 1;
|
|
}
|
|
|
|
/*
|
|
* Currently only defined when tracing is enabled.
|
|
*/
|
|
#ifdef CONFIG_TRACING
|
|
extern __printf(2, 3)
|
|
void trace_seq_printf(struct trace_seq *s, const char *fmt, ...);
|
|
extern __printf(2, 0)
|
|
void trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args);
|
|
extern void
|
|
trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary);
|
|
extern int trace_print_seq(struct seq_file *m, struct trace_seq *s);
|
|
extern int trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
|
|
int cnt);
|
|
extern void trace_seq_puts(struct trace_seq *s, const char *str);
|
|
extern void trace_seq_putc(struct trace_seq *s, unsigned char c);
|
|
extern void trace_seq_putmem(struct trace_seq *s, const void *mem, unsigned int len);
|
|
extern void trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
|
|
unsigned int len);
|
|
extern int trace_seq_path(struct trace_seq *s, const struct path *path);
|
|
|
|
extern void trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp,
|
|
int nmaskbits);
|
|
|
|
#else /* CONFIG_TRACING */
|
|
static inline void trace_seq_printf(struct trace_seq *s, const char *fmt, ...)
|
|
{
|
|
}
|
|
static inline void
|
|
trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
|
|
{
|
|
}
|
|
|
|
static inline void
|
|
trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp,
|
|
int nmaskbits)
|
|
{
|
|
}
|
|
|
|
static inline int trace_print_seq(struct seq_file *m, struct trace_seq *s)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline int trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
|
|
int cnt)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline void trace_seq_puts(struct trace_seq *s, const char *str)
|
|
{
|
|
}
|
|
static inline void trace_seq_putc(struct trace_seq *s, unsigned char c)
|
|
{
|
|
}
|
|
static inline void
|
|
trace_seq_putmem(struct trace_seq *s, const void *mem, unsigned int len)
|
|
{
|
|
}
|
|
static inline void trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
|
|
unsigned int len)
|
|
{
|
|
}
|
|
static inline int trace_seq_path(struct trace_seq *s, const struct path *path)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* CONFIG_TRACING */
|
|
|
|
#endif /* _LINUX_TRACE_SEQ_H */
|