| .. | .. |
|---|
| 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); |
|---|