public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Alain Knaff <alain@knaff.lu>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>, Jan Engelhardt <jengelh@medozas.de>,
	the arch/x86 maintainers <x86@kernel.org>,
	linux-kernel@vger.kernel.org
Subject: Re: tip: bzip2/lzma now in tip:x86/setup-lzma
Date: Thu, 19 Feb 2009 21:11:09 +0100	[thread overview]
Message-ID: <499DBCDD.90806@knaff.lu> (raw)
In-Reply-To: <499BBD62.5090506@knaff.lu>

[-- Attachment #1: Type: text/plain, Size: 771 bytes --]

Alain Knaff wrote:
> hmmm, but on a second glance, there seems to be indeed an issue. When
> compiling it a _second time_, compilation will "succeed" but produce a
> bad kernel because the first attempt left an empty
> usr/initramfs_data.cpio.bz2 .
> 
> I'll look into it this evening, probably a case of "bad" failure
> recovery in the Makefile.
> 

Took me slightly longer than promised, attached is the patch.

It changes/fixes three things:
1. Fix a bug in decompress.c : only scanned until the first
non-configured compressor (with disastrous result if that was gzip)
2. Fix a bug in gen_initramfs_list.sh : in case of failure, it left
indeed an empty output file behind, messing up the next make.
3. Make builtin initramfs compression configurable

Regards,

Alain

[-- Attachment #2: 20090219.diff --]
[-- Type: text/x-diff, Size: 4918 bytes --]

This changes three things:
1. Fix a bug in decompress.c : only scanned until the first
non-configured compressor (with disastrous result if that was gzip)
2. Fix a bug in gen_initramfs_list.sh : in case of failure, it left an
empty output file behind, messing up the next make.
3. Make builtin initramfs compression configurable


Signed-off-by: Alain Knaff <alain@knaff.lu>

---

diff -purN base/lib/decompress.c i386/lib/decompress.c
--- base/lib/decompress.c	2009-02-18 07:59:07.000000000 +0100
+++ i386/lib/decompress.c	2009-02-19 20:56:07.000000000 +0100
@@ -43,7 +43,7 @@ decompress_fn decompress_method(const un
 	if (len < 2)
 		return NULL;	/* Need at least this much... */
 
-	for (cf = compressed_formats; cf->decompressor; cf++) {
+	for (cf = compressed_formats; cf->name; cf++) {
 		if (!memcmp(inbuf, cf->magic, 2))
 			break;
 
diff -purN base/scripts/gen_initramfs_list.sh i386/scripts/gen_initramfs_list.sh
--- base/scripts/gen_initramfs_list.sh	2009-02-18 07:59:07.000000000 +0100
+++ i386/scripts/gen_initramfs_list.sh	2009-02-19 07:52:57.000000000 +0100
@@ -292,7 +292,7 @@ if [ ! -z ${output_file} ]; then
 	if [ "${is_cpio_compressed}" = "compressed" ]; then
 		cat ${cpio_tfile} > ${output_file}
 	else
-		cat ${cpio_tfile} | ${compr}  - > ${output_file}
+		(cat ${cpio_tfile} | ${compr}  - > ${output_file}) || (rm ${output_file} ; false)
 	fi
 	[ -z ${cpio_file} ] && rm ${cpio_tfile}
 fi
diff -purN base/usr/Kconfig i386/usr/Kconfig
--- base/usr/Kconfig	2009-02-18 07:59:07.000000000 +0100
+++ i386/usr/Kconfig	2009-02-19 20:02:41.000000000 +0100
@@ -71,3 +71,65 @@ config RD_LZMA
 	help
 	  Support loading of a lzma encoded initial ramdisk or cpio buffer
 	  If unsure, say N.
+
+choice
+	prompt "Built-in initramfs compression mode"
+	help
+	  This setting is only meaningful if the INITRAMFS_SOURCE is
+	  set. It decides by which algorithm the INITRAMFS_SOURCE will
+	  be compressed.
+	  Several compression algorithms are available, which differ
+	  in efficiency, compression and decompression speed.
+	  Compression speed is only relevant when building a kernel.
+	  Decompression speed is relevant at each boot.
+
+	  If you have any problems with bzip2 or lzma compressed
+	  initramfs, mail me (Alain Knaff) <alain@knaff.lu>.
+
+	  High compression options are mostly useful for users who
+	  are low on disk space (embedded systems), but for whom ram
+	  size matters less.
+
+	  If in doubt, select 'gzip'
+
+config INITRAMFS_COMPRESSION_NONE
+	bool "None"
+	help
+	  Do not compress the built-in initramfs at all. This may
+	  sound wasteful in space, but, you should be aware that the
+	  built-in initramfs will be compressed at a later stage
+	  anyways along with the rest of the kernel, on those
+	  architectures that support this.
+	  However, not compressing the initramfs may lead to slightly
+	  higher memory consumption during a short time at boot, while
+	  both the cpio image and the unpacked filesystem image will
+	  be present in memory simultaneously
+
+config INITRAMFS_COMPRESSION_GZIP
+	bool "Gzip"
+	depends on RD_GZIP
+	help
+	  The old and tried gzip compression. Its compression ratio is
+	  the poorest among the 3 choices; however its speed (both
+	  compression and decompression) is the fastest.
+
+config INITRAMFS_COMPRESSION_BZIP2
+	bool "Bzip2"
+	depends on RD_BZIP2
+	help
+	  Its compression ratio and speed is intermediate.
+	  Decompression speed is slowest among the three.  The initramfs
+	  size is about 10% smaller with bzip2, in comparison to gzip.
+	  Bzip2 uses a large amount of memory. For modern kernels you
+	  will need at least 8MB RAM or more for booting.
+
+config INITRAMFS_COMPRESSION_LZMA
+	bool "LZMA"
+	depends on RD_LZMA
+	help
+	  The most recent compression algorithm.
+	  Its ratio is best, decompression speed is between the other
+	  two. Compression is slowest.	The initramfs size is about 33%
+	  smaller with LZMA in comparison to gzip.
+
+endchoice
diff -purN base/usr/Makefile i386/usr/Makefile
--- base/usr/Makefile	2009-02-18 07:59:07.000000000 +0100
+++ i386/usr/Makefile	2009-02-19 20:27:31.000000000 +0100
@@ -5,24 +5,18 @@
 klibcdirs:;
 PHONY += klibcdirs
 
-# Find out "preferred" ramdisk compressor. Order of preference is
-#  1. bzip2 efficient, and likely to be present
-#  2. gzip former default
-#  3. lzma
-#  4. none
 
-# None of the above
-suffix_y                   =
-
-# Lzma, but no gzip nor bzip2
-suffix_$(CONFIG_RD_LZMA)   = .lzma
+# No compression
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_NONE)   =
 
 # Gzip, but no bzip2
-suffix_$(CONFIG_RD_GZIP)   = .gz
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_GZIP)   = .gz
 
 # Bzip2
-suffix_$(CONFIG_RD_BZIP2)  = .bz2
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_BZIP2)  = .bz2
 
+# Lzma
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZMA)   = .lzma
 
 # Generate builtin.o based on initramfs_data.o
 obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data$(suffix_y).o

  parent reply	other threads:[~2009-02-19 20:11 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-04 21:46 update8 [PATCH 2/5] init: bzip2 or lzma -compressed kernels and initrds Alain Knaff
2009-01-04 23:08 ` H. Peter Anvin
2009-01-04 23:12   ` Alain Knaff
2009-01-04 23:14     ` H. Peter Anvin
2009-01-04 23:21       ` Alain Knaff
2009-01-04 23:58         ` tip: bzip2/lzma now in tip:x86/setup-lzma H. Peter Anvin
2009-01-05  3:03           ` Sam Ravnborg
2009-01-05  5:09             ` H. Peter Anvin
2009-01-05  5:42               ` Sam Ravnborg
     [not found]           ` <49615136.9080900@knaff.lu>
     [not found]             ` <4961580A.1020301@zytor.com>
     [not found]               ` <4961A816.40302@knaff.lu>
     [not found]                 ` <4961A997.10108@zytor.com>
     [not found]                   ` <4961ADC5.6030108@knaff.lu>
     [not found]                     ` <49622DE9.2010200@zytor.com>
     [not found]                       ` <496240DF.2010102@knaff.lu>
     [not found]                         ` <49624F6C.8010103@zytor.com>
     [not found]                           ` <4962522F.20804@knaff.lu>
     [not found]                             ` <496255B0.1050208@zytor.com>
2009-01-05 18:57                               ` Alain Knaff
2009-01-05 19:36                                 ` H. Peter Anvin
2009-01-05 22:07                                   ` Alain Knaff
2009-01-05 22:11                                     ` H. Peter Anvin
2009-01-05 22:12                                       ` Alain Knaff
2009-01-05 22:59                                         ` H. Peter Anvin
2009-01-06  7:09                                           ` Alain Knaff
2009-01-06  7:21                                             ` Willy Tarreau
2009-01-06  7:22                                             ` H. Peter Anvin
2009-01-06  7:30                                               ` Alain Knaff
2009-01-06 21:57                                           ` [bzip2/lzma] fix for built-in initramfs issue Alain Knaff
2009-01-06 22:48                                             ` H. Peter Anvin
2009-01-06 22:50                                               ` Alain Knaff
2009-01-06 22:58                                                 ` H. Peter Anvin
2009-01-06 22:58                                                   ` Alain Knaff
2009-01-06  7:18                                       ` tip: bzip2/lzma now in tip:x86/setup-lzma Jaswinder Singh Rajput
2009-01-06  7:24                                         ` H. Peter Anvin
2009-01-06  7:53                                           ` Jaswinder Singh Rajput
2009-01-06  8:27                                             ` H. Peter Anvin
2009-02-17 21:03           ` Jan Engelhardt
2009-02-17 21:05             ` H. Peter Anvin
2009-02-17 22:08               ` Ingo Molnar
2009-02-17 23:37                 ` Ingo Molnar
2009-02-18  0:52                   ` H. Peter Anvin
2009-02-18  7:48                     ` Alain Knaff
2009-02-18  9:20                       ` Jan Engelhardt
2009-02-18  9:40                         ` Alain Knaff
2009-02-18 10:29                           ` Jan Engelhardt
2009-02-18 19:53                             ` H. Peter Anvin
2009-02-19  6:14                             ` Alain Knaff
2009-02-19 14:46                               ` H. Peter Anvin
2009-02-19 15:41                                 ` Alain Knaff
2009-02-19 18:03                                   ` H. Peter Anvin
2009-02-18 19:52                       ` H. Peter Anvin
2009-02-18 21:09                         ` Willy Tarreau
2009-02-19 20:11                       ` Alain Knaff [this message]
2009-03-01 13:16                         ` Alain Knaff
2009-03-01 19:27                           ` H. Peter Anvin
2009-03-02  9:53                           ` Ingo Molnar
2009-03-02  9:54                             ` Alain Knaff
2009-03-02 10:22                               ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=499DBCDD.90806@knaff.lu \
    --to=alain@knaff.lu \
    --cc=hpa@zytor.com \
    --cc=jengelh@medozas.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox