.. | .. |
---|
30 | 30 | /* How much buffer is left on the trace_seq? */ |
---|
31 | 31 | #define TRACE_SEQ_BUF_LEFT(s) seq_buf_buffer_left(&(s)->seq) |
---|
32 | 32 | |
---|
33 | | -/* How much buffer is written? */ |
---|
34 | | -#define TRACE_SEQ_BUF_USED(s) seq_buf_used(&(s)->seq) |
---|
35 | | - |
---|
36 | 33 | /* |
---|
37 | 34 | * trace_seq should work with being initialized with 0s. |
---|
38 | 35 | */ |
---|
.. | .. |
---|
376 | 373 | return seq_buf_to_user(&s->seq, ubuf, cnt); |
---|
377 | 374 | } |
---|
378 | 375 | EXPORT_SYMBOL_GPL(trace_seq_to_user); |
---|
| 376 | + |
---|
| 377 | +int trace_seq_hex_dump(struct trace_seq *s, const char *prefix_str, |
---|
| 378 | + int prefix_type, int rowsize, int groupsize, |
---|
| 379 | + const void *buf, size_t len, bool ascii) |
---|
| 380 | +{ |
---|
| 381 | + unsigned int save_len = s->seq.len; |
---|
| 382 | + |
---|
| 383 | + if (s->full) |
---|
| 384 | + return 0; |
---|
| 385 | + |
---|
| 386 | + __trace_seq_init(s); |
---|
| 387 | + |
---|
| 388 | + if (TRACE_SEQ_BUF_LEFT(s) < 1) { |
---|
| 389 | + s->full = 1; |
---|
| 390 | + return 0; |
---|
| 391 | + } |
---|
| 392 | + |
---|
| 393 | + seq_buf_hex_dump(&(s->seq), prefix_str, |
---|
| 394 | + prefix_type, rowsize, groupsize, |
---|
| 395 | + buf, len, ascii); |
---|
| 396 | + |
---|
| 397 | + if (unlikely(seq_buf_has_overflowed(&s->seq))) { |
---|
| 398 | + s->seq.len = save_len; |
---|
| 399 | + s->full = 1; |
---|
| 400 | + return 0; |
---|
| 401 | + } |
---|
| 402 | + |
---|
| 403 | + return 1; |
---|
| 404 | +} |
---|
| 405 | +EXPORT_SYMBOL(trace_seq_hex_dump); |
---|