> -----Original Message-----
> From: David Laight <[email protected]>
> Sent: Wednesday, 8 May 2019 7:20 PM
> To: 'Alastair D'Silva' <[email protected]>; [email protected]
> Cc: Jani Nikula <[email protected]>; Joonas Lahtinen
> <[email protected]>; Rodrigo Vivi <[email protected]>;
> David Airlie <[email protected]>; Daniel Vetter <[email protected]>; Dan
> Carpenter <[email protected]>; Karsten Keil <isdn@linux-
> pingi.de>; Jassi Brar <[email protected]>; Tom Lendacky
> <[email protected]>; David S. Miller <[email protected]>;
> Jose Abreu <[email protected]>; Kalle Valo
> <[email protected]>; Stanislaw Gruszka <[email protected]>;
> Benson Leung <[email protected]>; Enric Balletbo i Serra
> <[email protected]>; James E.J. Bottomley
> <[email protected]>; Martin K. Petersen <[email protected]>;
> Greg Kroah-Hartman <[email protected]>; Alexander Viro
> <[email protected]>; Petr Mladek <[email protected]>; Sergey
> Senozhatsky <[email protected]>; Steven Rostedt
> <[email protected]>; Andrew Morton <[email protected]>;
> [email protected]; [email protected]; linux-
> [email protected]; [email protected];
> [email protected]; [email protected]; linux-
> [email protected]; [email protected];
> [email protected]; [email protected]
> 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: [email protected]
> ...
> > --- 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: [email protected]
blog: http://alastair.d-silva.org    Twitter: @EvilDeece



_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to