[PATCH v2 4/7] lib/hexdump.c: Replace ascii bool in hex_dump_to_buffer with flags

Alastair D'Silva alastair at d-silva.org
Wed May 8 11:41:15 UTC 2019


> -----Original Message-----
> From: David Laight <David.Laight at ACULAB.COM>
> Sent: Wednesday, 8 May 2019 7:20 PM
> To: 'Alastair D'Silva' <alastair at au1.ibm.com>; alastair at d-silva.org
> Cc: Jani Nikula <jani.nikula at linux.intel.com>; Joonas Lahtinen
> <joonas.lahtinen at linux.intel.com>; Rodrigo Vivi <rodrigo.vivi at intel.com>;
> David Airlie <airlied at linux.ie>; Daniel Vetter <daniel at ffwll.ch>; Dan
> Carpenter <dan.carpenter at oracle.com>; Karsten Keil <isdn at linux-
> pingi.de>; Jassi Brar <jassisinghbrar at gmail.com>; Tom Lendacky
> <thomas.lendacky at amd.com>; David S. Miller <davem at davemloft.net>;
> Jose Abreu <Jose.Abreu at synopsys.com>; Kalle Valo
> <kvalo at codeaurora.org>; Stanislaw Gruszka <sgruszka at redhat.com>;
> Benson Leung <bleung at chromium.org>; Enric Balletbo i Serra
> <enric.balletbo at collabora.com>; James E.J. Bottomley
> <jejb at linux.ibm.com>; Martin K. Petersen <martin.petersen at oracle.com>;
> Greg Kroah-Hartman <gregkh at linuxfoundation.org>; Alexander Viro
> <viro at zeniv.linux.org.uk>; Petr Mladek <pmladek at suse.com>; Sergey
> Senozhatsky <sergey.senozhatsky at gmail.com>; Steven Rostedt
> <rostedt at goodmis.org>; Andrew Morton <akpm at linux-foundation.org>;
> intel-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org; linux-
> kernel at vger.kernel.org; netdev at vger.kernel.org;
> ath10k at lists.infradead.org; linux-wireless at vger.kernel.org; linux-
> scsi at vger.kernel.org; linux-fbdev at vger.kernel.org;
> devel at driverdev.osuosl.org; linux-fsdevel at vger.kernel.org
> Subject: RE: [PATCH v2 4/7] lib/hexdump.c: Replace ascii bool in
> hex_dump_to_buffer with flags
> 
> From: Alastair D'Silva
> > Sent: 08 May 2019 08:02
> > To: alastair at d-silva.org
> ...
> > --- a/include/linux/printk.h
> > +++ b/include/linux/printk.h
> > @@ -480,13 +480,13 @@ enum {
> >  	DUMP_PREFIX_OFFSET
> >  };
> >
> > -extern int hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
> > -			      int groupsize, char *linebuf, size_t linebuflen,
> > -			      bool ascii);
> > -
> >  #define HEXDUMP_ASCII			(1 << 0)
> >  #define HEXDUMP_SUPPRESS_REPEATED	(1 << 1)
> 
> These ought to be BIT(0) and BIT(1)

Thanks, I'll address that.

> 
> > +extern int hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
> > +			      int groupsize, char *linebuf, size_t linebuflen,
> > +			      u64 flags);
> 
> Why 'u64 flags' ?
> How many flags do you envisage ??
> Your HEXDUMP_ASCII (etc) flags are currently signed values and might get
> sign extended causing grief.
> 'unsigned int flags' is probably sufficient.

I was trying to avoid having to change the prototype again in the future, but it's not a big deal, if enough work goes in to require more than 32 bits, it can be updated at that point.

> 
> I've not really looked at the code, it seems OTT in places though.

I'll wait for more concrete criticisms here, this it a bit too vague to take any action on.

> If someone copies it somewhere where the performance matters (I've user
> space code which is dominated by its tracing!) then you don't want all the
> function calls and conditionals even if you want some of the functionality.

Calling hexdump (even in it's unaltered form) in performance critical code is always going to suck. As you mentioned before, it's all based around printf. A performance conscious user would be better off building their code around hex_asc_hi/lo instead (see lib/vsprintf.c:hex_string).

-- 
Alastair D'Silva           mob: 0423 762 819
skype: alastair_dsilva     msn: alastair at d-silva.org
blog: http://alastair.d-silva.org    Twitter: @EvilDeece





More information about the devel mailing list