| From 6a2cbc58d6c9d90cd74288cc497c2b45815bc064 Mon Sep 17 00:00:00 2001 |
| From: Yun Zhou <yun.zhou@windriver.com> |
| Date: Sat, 26 Jun 2021 11:21:56 +0800 |
| Subject: seq_buf: Make trace_seq_putmem_hex() support data longer than 8 |
| |
| From: Yun Zhou <yun.zhou@windriver.com> |
| |
| commit 6a2cbc58d6c9d90cd74288cc497c2b45815bc064 upstream. |
| |
| Since the raw memory 'data' does not go forward, it will dump repeated |
| data if the data length is more than 8. If we want to dump longer data |
| blocks, we need to repeatedly call macro SEQ_PUT_HEX_FIELD. I think it |
| is a bit redundant, and multiple function calls also affect the performance. |
| |
| Link: https://lore.kernel.org/lkml/20210625122453.5e2fe304@oasis.local.home/ |
| Link: https://lkml.kernel.org/r/20210626032156.47889-2-yun.zhou@windriver.com |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 6d2289f3faa7 ("tracing: Make trace_seq_putmem_hex() more robust") |
| Signed-off-by: Yun Zhou <yun.zhou@windriver.com> |
| Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| lib/seq_buf.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/lib/seq_buf.c |
| +++ b/lib/seq_buf.c |
| @@ -243,12 +243,14 @@ int seq_buf_putmem_hex(struct seq_buf *s |
| break; |
| |
| /* j increments twice per loop */ |
| - len -= j / 2; |
| hex[j++] = ' '; |
| |
| seq_buf_putmem(s, hex, j); |
| if (seq_buf_has_overflowed(s)) |
| return -1; |
| + |
| + len -= start_len; |
| + data += start_len; |
| } |
| return 0; |
| } |