From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751533AbcF2QXH (ORCPT ); Wed, 29 Jun 2016 12:23:07 -0400 Received: from mga01.intel.com ([192.55.52.88]:24339 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751482AbcF2QXF (ORCPT ); Wed, 29 Jun 2016 12:23:05 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,547,1459839600"; d="scan'208";a="726905028" Message-ID: <1467217366.30123.334.camel@linux.intel.com> Subject: Re: [PATCH 1/2] lib: hexdump: use a look-up table to do hex_to_bin From: Andy Shevchenko To: zengzhaoxiu@163.com, linux-kernel@vger.kernel.org Cc: Zhaoxiu Zeng , Andrew Morton , Hidehiro Kawai , Michal Nazarewicz , Borislav Petkov , Michal Hocko , Rasmus Villemoes , Nicolas Iooss , "Steven Rostedt (Red Hat)" , Gustavo Padovan , Geert Uytterhoeven , Horacio Mijail Anton Quiles Date: Wed, 29 Jun 2016 19:22:46 +0300 In-Reply-To: <1467216957-58885-1-git-send-email-zengzhaoxiu@163.com> References: <1467216957-58885-1-git-send-email-zengzhaoxiu@163.com> Organization: Intel Finland Oy Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.20.3-1 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2016-06-30 at 00:15 +0800, zengzhaoxiu@163.com wrote: > From: Zhaoxiu Zeng > No way. At least commit message. And prerequisite is the performance / memory foot print tests. > Signed-off-by: Zhaoxiu Zeng > --- >  include/linux/kernel.h | 15 ++++++++++++++- >  lib/hexdump.c          | 36 +++++++++++++++++++----------------- >  2 files changed, 33 insertions(+), 18 deletions(-) > > diff --git a/include/linux/kernel.h b/include/linux/kernel.h > index 94aa10f..72a0432 100644 > --- a/include/linux/kernel.h > +++ b/include/linux/kernel.h > @@ -532,7 +532,20 @@ static inline char *hex_byte_pack_upper(char > *buf, u8 byte) >   return buf; >  } >   > -extern int hex_to_bin(char ch); > +extern const int8_t h2b_lut[]; > + > +/** > + * hex_to_bin - convert a hex digit to its real value > + * @ch: ascii character represents hex digit > + * > + * hex_to_bin() converts one hex digit to its actual value or -1 in > case of bad > + * input. > + */ > +static inline int hex_to_bin(char ch) > +{ > + return h2b_lut[(unsigned char)ch]; > +} > + >  extern int __must_check hex2bin(u8 *dst, const char *src, size_t > count); >  extern char *bin2hex(char *dst, const void *src, size_t count); >   > diff --git a/lib/hexdump.c b/lib/hexdump.c > index 992457b..878697f 100644 > --- a/lib/hexdump.c > +++ b/lib/hexdump.c > @@ -18,23 +18,25 @@ EXPORT_SYMBOL(hex_asc); >  const char hex_asc_upper[] = "0123456789ABCDEF"; >  EXPORT_SYMBOL(hex_asc_upper); >   > -/** > - * hex_to_bin - convert a hex digit to its real value > - * @ch: ascii character represents hex digit > - * > - * hex_to_bin() converts one hex digit to its actual value or -1 in > case of bad > - * input. > - */ > -int hex_to_bin(char ch) > -{ > - if ((ch >= '0') && (ch <= '9')) > - return ch - '0'; > - ch = tolower(ch); > - if ((ch >= 'a') && (ch <= 'f')) > - return ch - 'a' + 10; > - return -1; > -} > -EXPORT_SYMBOL(hex_to_bin); > +const int8_t h2b_lut[] = { > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > +  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, > -1, > + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, > -1, > +}; > +EXPORT_SYMBOL(h2b_lut); >   >  /** >   * hex2bin - convert an ascii hexadecimal string to its binary > representation -- Andy Shevchenko Intel Finland Oy