1. 25 Feb, 2017 2 commits
    • Sven Schmidt's avatar
      lib/lz4: remove back-compat wrappers · 69c78423
      Sven Schmidt authored
      Remove the functions introduced as wrappers for providing backwards
      compatibility to the prior LZ4 version.  They're not needed anymore
      since there's no callers left.
      
      Link: http://lkml.kernel.org/r/1486321748-19085-6-git-send-email-4sschmid@informatik.uni-hamburg.deSigned-off-by: default avatarSven Schmidt <4sschmid@informatik.uni-hamburg.de>
      Cc: Bongkyu Kim <bongkyu.kim@lge.com>
      Cc: Rui Salvaterra <rsalvaterra@gmail.com>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Herbert Xu <herbert@gondor.apana.org.au>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Anton Vorontsov <anton@enomsg.org>
      Cc: Colin Cross <ccross@android.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Tony Luck <tony.luck@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      69c78423
    • Sven Schmidt's avatar
      lib: update LZ4 compressor module · 4e1a33b1
      Sven Schmidt authored
      Patch series "Update LZ4 compressor module", v7.
      
      This patchset updates the LZ4 compression module to a version based on
      LZ4 v1.7.3 allowing to use the fast compression algorithm aka LZ4 fast
      which provides an "acceleration" parameter as a tradeoff between high
      compression ratio and high compression speed.
      
      We want to use LZ4 fast in order to support compression in lustre and
      (mostly, based on that) investigate data reduction techniques in behalf
      of storage systems.
      
      Also, it will be useful for other users of LZ4 compression, as with LZ4
      fast it is possible to enable applications to use fast and/or high
      compression depending on the usecase.  For instance, ZRAM is offering a
      LZ4 backend and could benefit from an updated LZ4 in the kernel.
      
      LZ4 homepage: http://www.lz4.org/
      LZ4 source repository: https://github.com/lz4/lz4 Source version: 1.7.3
      
      Benchmark (taken from [1], Core i5-4300U @1.9GHz):
      ----------------|--------------|----------------|----------
      Compressor      | Compression  | Decompression  | Ratio
      ----------------|--------------|----------------|----------
      memcpy          |  4200 MB/s   |  4200 MB/s     | 1.000
      LZ4 fast 50     |  1080 MB/s   |  2650 MB/s     | 1.375
      LZ4 fast 17     |   680 MB/s   |  2220 MB/s     | 1.607
      LZ4 fast 5      |   475 MB/s   |  1920 MB/s     | 1.886
      LZ4 default     |   385 MB/s   |  1850 MB/s     | 2.101
      
      [1] http://fastcompression.blogspot.de/2015/04/sampling-or-faster-lz4.html
      
      [PATCH 1/5] lib: Update LZ4 compressor module
      [PATCH 2/5] lib/decompress_unlz4: Change module to work with new LZ4 module version
      [PATCH 3/5] crypto: Change LZ4 modules to work with new LZ4 module version
      [PATCH 4/5] fs/pstore: fs/squashfs: Change usage of LZ4 to work with new LZ4 version
      [PATCH 5/5] lib/lz4: Remove back-compat wrappers
      
      This patch (of 5):
      
      Update the LZ4 kernel module to LZ4 v1.7.3 by Yann Collet.  The kernel
      module is inspired by the previous work by Chanho Min.  The updated LZ4
      module will not break existing code since the patchset contains
      appropriate changes.
      
      API changes:
      
      New method LZ4_compress_fast which differs from the variant available in
      kernel by the new acceleration parameter, allowing to trade compression
      ratio for more compression speed and vice versa.
      
      LZ4_decompress_fast is the respective decompression method, featuring a
      very fast decoder (multiple GB/s per core), able to reach RAM speed in
      multi-core systems.  The decompressor allows to decompress data
      compressed with LZ4 fast as well as the LZ4 HC (high compression)
      algorithm.
      
      Also the useful functions LZ4_decompress_safe_partial and
      LZ4_compress_destsize were added.  The latter reverses the logic by
      trying to compress as much data as possible from source to dest while
      the former aims to decompress partial blocks of data.
      
      A bunch of streaming functions were also added which allow
      compressig/decompressing data in multiple steps (so called "streaming
      mode").
      
      The methods lz4_compress and lz4_decompress_unknownoutputsize are now
      known as LZ4_compress_default respectivley LZ4_decompress_safe.  The old
      methods will be removed since there's no callers left in the code.
      
      [arnd@arndb.de: fix KERNEL_LZ4 support]
        Link: http://lkml.kernel.org/r/20170208211946.2839649-1-arnd@arndb.de
      [akpm@linux-foundation.org: simplify]
      [akpm@linux-foundation.org: fix the simplification]
      [4sschmid@informatik.uni-hamburg.de: fix performance regressions]
        Link: http://lkml.kernel.org/r/1486898178-17125-2-git-send-email-4sschmid@informatik.uni-hamburg.de
      [4sschmid@informatik.uni-hamburg.de: v8]
        Link: http://lkml.kernel.org/r/1487182598-15351-2-git-send-email-4sschmid@informatik.uni-hamburg.de
      Link: http://lkml.kernel.org/r/1486321748-19085-2-git-send-email-4sschmid@informatik.uni-hamburg.deSigned-off-by: default avatarSven Schmidt <4sschmid@informatik.uni-hamburg.de>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: Bongkyu Kim <bongkyu.kim@lge.com>
      Cc: Rui Salvaterra <rsalvaterra@gmail.com>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Herbert Xu <herbert@gondor.apana.org.au>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Anton Vorontsov <anton@enomsg.org>
      Cc: Colin Cross <ccross@android.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Tony Luck <tony.luck@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      4e1a33b1
  2. 13 Apr, 2016 2 commits
  3. 24 May, 2015 1 commit
  4. 25 Mar, 2015 1 commit
    • Rasmus Villemoes's avatar
      lib/lz4: Pull out constant tables · bea2b592
      Rasmus Villemoes authored
      There's no reason to allocate the dec{32,64}table on the stack; it
      just wastes a bunch of instructions setting them up and, of course,
      also consumes quite a bit of stack. Using size_t for such small
      integers is a little excessive.
      
      $ scripts/bloat-o-meter /tmp/built-in.o lib/built-in.o
      add/remove: 2/2 grow/shrink: 2/0 up/down: 1304/-1548 (-244)
      function                                     old     new   delta
      lz4_decompress_unknownoutputsize              55     718    +663
      lz4_decompress                                55     632    +577
      dec64table                                     -      32     +32
      dec32table                                     -      32     +32
      lz4_uncompress                               747       -    -747
      lz4_uncompress_unknownoutputsize             801       -    -801
      
      The now inlined lz4_uncompress functions used to have a stack
      footprint of 176 bytes (according to -fstack-usage); their inlinees
      have increased their stack use from 32 bytes to 48 and 80 bytes,
      respectively.
      Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bea2b592
  5. 16 Mar, 2015 1 commit
    • JeHyeon Yeon's avatar
      LZ4 : fix the data abort issue · d5e7cafd
      JeHyeon Yeon authored
      If the part of the compression data are corrupted, or the compression
      data is totally fake, the memory access over the limit is possible.
      
      This is the log from my system usning lz4 decompression.
         [6502]data abort, halting
         [6503]r0  0x00000000 r1  0x00000000 r2  0xdcea0ffc r3  0xdcea0ffc
         [6509]r4  0xb9ab0bfd r5  0xdcea0ffc r6  0xdcea0ff8 r7  0xdce80000
         [6515]r8  0x00000000 r9  0x00000000 r10 0x00000000 r11 0xb9a98000
         [6522]r12 0xdcea1000 usp 0x00000000 ulr 0x00000000 pc  0x820149bc
         [6528]spsr 0x400001f3
      and the memory addresses of some variables at the moment are
          ref:0xdcea0ffc, op:0xdcea0ffc, oend:0xdcea1000
      
      As you can see, COPYLENGH is 8bytes, so @ref and @op can access the momory
      over @oend.
      Signed-off-by: default avatarJeHyeon Yeon <tom.yeon@windriver.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d5e7cafd
  6. 03 Jul, 2014 1 commit
  7. 27 Jun, 2014 1 commit
  8. 23 Jun, 2014 1 commit
  9. 11 Sep, 2013 1 commit
  10. 23 Aug, 2013 1 commit
  11. 09 Jul, 2013 3 commits
    • Chanho Min's avatar
      lib: add lz4 compressor module · c72ac7a1
      Chanho Min authored
      This patchset is for supporting LZ4 compression and the crypto API using
      it.
      
      As shown below, the size of data is a little bit bigger but compressing
      speed is faster under the enabled unaligned memory access.  We can use
      lz4 de/compression through crypto API as well.  Also, It will be useful
      for another potential user of lz4 compression.
      
      lz4 Compression Benchmark:
      Compiler: ARM gcc 4.6.4
      ARMv7, 1 GHz based board
         Kernel: linux 3.4
         Uncompressed data Size: 101 MB
               Compressed Size  compression Speed
         LZO   72.1MB		  32.1MB/s, 33.0MB/s(UA)
         LZ4   75.1MB		  30.4MB/s, 35.9MB/s(UA)
         LZ4HC 59.8MB		   2.4MB/s,  2.5MB/s(UA)
      - UA: Unaligned memory Access support
      - Latest patch set for LZO applied
      
      This patch:
      
      Add support for LZ4 compression in the Linux Kernel.  LZ4 Compression APIs
      for kernel are based on LZ4 implementation by Yann Collet and were changed
      for kernel coding style.
      
      LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
      LZ4 source repository : http://code.google.com/p/lz4/
      svn revision : r90
      
      Two APIs are added:
      
      lz4_compress() support basic lz4 compression whereas lz4hc_compress()
      support high compression or CPU performance get lower but compression
      ratio get higher.  Also, we require the pre-allocated working memory with
      the defined size and destination buffer must be allocated with the size of
      lz4_compressbound.
      
      [akpm@linux-foundation.org: make lz4_compresshcctx() static]
      Signed-off-by: default avatarChanho Min <chanho.min@lge.com>
      Cc: "Darrick J. Wong" <djwong@us.ibm.com>
      Cc: Bob Pearson <rpearson@systemfabricworks.com>
      Cc: Richard Weinberger <richard@nod.at>
      Cc: Herbert Xu <herbert@gondor.hengli.com.au>
      Cc: Yann Collet <yann.collet.73@gmail.com>
      Cc: Kyungsik Lee <kyungsik.lee@lge.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c72ac7a1
    • Kyungsik Lee's avatar
      lib: add support for LZ4-compressed kernel · e76e1fdf
      Kyungsik Lee authored
      Add support for extracting LZ4-compressed kernel images, as well as
      LZ4-compressed ramdisk images in the kernel boot process.
      Signed-off-by: default avatarKyungsik Lee <kyungsik.lee@lge.com>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Florian Fainelli <florian@openwrt.org>
      Cc: Yann Collet <yann.collet.73@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e76e1fdf
    • Kyungsik Lee's avatar
      decompressor: add LZ4 decompressor module · cffb78b0
      Kyungsik Lee authored
      Add support for LZ4 decompression in the Linux Kernel.  LZ4 Decompression
      APIs for kernel are based on LZ4 implementation by Yann Collet.
      
      Benchmark Results(PATCH v3)
      Compiler: Linaro ARM gcc 4.6.2
      
      1. ARMv7, 1.5GHz based board
         Kernel: linux 3.4
         Uncompressed Kernel Size: 14MB
              Compressed Size  Decompression Speed
         LZO  6.7MB            20.1MB/s, 25.2MB/s(UA)
         LZ4  7.3MB            29.1MB/s, 45.6MB/s(UA)
      
      2. ARMv7, 1.7GHz based board
         Kernel: linux 3.7
         Uncompressed Kernel Size: 14MB
              Compressed Size  Decompression Speed
         LZO  6.0MB            34.1MB/s, 52.2MB/s(UA)
         LZ4  6.5MB            86.7MB/s
      - UA: Unaligned memory Access support
      - Latest patch set for LZO applied
      
      This patch set is for adding support for LZ4-compressed Kernel.  LZ4 is a
      very fast lossless compression algorithm and it also features an extremely
      fast decoder [1].
      
      But we have five of decompressors already and one question which does
      arise, however, is that of where do we stop adding new ones?  This issue
      had been discussed and came to the conclusion [2].
      
      Russell King said that we should have:
      
       - one decompressor which is the fastest
       - one decompressor for the highest compression ratio
       - one popular decompressor (eg conventional gzip)
      
      If we have a replacement one for one of these, then it should do exactly
      that: replace it.
      
      The benchmark shows that an 8% increase in image size vs a 66% increase
      in decompression speed compared to LZO(which has been known as the
      fastest decompressor in the Kernel).  Therefore the "fast but may not be
      small" compression title has clearly been taken by LZ4 [3].
      
      [1] http://code.google.com/p/lz4/
      [2] http://thread.gmane.org/gmane.linux.kbuild.devel/9157
      [3] http://thread.gmane.org/gmane.linux.kbuild.devel/9347
      
      LZ4 homepage: http://fastcompression.blogspot.com/p/lz4.html
      LZ4 source repository: http://code.google.com/p/lz4/Signed-off-by: default avatarKyungsik Lee <kyungsik.lee@lge.com>
      Signed-off-by: default avatarYann Collet <yann.collet.73@gmail.com>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Florian Fainelli <florian@openwrt.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      cffb78b0