Message ID | 20190410031720.11067-2-alastair@au1.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Hexdump enhancements | expand |
On Wed 2019-04-10 13:17:17, Alastair D'Silva wrote: > From: Alastair D'Silva <alastair@d-silva.org> > > With modern high resolution screens, we can display more data, which makes > life a bit easier when debugging. I have quite some doubts about this feature. We are talking about more than 256 characters per-line. I wonder if such a long line is really easier to read for a human. I am not expert but there is a reason why the standard is 80 characters per-line. I guess that anything above 100 characters is questionable. https://en.wikipedia.org/wiki/Line_length somehow confirms that. Second, if we take 8 pixels per-character. Then we need 2048 to show the 256 characters. It is more than HD. IMHO, there is still huge number of people that even do not have HD display, especially on a notebook. I am sorry but I am strongly against having this hardcoded anywhere. And I doubt that there will be enough users to complicate the code and make it configurable. Best Regards, Petr
> -----Original Message----- > From: Petr Mladek <pmladek@suse.com> > Sent: Friday, 12 April 2019 11:48 PM > To: Alastair D'Silva <alastair@au1.ibm.com> > Cc: alastair@d-silva.org; Jani Nikula <jani.nikula@linux.intel.com>; Joonas > Lahtinen <joonas.lahtinen@linux.intel.com>; Rodrigo Vivi > <rodrigo.vivi@intel.com>; David Airlie <airlied@linux.ie>; Daniel Vetter > <daniel@ffwll.ch>; Karsten Keil <isdn@linux-pingi.de>; Jassi Brar > <jassisinghbrar@gmail.com>; Tom Lendacky <thomas.lendacky@amd.com>; > David S. Miller <davem@davemloft.net>; Jose Abreu > <Jose.Abreu@synopsys.com>; Kalle Valo <kvalo@codeaurora.org>; > Stanislaw Gruszka <sgruszka@redhat.com>; Benson Leung > <bleung@chromium.org>; Enric Balletbo i Serra > <enric.balletbo@collabora.com>; James E.J. Bottomley > <jejb@linux.ibm.com>; Martin K. Petersen <martin.petersen@oracle.com>; > Greg Kroah-Hartman <gregkh@linuxfoundation.org>; Alexander Viro > <viro@zeniv.linux.org.uk>; Sergey Senozhatsky > <sergey.senozhatsky@gmail.com>; Steven Rostedt <rostedt@goodmis.org>; > Andrew Morton <akpm@linux-foundation.org>; intel- > gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; linux- > kernel@vger.kernel.org; netdev@vger.kernel.org; > ath10k@lists.infradead.org; linux-wireless@vger.kernel.org; linux- > scsi@vger.kernel.org; linux-fbdev@vger.kernel.org; > devel@driverdev.osuosl.org; linux-fsdevel@vger.kernel.org > Subject: Re: [PATCH 1/4] lib/hexdump.c: Allow 64 bytes per line > > On Wed 2019-04-10 13:17:17, Alastair D'Silva wrote: > > From: Alastair D'Silva <alastair@d-silva.org> > > > > With modern high resolution screens, we can display more data, which > > makes life a bit easier when debugging. > > I have quite some doubts about this feature. > > We are talking about more than 256 characters per-line. I wonder if such a > long line is really easier to read for a human. It's basically 2 separate panes of information side by side, the hexdump and the ASCII version. I'm using this myself when dealing with the pmem labels, and it works quite nicely. > > I am not expert but there is a reason why the standard is 80 characters per- > line. I guess that anything above 100 characters is questionable. > https://en.wikipedia.org/wiki/Line_length > somehow confirms that. > > Second, if we take 8 pixels per-character. Then we need > 2048 to show the 256 characters. It is more than HD. > IMHO, there is still huge number of people that even do not have HD display, > especially on a notebook. The intent is to make debugging easier when dealing with large chunks of binary data. I don't expect end users to see this output.
On Sat 2019-04-13 09:22:05, Alastair D'Silva wrote: > > -----Original Message----- > > From: Petr Mladek <pmladek@suse.com> > > Sent: Friday, 12 April 2019 11:48 PM > > To: Alastair D'Silva <alastair@au1.ibm.com> > > Cc: alastair@d-silva.org; Jani Nikula <jani.nikula@linux.intel.com>; > Joonas > > Lahtinen <joonas.lahtinen@linux.intel.com>; Rodrigo Vivi > > <rodrigo.vivi@intel.com>; David Airlie <airlied@linux.ie>; Daniel Vetter > > <daniel@ffwll.ch>; Karsten Keil <isdn@linux-pingi.de>; Jassi Brar > > <jassisinghbrar@gmail.com>; Tom Lendacky <thomas.lendacky@amd.com>; > > David S. Miller <davem@davemloft.net>; Jose Abreu > > <Jose.Abreu@synopsys.com>; Kalle Valo <kvalo@codeaurora.org>; > > Stanislaw Gruszka <sgruszka@redhat.com>; Benson Leung > > <bleung@chromium.org>; Enric Balletbo i Serra > > <enric.balletbo@collabora.com>; James E.J. Bottomley > > <jejb@linux.ibm.com>; Martin K. Petersen <martin.petersen@oracle.com>; > > Greg Kroah-Hartman <gregkh@linuxfoundation.org>; Alexander Viro > > <viro@zeniv.linux.org.uk>; Sergey Senozhatsky > > <sergey.senozhatsky@gmail.com>; Steven Rostedt <rostedt@goodmis.org>; > > Andrew Morton <akpm@linux-foundation.org>; intel- > > gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; linux- > > kernel@vger.kernel.org; netdev@vger.kernel.org; > > ath10k@lists.infradead.org; linux-wireless@vger.kernel.org; linux- > > scsi@vger.kernel.org; linux-fbdev@vger.kernel.org; > > devel@driverdev.osuosl.org; linux-fsdevel@vger.kernel.org > > Subject: Re: [PATCH 1/4] lib/hexdump.c: Allow 64 bytes per line > > > > On Wed 2019-04-10 13:17:17, Alastair D'Silva wrote: > > > From: Alastair D'Silva <alastair@d-silva.org> > > > > > > With modern high resolution screens, we can display more data, which > > > makes life a bit easier when debugging. > > > > I have quite some doubts about this feature. > > > > We are talking about more than 256 characters per-line. I wonder if such a > > long line is really easier to read for a human. > > It's basically 2 separate panes of information side by side, the hexdump and > the ASCII version. > > I'm using this myself when dealing with the pmem labels, and it works quite > nicely. I am sure that it works for you. But I do not believe that it would be useful in general. > > I am not expert but there is a reason why the standard is 80 characters > per- > > line. I guess that anything above 100 characters is questionable. > > https://en.wikipedia.org/wiki/Line_length > > somehow confirms that. > > > > Second, if we take 8 pixels per-character. Then we need > > 2048 to show the 256 characters. It is more than HD. > > IMHO, there is still huge number of people that even do not have HD > display, > > especially on a notebook. > > The intent is to make debugging easier when dealing with large chunks of > binary data. I don't expect end users to see this output. How is it supposed to be used then? Only by your temporary patches? Best Regards, Petr
<snip> > > > On Wed 2019-04-10 13:17:17, Alastair D'Silva wrote: > > > > From: Alastair D'Silva <alastair@d-silva.org> > > > > > > > > With modern high resolution screens, we can display more data, > > > > which makes life a bit easier when debugging. > > > > > > I have quite some doubts about this feature. > > > > > > We are talking about more than 256 characters per-line. I wonder if > > > such a long line is really easier to read for a human. > > > > It's basically 2 separate panes of information side by side, the > > hexdump and the ASCII version. > > > > I'm using this myself when dealing with the pmem labels, and it works > > quite nicely. > > I am sure that it works for you. But I do not believe that it would be useful in > general. I do, and I believe the choice of the output length should be in the hands of the caller. On further thought, it would make more sense to remove the hardcoded list of sizes and just enforce a power of 2. The function shouldn't dictate what the caller can and can't do beyond the technical limits of it's implementation. Other print/debug functions don't restrict the output size, and I can't see a good justification why hexdump should either. > > > I am not expert but there is a reason why the standard is 80 > > > characters > > per- > > > line. I guess that anything above 100 characters is questionable. > > > https://en.wikipedia.org/wiki/Line_length > > > somehow confirms that. > > > > > > Second, if we take 8 pixels per-character. Then we need > > > 2048 to show the 256 characters. It is more than HD. > > > IMHO, there is still huge number of people that even do not have HD > > display, > > > especially on a notebook. > > > > The intent is to make debugging easier when dealing with large chunks > > of binary data. I don't expect end users to see this output. > > How is it supposed to be used then? Only by your temporary patches? Let me rephrase that, I don't expect end users to *use* this data. Current usage of the hexdump functions are predominantly centred around logging and debugging, and clearly targeted at someone intimately familiar with the relevant subsystem. I expect future use would be similar. Debugging may be as part of active development, or from a log supplied from an end user. In either case, it should be up to the author (as a representative for the consumers of the data) to decide how it should be formatted.
From: Alastair D'Silva > Sent: 15 April 2019 11:29 ... > I do, and I believe the choice of the output length should be in the hands > of the caller. > > On further thought, it would make more sense to remove the hardcoded list of > sizes and just enforce a power of 2. The function shouldn't dictate what the > caller can and can't do beyond the technical limits of it's implementation. Why powers of two? You may want the length to match sizeof (struct foo). You might even want the address increment to be larger that the number of lines dumped. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
> From: Alastair D'Silva > > Sent: 15 April 2019 11:29 > ... > > I do, and I believe the choice of the output length should be in the > > hands of the caller. > > > > On further thought, it would make more sense to remove the hardcoded > > list of sizes and just enforce a power of 2. The function shouldn't > > dictate what the caller can and can't do beyond the technical limits of it's > implementation. > > Why powers of two? > You may want the length to match sizeof (struct foo). > You might even want the address increment to be larger that the number of > lines dumped. Good point, the base requirement is that it should be a multiple of groupsize.
diff --git a/lib/hexdump.c b/lib/hexdump.c index 81b70ed37209..b8a164814744 100644 --- a/lib/hexdump.c +++ b/lib/hexdump.c @@ -80,14 +80,14 @@ EXPORT_SYMBOL(bin2hex); * hex_dump_to_buffer - convert a blob of data to "hex ASCII" in memory * @buf: data blob to dump * @len: number of bytes in the @buf - * @rowsize: number of bytes to print per line; must be 16 or 32 + * @rowsize: number of bytes to print per line; must be 16, 32 or 64 * @groupsize: number of bytes to print at a time (1, 2, 4, 8; default = 1) * @linebuf: where to put the converted data * @linebuflen: total size of @linebuf, including space for terminating NUL * @ascii: include ASCII after the hex output * * hex_dump_to_buffer() works on one "line" of output at a time, i.e., - * 16 or 32 bytes of input data converted to hex + ASCII output. + * 16, 32 or 64 bytes of input data converted to hex + ASCII output. * * Given a buffer of u8 data, hex_dump_to_buffer() converts the input data * to a hex + ASCII dump at the supplied memory location. @@ -116,7 +116,7 @@ int hex_dump_to_buffer(const void *buf, size_t len, int rowsize, int groupsize, int ascii_column; int ret; - if (rowsize != 16 && rowsize != 32) + if (rowsize != 16 && rowsize != 32 && rowsize != 64) rowsize = 16; if (len > rowsize) /* limit to one line at a time */ @@ -216,7 +216,7 @@ EXPORT_SYMBOL(hex_dump_to_buffer); * caller supplies trailing spaces for alignment if desired * @prefix_type: controls whether prefix of an offset, address, or none * is printed (%DUMP_PREFIX_OFFSET, %DUMP_PREFIX_ADDRESS, %DUMP_PREFIX_NONE) - * @rowsize: number of bytes to print per line; must be 16 or 32 + * @rowsize: number of bytes to print per line; must be 16, 32 or 64 * @groupsize: number of bytes to print at a time (1, 2, 4, 8; default = 1) * @buf: data blob to dump * @len: number of bytes in the @buf @@ -227,7 +227,7 @@ EXPORT_SYMBOL(hex_dump_to_buffer); * leading prefix. * * print_hex_dump() works on one "line" of output at a time, i.e., - * 16 or 32 bytes of input data converted to hex + ASCII output. + * 16, 32 or 64 bytes of input data converted to hex + ASCII output. * print_hex_dump() iterates over the entire input @buf, breaking it into * "line size" chunks to format and print. * @@ -246,9 +246,9 @@ void print_hex_dump(const char *level, const char *prefix_str, int prefix_type, { const u8 *ptr = buf; int i, linelen, remaining = len; - unsigned char linebuf[32 * 3 + 2 + 32 + 1]; + unsigned char linebuf[64 * 3 + 2 + 64 + 1]; - if (rowsize != 16 && rowsize != 32) + if (rowsize != 16 && rowsize != 32 && rowsize != 64) rowsize = 16; for (i = 0; i < len; i += rowsize) {