mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-22 00:40:03 +00:00
![Richard Purdie](/assets/img/avatar_default.png)
Upgrade the zlib_inflate implementation in the kernel from a patched version 1.1.3/4 to a patched 1.2.3. The code in the kernel is about seven years old and I noticed that the external zlib library's inflate performance was significantly faster (~50%) than the code in the kernel on ARM (and faster again on x86_32). For comparison the newer deflate code is 20% slower on ARM and 50% slower on x86_32 but gives an approx 1% compression ratio improvement. I don't consider this to be an improvement for kernel use so have no plans to change the zlib_deflate code. Various changes have been made to the zlib code in the kernel, the most significant being the extra functions/flush option used by ppp_deflate. This update reimplements the features PPP needs to ensure it continues to work. This code has been tested on ARM under both JFFS2 (with zlib compression enabled) and ppp_deflate and on x86_32. JFFS2 sees an approx. 10% real world file read speed improvement. This patch also removes ZLIB_VERSION as it no longer has a correct value. We don't need version checks anyway as the kernel's module handling will take care of that for us. This removal is also more in keeping with the zlib author's wishes (http://www.zlib.net/zlib_faq.html#faq24) and I've added something to the zlib.h header to note its a modified version. Signed-off-by: Richard Purdie <rpurdie@rpsys.net> Acked-by: Joern Engel <joern@wh.fh-wedel.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
57 lines
1.7 KiB
C
57 lines
1.7 KiB
C
/* zconf.h -- configuration of the zlib compression library
|
|
* Copyright (C) 1995-1998 Jean-loup Gailly.
|
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
|
*/
|
|
|
|
/* @(#) $Id$ */
|
|
|
|
#ifndef _ZCONF_H
|
|
#define _ZCONF_H
|
|
|
|
/* The memory requirements for deflate are (in bytes):
|
|
(1 << (windowBits+2)) + (1 << (memLevel+9))
|
|
that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
|
|
plus a few kilobytes for small objects. For example, if you want to reduce
|
|
the default memory requirements from 256K to 128K, compile with
|
|
make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
|
|
Of course this will generally degrade compression (there's no free lunch).
|
|
|
|
The memory requirements for inflate are (in bytes) 1 << windowBits
|
|
that is, 32K for windowBits=15 (default value) plus a few kilobytes
|
|
for small objects.
|
|
*/
|
|
|
|
/* Maximum value for memLevel in deflateInit2 */
|
|
#ifndef MAX_MEM_LEVEL
|
|
# define MAX_MEM_LEVEL 8
|
|
#endif
|
|
|
|
/* Maximum value for windowBits in deflateInit2 and inflateInit2.
|
|
* WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
|
|
* created by gzip. (Files created by minigzip can still be extracted by
|
|
* gzip.)
|
|
*/
|
|
#ifndef MAX_WBITS
|
|
# define MAX_WBITS 15 /* 32K LZ77 window */
|
|
#endif
|
|
|
|
/* default windowBits for decompression. MAX_WBITS is for compression only */
|
|
#ifndef DEF_WBITS
|
|
# define DEF_WBITS MAX_WBITS
|
|
#endif
|
|
|
|
/* default memLevel */
|
|
#if MAX_MEM_LEVEL >= 8
|
|
# define DEF_MEM_LEVEL 8
|
|
#else
|
|
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
|
|
#endif
|
|
|
|
/* Type declarations */
|
|
|
|
typedef unsigned char Byte; /* 8 bits */
|
|
typedef unsigned int uInt; /* 16 bits or more */
|
|
typedef unsigned long uLong; /* 32 bits or more */
|
|
typedef void *voidp;
|
|
|
|
#endif /* _ZCONF_H */
|