at v3.17-rc2 3.0 kB view raw
1#ifndef _LINUX_TRACE_SEQ_H 2#define _LINUX_TRACE_SEQ_H 3 4#include <linux/fs.h> 5 6#include <asm/page.h> 7 8/* 9 * Trace sequences are used to allow a function to call several other functions 10 * to create a string of data to use (up to a max of PAGE_SIZE). 11 */ 12 13struct trace_seq { 14 unsigned char buffer[PAGE_SIZE]; 15 unsigned int len; 16 unsigned int readpos; 17 int full; 18}; 19 20static inline void 21trace_seq_init(struct trace_seq *s) 22{ 23 s->len = 0; 24 s->readpos = 0; 25 s->full = 0; 26} 27 28/** 29 * trace_seq_buffer_ptr - return pointer to next location in buffer 30 * @s: trace sequence descriptor 31 * 32 * Returns the pointer to the buffer where the next write to 33 * the buffer will happen. This is useful to save the location 34 * that is about to be written to and then return the result 35 * of that write. 36 */ 37static inline unsigned char * 38trace_seq_buffer_ptr(struct trace_seq *s) 39{ 40 return s->buffer + s->len; 41} 42 43/* 44 * Currently only defined when tracing is enabled. 45 */ 46#ifdef CONFIG_TRACING 47extern __printf(2, 3) 48int trace_seq_printf(struct trace_seq *s, const char *fmt, ...); 49extern __printf(2, 0) 50int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args); 51extern int 52trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary); 53extern int trace_print_seq(struct seq_file *m, struct trace_seq *s); 54extern int trace_seq_to_user(struct trace_seq *s, char __user *ubuf, 55 int cnt); 56extern int trace_seq_puts(struct trace_seq *s, const char *str); 57extern int trace_seq_putc(struct trace_seq *s, unsigned char c); 58extern int trace_seq_putmem(struct trace_seq *s, const void *mem, unsigned int len); 59extern int trace_seq_putmem_hex(struct trace_seq *s, const void *mem, 60 unsigned int len); 61extern int trace_seq_path(struct trace_seq *s, const struct path *path); 62 63extern int trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp, 64 int nmaskbits); 65 66#else /* CONFIG_TRACING */ 67static inline int trace_seq_printf(struct trace_seq *s, const char *fmt, ...) 68{ 69 return 0; 70} 71static inline int 72trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary) 73{ 74 return 0; 75} 76 77static inline int 78trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp, 79 int nmaskbits) 80{ 81 return 0; 82} 83 84static inline int trace_print_seq(struct seq_file *m, struct trace_seq *s) 85{ 86 return 0; 87} 88static inline int trace_seq_to_user(struct trace_seq *s, char __user *ubuf, 89 int cnt) 90{ 91 return 0; 92} 93static inline int trace_seq_puts(struct trace_seq *s, const char *str) 94{ 95 return 0; 96} 97static inline int trace_seq_putc(struct trace_seq *s, unsigned char c) 98{ 99 return 0; 100} 101static inline int 102trace_seq_putmem(struct trace_seq *s, const void *mem, unsigned int len) 103{ 104 return 0; 105} 106static inline int trace_seq_putmem_hex(struct trace_seq *s, const void *mem, 107 unsigned int len) 108{ 109 return 0; 110} 111static inline int trace_seq_path(struct trace_seq *s, const struct path *path) 112{ 113 return 0; 114} 115#endif /* CONFIG_TRACING */ 116 117#endif /* _LINUX_TRACE_SEQ_H */