public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@zytor.com>
To: Alain Knaff <alain@knaff.lu>
Cc: linux-kernel@vger.kernel.org
Subject: Re: update8 [PATCH 2/5] init: bzip2 or lzma -compressed kernels and initrds
Date: Sun, 04 Jan 2009 15:08:12 -0800	[thread overview]
Message-ID: <4961415C.1050708@zytor.com> (raw)
In-Reply-To: <200901042146.n04LkHgP005837@hitchhiker.hitchhiker.org.lu.hitchhiker.org.lu>

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

Hi Alain,

Looking pretty good now.  The only issues that I see so far are:

- Putting the kernel compression selection in init/Kconfig isn't going
  to work too well, since it affects all architectures, and not all
  architectures even do their own decompression (for quite a few
  architectures it's the boot loader's responsibility.)

  I see two options here: either have this be parameterized by the arch
  Kconfig files, or simply move this chunk into arch/*/Kconfig as part
  of the arch-enablement patches.  The latter is probably the simplest,
  even if it means some replicated code.

  Let me know what you think -- I can do this pretty easily while
  importing, so you don't need to submit a full new patchset.

- I did a followon patch (attached) to change the ramdisk compression
  search to table driven.  Since I already did the followon patch, don't
  worry about it.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


[-- Attachment #2: 0003-init-use-a-table-to-search-for-initramfs-compressio.patch --]
[-- Type: text/x-patch, Size: 3804 bytes --]

>From 832edddc59b5f8d8243aca91a20fb55ed64d00fb Mon Sep 17 00:00:00 2001
From: H. Peter Anvin <hpa@zytor.com>
Date: Sun, 4 Jan 2009 14:42:52 -0800
Subject: [PATCH] init: use a table to search for initramfs compression formats

Impact: Code simplification

Instead of open-coding testing for initramfs compression formats, use
a table.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
---
 init/do_mounts_rd.c |   82 +++++++++++++++++++++-----------------------------
 1 files changed, 35 insertions(+), 47 deletions(-)

diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
index dcaeb1f..9c9d7db 100644
--- a/init/do_mounts_rd.c
+++ b/init/do_mounts_rd.c
@@ -43,13 +43,31 @@ static int __init crd_load(int in_fd, int out_fd, decompress_fn deco);
  * numbers could not be found.
  *
  * We currently check for the following magic numbers:
- * 	minix
- * 	ext2
+ *	minix
+ *	ext2
  *	romfs
  *	cramfs
- * 	gzip
+ *	gzip
  */
-static int __init 
+static const struct compress_format {
+	unsigned char magic[2];
+	const char *name;
+	decompress_fn decompressor;
+} compressed_formats[] = {
+#ifdef CONFIG_RD_GZIP
+	{ {037, 0213}, "gzip", gunzip },
+	{ {037, 0236}, "gzip", gunzip },
+#endif
+#ifdef CONFIG_RD_BZIP2
+	{ {0x42, 0x5a}, "bzip2", bunzip2 },
+#endif
+#ifdef CONFIG_RD_LZMA
+	{ {0x5d, 0x00}, "lzma", unlzma },
+#endif
+	{ {0, 0}, NULL, NULL }
+};
+
+static int __init
 identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
 {
 	const int size = 512;
@@ -59,6 +77,7 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
 	struct cramfs_super *cramfsb;
 	int nblocks = -1;
 	unsigned char *buf;
+	const struct compress_format *cf;
 
 	buf = kmalloc(size, GFP_KERNEL);
 	if (!buf)
@@ -71,52 +90,21 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
 	memset(buf, 0xe5, size);
 
 	/*
-	 * Read block 0 to test for gzipped kernel
+	 * Read block 0 to test for compressed kernel
 	 */
 	sys_lseek(fd, start_block * BLOCK_SIZE, 0);
 	sys_read(fd, buf, size);
 
-#ifdef CONFIG_RD_GZIP
-	/*
-	 * If it matches the gzip magic numbers, return 0
-	 */
-	if (buf[0] == 037 && ((buf[1] == 0213) || (buf[1] == 0236))) {
-		printk(KERN_NOTICE
-		       "RAMDISK: Compressed image found at block %d\n",
-		       start_block);
-		*decompressor = gunzip;
-		nblocks = 0;
-		goto done;
-	}
-#endif
-
-#ifdef CONFIG_RD_BZIP2
-	/*
-	 * If it matches the bzip2 magic numbers, return -1
-	 */
-	if (buf[0] == 0x42 && (buf[1] == 0x5a)) {
-		printk(KERN_NOTICE
-		       "RAMDISK: Bzipped image found at block %d\n",
-		       start_block);
-		*decompressor = bunzip2;
-		nblocks = 0;
-		goto done;
-	}
-#endif
-
-#ifdef CONFIG_RD_LZMA
-	/*
-	 * If it matches the lzma magic numbers, return -1
-	 */
-	if (buf[0] == 0x5d && (buf[1] == 0x00)) {
-		printk(KERN_NOTICE
-		       "RAMDISK: Lzma image found at block %d\n",
-		       start_block);
-		*decompressor = unlzma;
-		nblocks = 0;
-		goto done;
+	for (cf = compressed_formats; cf->decompressor; cf++) {
+		if (buf[0] == cf->magic[0] && buf[1] == cf->magic[1]) {
+			printk(KERN_NOTICE
+			       "RAMDISK: %s image found at block %d\n",
+			       cf->name, start_block);
+			*decompressor = cf->decompressor;
+			nblocks = 0;
+			goto done;
+		}
 	}
-#endif
 
 	/* romfs is at block zero too */
 	if (romfsb->word0 == ROMSB_WORD0 &&
@@ -165,7 +153,7 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
 	printk(KERN_NOTICE
 	       "RAMDISK: Couldn't find valid RAM disk image starting at %d.\n",
 	       start_block);
-	
+
 done:
 	sys_lseek(fd, start_block * BLOCK_SIZE, 0);
 	kfree(buf);
@@ -224,7 +212,7 @@ int __init rd_load_image(char *from)
 		       nblocks, rd_blocks);
 		goto done;
 	}
-		
+
 	/*
 	 * OK, time to copy in the data
 	 */
-- 
1.5.6.6


  reply	other threads:[~2009-01-04 23:08 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 [this message]
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
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=4961415C.1050708@zytor.com \
    --to=hpa@zytor.com \
    --cc=alain@knaff.lu \
    --cc=linux-kernel@vger.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