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