Re: [PATCH 1/2] lib: Add lz4 compressor module
On Fri, 26 Apr 2013 15:51:05 +1000 Stephen Rothwell s...@canb.auug.org.au wrote: Hi, On Fri, 26 Apr 2013 14:02:01 +0900 Chanho Min chanho@lge.com wrote: @@ -0,0 +1,23 @@ +#include linux/kernel.h + +int __attribute__((weak)) __clzsi2(int val) We have __weak in linux/compiler.h And lib/clz.c needs a few more includes, for EXPORT_SYMBOL, BITS_PER_LONG maybe. Plus a changelog and a signed-off-by, please. -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] lib: Add lz4 compressor module
gcc seems to define __builtin_clz as __clzsi2 in some architecture. But, kernel doesn't link libgcc.a. If kernel should use gcc's built-in function without libgcc.a, do we need to port __clzsi2 to 'arch/*/lib/*'? This breaks alpha (gcc-4.4.4) as well. Can we please get this fixed promptly? __clzsi2 can be implemented by using generic functions. It can be overridden by linking arch-specific versions may not be implemented. does this way look acceptable? diff --git a/lib/Makefile b/lib/Makefile index af79e8c..e17b3ee 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -23,7 +23,7 @@ lib-y += kobject.o klist.o obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \ - gcd.o lcm.o list_sort.o uuid.o flex_array.o \ + gcd.o lcm.o list_sort.o uuid.o flex_array.o clz.o\ bsearch.o find_last_bit.o find_next_bit.o llist.o memweight.o kfifo.o obj-y += string_helpers.o obj-$(CONFIG_TEST_STRING_HELPERS) += test-string_helpers.o diff --git a/lib/clz.c b/lib/clz.c index e69de29..6794b83 100644 --- a/lib/clz.c +++ b/lib/clz.c @@ -0,0 +1,23 @@ +#include linux/kernel.h + +int __attribute__((weak)) __clzsi2(int val) +{ + return BITS_PER_LONG - fls(val); +} +EXPORT_SYMBOL(__clzsi2); + +#if BITS_PER_LONG == 32 +int __attribute__((weak)) __clzdi2(long val) +{ + return BITS_PER_LONG - fls((int)val); +} +EXPORT_SYMBOL(__clzdi2); +#elif BITS_PER_LONG == 64 +int __attribute__((weak)) __clzdi2(long val) +{ + return BITS_PER_LONG - fls64((u64)val); +} +EXPORT_SYMBOL(__clzdi2); +#else +#error BITS_PER_LONG not 32 or 64 +#endif -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] lib: Add lz4 compressor module
Hi, On Fri, 26 Apr 2013 14:02:01 +0900 Chanho Min chanho@lge.com wrote: @@ -0,0 +1,23 @@ +#include linux/kernel.h + +int __attribute__((weak)) __clzsi2(int val) We have __weak in linux/compiler.h -- Cheers, Stephen Rothwells...@canb.auug.org.au pgp21BCDTqop1.pgp Description: PGP signature
Re: [PATCH 1/2] lib: Add lz4 compressor module
On Mon, Apr 22, 2013 at 11:22 AM, Chanho Min chanho@lge.com wrote: +#define HTYPE const u8* + +#ifdef __BIG_ENDIAN +#define LZ4_NBCOMMONBYTES(val) (__builtin_clz(val) 3) +#else +#define LZ4_NBCOMMONBYTES(val) (__builtin_ctz(val) 3) +#endif It seems at least m68k and sparc don't have the __builtin_clz() functions: m68k-allmodconfig (http://kisskb.ellerman.id.au/kisskb/buildresult/8572593/): ERROR: __clzsi2 [lib/lz4/lz4hc_compress.ko] undefined! ERROR: __clzsi2 [lib/lz4/lz4_compress.ko] undefined! gcc seems to define __builtin_clz as __clzsi2 in some architecture. But, kernel doesn't link libgcc.a. If kernel should use gcc's built-in function without libgcc.a, do we need to port __clzsi2 to 'arch/*/lib/*'? That's another option. So far no one used __builtin_c[lt]z in generic code. We always used __fls and __ffs. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say programmer or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] lib: Add lz4 compressor module
On Mon, 22 Apr 2013 11:24:21 +0200 Geert Uytterhoeven ge...@linux-m68k.org wrote: On Mon, Apr 22, 2013 at 11:22 AM, Chanho Min chanho@lge.com wrote: +#define HTYPE const u8* + +#ifdef __BIG_ENDIAN +#define LZ4_NBCOMMONBYTES(val) (__builtin_clz(val) 3) +#else +#define LZ4_NBCOMMONBYTES(val) (__builtin_ctz(val) 3) +#endif It seems at least m68k and sparc don't have the __builtin_clz() functions: m68k-allmodconfig (http://kisskb.ellerman.id.au/kisskb/buildresult/8572593/): ERROR: __clzsi2 [lib/lz4/lz4hc_compress.ko] undefined! ERROR: __clzsi2 [lib/lz4/lz4_compress.ko] undefined! gcc seems to define __builtin_clz as __clzsi2 in some architecture. But, kernel doesn't link libgcc.a. If kernel should use gcc's built-in function without libgcc.a, do we need to port __clzsi2 to 'arch/*/lib/*'? That's another option. Without having seen the patch Yes, if we fix it this way then we also fix it for future callers of __builtin_clz(). -- To unsubscribe from this list: send the line unsubscribe linux-crypto in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html