Hi Andy, On Mon, Sep 1, 2014 at 10:36 AM, Andy Shevchenko <andriy.shevche...@linux.intel.com> wrote: >> ... and extra copying for no good reason. Why not check that we have >> enough space in buffer and generate directly into it? See what e.g. >> seq_escape() is doing... > > What about this variant?
I think it needs a call to seq_set_overflow() in case the buffer is too small, so the caller will retry with a bigger buffer. > > @@ -794,6 +795,47 @@ void seq_pad(struct seq_file *m, char c) > } > EXPORT_SYMBOL(seq_pad); > > +/* Analogue of print_hex_dump() */ > +void seq_hex_dump(struct seq_file *m, const char *prefix_str, int > prefix_type, > + int rowsize, int groupsize, const void *buf, size_t len, > + bool ascii) > +{ > + const u8 *ptr = buf; > + int i, linelen, remaining = len; > + int ret; > + > + if (rowsize != 16 && rowsize != 32) > + rowsize = 16; > + > + for (i = 0; i < len; i += rowsize) { > + linelen = min(remaining, rowsize); > + remaining -= rowsize; > + > + ret = seq_printf(m, "%s", prefix_str); > + if (ret < 0) > + break; > + > + if (prefix_type == DUMP_PREFIX_ADDRESS) > + ret = seq_printf(m, "%p: ", ptr + i); > + else if (prefix_type == DUMP_PREFIX_OFFSET) > + ret = seq_printf(m, "%.8x: ", i); > + if (ret < 0) > + break; > + > + if (m->size < m->count + groupsize * 2 + 1) > + break; > + > + hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, > + m->buf + m->count, m->size - m->count, > + ascii); > + > + ret = seq_putc(m, '\n'); > + if (ret < 0) > + break; > + } > +} > +EXPORT_SYMBOL(seq_hex_dump); Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/