Re: [PATCH 1/2] lib: Add lz4 compressor module

2013-04-26 Thread Andrew Morton
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

2013-04-25 Thread Chanho Min

 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

2013-04-25 Thread Stephen Rothwell
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

2013-04-22 Thread Geert Uytterhoeven
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

2013-04-22 Thread Andrew Morton
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