All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.