lib: create common ascii hex array
Subsystems (7)
PATCH 1/12 lib: create common ascii hex array
Add a common hex array in hexdump.c so everyone can use it.
Add a common hi/lo helper to avoid the shifting masking that is done to get the upper and lower nibbles of a byte value.
Pull the pack_hex_byte helper from kgdb as it is opencoded many places in the tree that will be consolidated.
---
Andrew, please drop the two patches in -mm titled:
lib-add-ascii-hex-helper-functions.patch
lib-add-ascii-hex-helper-functions-update.patch
As this patch series drops the _u8/u16/u32/u64 helpers that were close the simple_strtol etc. The remaining changes are all pretty trivial and provide a nice cleanup.
arch/sh/kernel/kgdb_stub.c | 8 -------- drivers/pnp/support.c | 8 ++++---- include/linux/kernel.h | 12 +++++++++++- kernel/kgdb.c | 8 -------- lib/hexdump.c | 7 +++++-- 5 files changed, 20 insertions(+), 23 deletions(-)
arch/sh/kernel/kgdb_stub.c +0 -8
@@ -330,14 +330,6 @@ static char *ebin_to_mem(const char *buf, char *mem, int count)return mem; } -/* Pack a hex byte */ -static char *pack_hex_byte (char *pkt,int byte) -{ - *pkt++ = hexchars[(byte >>4 ) &0xf ]; - *pkt++ = hexchars[(byte &0xf )]; -return pkt; -} -/* Scan for the start char '$', read the packet and check the checksum */ static void get_packet (char *buffer,int buflen) {
drivers/pnp/support.c +4 -4
@@ -45,10 +45,10 @@ void pnp_eisa_id_to_string(u32 id, char *str) str[0 ] ='A' + ((id >>26 ) &0x3f ) -1 ; str[1 ] ='A' + ((id >>21 ) &0x1f ) -1 ; str[2 ] ='A' + ((id >>16 ) &0x1f ) -1 ; - str[3 ] =hex_asc ((id >>12 ) &0xf ); - str[4 ] =hex_asc ((id >>8 ) &0xf ); - str[5 ] =hex_asc ((id >>4 ) &0xf ); - str[6 ] =hex_asc ((id >>0 ) &0xf ); + str[3 ] =hex_asc_hi (id >>8 ); + str[4 ] =hex_asc_lo (id >>8 ); + str[5 ] =hex_asc_hi (id); + str[6 ] =hex_asc_lo (id); str[7 ] ='\0' ; }
include/linux/kernel.h +11 -1
@@ -276,7 +276,17 @@ extern void print_hex_dump(const char *level, const char *prefix_str, const void *buf, size_t len, bool ascii);extern void print_hex_dump_bytes (const char *prefix_str,int prefix_type,const void *buf,size_t len); -#define hex_asc (x) "0123456789abcdef"[x] + +extern const char hex_asc[]; +#define hex_asc_lo (x) hex_asc[((x) & 0x0f)] +#define hex_asc_hi (x) hex_asc[((x) & 0xf0) >> 4] + +static inline char *pack_hex_byte (char *buf,u8 byte) +{ + *buf++ =hex_asc_hi (byte); + *buf++ =hex_asc_lo (byte); +return buf; +} #define pr_emerg(fmt, arg...) \ printk(KERN_EMERG fmt, ##arg)
kernel/kgdb.c +0 -8
@@ -346,14 +346,6 @@ static void put_packet(char *buffer) } } -static char *pack_hex_byte (char *pkt,u8 byte) -{ - *pkt++ = hexchars[byte >>4 ]; - *pkt++ = hexchars[byte &0xf ]; - -return pkt; -} -/* * Convert the memory pointed to by mem into hex, placing result in buf. * Return a pointer to the last char put in buf (null). May return an error.
lib/hexdump.c +5 -2
@@ -12,6 +12,9 @@#include <linux/kernel.h> #include <linux/module.h> +const char hex_asc[] ="0123456789abcdef" ; +EXPORT_SYMBOL (hex_asc); +/** * hex_dump_to_buffer - convert a blob of data to "hex ASCII" in memory * @buf: data blob to dump
@@ -93,8 +96,8 @@ void hex_dump_to_buffer(const void *buf, size_t len, int rowsize,for (j =0 ; (j < rowsize) && (j < len) && (lx +4 ) < linebuflen; j++) { ch = ptr[j]; - linebuf[lx++] =hex_asc (ch >>4 ); - linebuf[lx++] =hex_asc (ch &0x0f ); + linebuf[lx++] =hex_asc_hi (ch); + linebuf[lx++] =hex_asc_lo (ch); linebuf[lx++] =' ' ; } ascii_column =3 * rowsize +2 ;
Signature · 1 line
1.5.5.1.404.g981f6
Quoted 9 lines · Harvey Harrison
Add a common hex array in
hexdump.cso everyone can use it.Add a common hi/lo helper to avoid the shifting masking that is done to get the upper and lower nibbles of a byte value.
Pull the
pack_hex_bytehelper from kgdb as it is opencoded many places in the tree that will be consolidated.Signed-off-by Harvey Harrison <[email protected]>
Quoted 21 lines · Harvey Harrison
Add a common hex array in
hexdump.cso everyone can use it.Add a common hi/lo helper to avoid the shifting masking that is done to get the upper and lower nibbles of a byte value.
Pull the
pack_hex_bytehelper from kgdb as it is opencoded many places in the tree that will be consolidated.Signed-off-by Harvey Harrison <[email protected]>---
include/linux/kernel.h +1
-1@@ -276,7 +276,17 @@ extern void print_hex_dump(const char *level, const char *prefix_str, const void *buf, size_t len, bool ascii);extern void print_hex_dump_bytes (const char *prefix_str,int prefix_type,const void *buf,size_t len); -#define hex_asc (x) "0123456789abcdef"[x] +
include/linux/kernel.h extern void print_hex_dump(const char *level, const char *prefix_str, · line 289
Quoted 10 lines
include/linux/kernel.h +10
-0+extern const char hex_asc[]; +#define hex_asc_lo (x) hex_asc[((x) & 0x0f)] +#define hex_asc_hi (x) hex_asc[((x) & 0xf0) >> 4] + +static inline char *pack_hex_byte (char *buf,u8 byte) +{ + *buf++ =hex_asc_hi (byte); + *buf++ =hex_asc_lo (byte); +return buf; +}
Any idea how much this will bloat kernel once it has, lets say 100 users? 5k, 10k?
Signature · 1 line
i.
Quoted 13 lines · Ilpo Järvinen
Quoted 11 lines · Harvey Harrison
Add a common hex array in
hexdump.cso everyone can use it.Add a common hi/lo helper to avoid the shifting masking that is done to get the upper and lower nibbles of a byte value.
Pull the
pack_hex_bytehelper from kgdb as it is opencoded many places in the tree that will be consolidated.Signed-off-by Harvey Harrison <[email protected]>---
Quoted 16 lines
include/linux/kernel.h extern void print_hex_dump(const char *level, const char *prefix_str, · line 289
Quoted 12 lines
include/linux/kernel.h +11
-1-#define hex_asc (x) "0123456789abcdef"[x] + +extern const char hex_asc[]; +#define hex_asc_lo (x) hex_asc[((x) & 0x0f)] +#define hex_asc_hi (x) hex_asc[((x) & 0xf0) >> 4] + +static inline char *pack_hex_byte (char *buf,u8 byte) +{ + *buf++ =hex_asc_hi (byte); + *buf++ =hex_asc_lo (byte); +return buf; +}Any idea how much this will bloat kernel once it has, lets say 100 users? 5k, 10k?
No more than the existing users do open-coding the same thing all over the place. If it becomes a problem, this can be out-of-lined, but the savings are not much.
Harvey
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 9 lines · Harvey Harrison
Add a common hex array in
hexdump.cso everyone can use it.Add a common hi/lo helper to avoid the shifting masking that is done to get the upper and lower nibbles of a byte value.
Pull the
pack_hex_bytehelper from kgdb as it is opencoded many places in the tree that will be consolidated.Signed-off-by Harvey Harrison <[email protected]>
On Mon, May 12, 2008 at 12:05:34PM -0700, Harvey Harrison wrote:
Ralf