From fdf23ed283bc6ef5c25076ce2065f892120ff556 Mon Sep 17 00:00:00 2001 From: Phillip Lougher <phillip@lougher.demon.co.uk> Date: Thu, 22 Oct 2009 04:57:38 +0100 Subject: [PATCH] Squashfs: Make unlzma available to non initramfs/initrd code Add a config option DECOMPRESS_LZMA_NEEDED which allows subsystems to specify they need the unlzma code. Normally decompress_unlzma.c is compiled with __init and unlzma is not exported to modules. Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk> --- fs/squashfs/Kconfig | 1 + include/linux/decompress/bunzip2_mm.h | 12 ++++++++++++ include/linux/decompress/inflate_mm.h | 12 ++++++++++++ include/linux/decompress/mm.h | 3 --- include/linux/decompress/unlzma_mm.h | 20 ++++++++++++++++++++ lib/Kconfig | 3 +++ lib/decompress_bunzip2.c | 1 + lib/decompress_inflate.c | 1 + lib/decompress_unlzma.c | 5 ++++- 9 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 include/linux/decompress/bunzip2_mm.h create mode 100644 include/linux/decompress/inflate_mm.h create mode 100644 include/linux/decompress/unlzma_mm.h --- a/fs/squashfs/Kconfig +++ b/fs/squashfs/Kconfig @@ -30,6 +30,7 @@ config SQUASHFS_LZMA bool "Include support for LZMA compressed file systems" depends on SQUASHFS select DECOMPRESS_LZMA + select DECOMPRESS_LZMA_NEEDED config SQUASHFS_EMBEDDED --- /dev/null +++ b/include/linux/decompress/bunzip2_mm.h @@ -0,0 +1,12 @@ +#ifndef BUNZIP2_MM_H +#define BUNZIP2_MM_H + +#ifdef STATIC +/* Code active when included from pre-boot environment: */ +#define INIT +#else +/* Compile for initramfs/initrd code only */ +#define INIT __init +#endif + +#endif --- /dev/null +++ b/include/linux/decompress/inflate_mm.h @@ -0,0 +1,12 @@ +#ifndef INFLATE_MM_H +#define INFLATE_MM_H + +#ifdef STATIC +/* Code active when included from pre-boot environment: */ +#define INIT +#else +/* Compile for initramfs/initrd code only */ +#define INIT __init +#endif + +#endif --- a/include/linux/decompress/mm.h +++ b/include/linux/decompress/mm.h @@ -53,8 +53,6 @@ static void free(void *where) #define set_error_fn(x) -#define INIT - #else /* STATIC */ /* Code active when compiled standalone for use when loading ramdisk: */ @@ -77,7 +75,6 @@ static void free(void *where) static void(*error)(char *m); #define set_error_fn(x) error = x; -#define INIT __init #define STATIC #include <linux/init.h> --- /dev/null +++ b/include/linux/decompress/unlzma_mm.h @@ -0,0 +1,20 @@ +#ifndef UNLZMA_MM_H +#define UNLZMA_MM_H + +#ifdef STATIC + +/* Code active when included from pre-boot environment: */ +#define INIT + +#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED) + +/* Make it available to non initramfs/initrd code */ +#define INIT +#include <linux/module.h> +#else + +/* Compile for initramfs/initrd code only */ +#define INIT __init +#endif + +#endif --- a/lib/Kconfig +++ b/lib/Kconfig @@ -121,6 +121,9 @@ config DECOMPRESS_LZO select LZO_DECOMPRESS tristate +config DECOMPRESS_LZMA_NEEDED + boolean + # # Generic allocator support is selected if needed # --- a/lib/decompress_bunzip2.c +++ b/lib/decompress_bunzip2.c @@ -52,6 +52,7 @@ #include <linux/slab.h> #endif /* STATIC */ +#include <linux/decompress/bunzip2_mm.h> #include <linux/decompress/mm.h> #ifndef INT_MAX --- a/lib/decompress_inflate.c +++ b/lib/decompress_inflate.c @@ -23,6 +23,7 @@ #endif /* STATIC */ +#include <linux/decompress/inflate_mm.h> #include <linux/decompress/mm.h> #define GZIP_IOBUF_SIZE (16*1024) --- a/lib/decompress_unlzma.c +++ b/lib/decompress_unlzma.c @@ -36,6 +36,7 @@ #include <linux/slab.h> #endif /* STATIC */ +#include <linux/decompress/unlzma_mm.h> #include <linux/decompress/mm.h> #define MIN(a, b) (((a) < (b)) ? (a) : (b)) @@ -531,7 +532,7 @@ static inline void INIT process_bit1(str -STATIC inline int INIT unlzma(unsigned char *buf, int in_len, +STATIC int INIT unlzma(unsigned char *buf, int in_len, int(*fill)(void*, unsigned int), int(*flush)(void*, unsigned int), unsigned char *output, @@ -664,4 +665,6 @@ STATIC int INIT decompress(unsigned char { return unlzma(buf, in_len - 4, fill, flush, output, posp, error_fn); } +#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED) +EXPORT_SYMBOL(unlzma); #endif