Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH] Revert "init/Kconfig: add option to disable kernel compression"

8 views
Skip to first unread message

H. Peter Anvin

unread,
Nov 15, 2013, 12:50:02 AM11/15/13
to
From: "H. Peter Anvin" <h...@zytor.com>

This reverts commit 69f0554ec261fd686ac7fa1c598cc9eb27b83a80.

This patch breaks randconfig on at least the x86-64 architecture, and
most likely on others. There is work underway to support uncompressed
kernels in a generic way, but it looks like it will amount to
rewriting the support from scratch; see the LKML thread in the Link:
for info.

Therefore, revert this change and wait for the fix.

Reported-by: Pavel Roskin <pro...@gnu.org>
Cc: Christian Ruppert <christia...@abilis.com>
Cc: Andrew Morton <ak...@linux-foundation.org>
Link: http://lkml.kernel.org/r/20131113113418.167b8ffd@IRBT4585
Signed-off-by: H. Peter Anvin <h...@zytor.com>
---
init/Kconfig | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/init/Kconfig b/init/Kconfig
index 5496f307988e..bc8911fab28e 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -118,6 +118,7 @@ config HAVE_KERNEL_LZ4
choice
prompt "Kernel compression mode"
default KERNEL_GZIP
+ depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4
help
The linux kernel is a kind of self-extracting executable.
Several compression algorithms are available, which differ
@@ -136,13 +137,6 @@ choice

If in doubt, select 'gzip'

-config KERNEL_UNCOMPRESSED
- bool "No compression"
- help
- No compression at all. The kernel is huge but the compression and
- decompression times are zero.
- This is usually not what you want.
-
config KERNEL_GZIP
bool "Gzip"
depends on HAVE_KERNEL_GZIP
--
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Christian Ruppert

unread,
Nov 15, 2013, 12:00:02 PM11/15/13
to
Some architectures with self-decompressing kernel images did not compile
with commit 69f0554ec261fd686ac7fa1c598cc9eb27b83a80 because they don't
provide a non-decompression mechanism for uncompressed kernels.

Rectify this problem by allowing uncompressed kernels only for architectures
which explicitly state they support them.

Signed-off-by: Christian Ruppert <christia...@abilis.com>
---
arch/arc/Kconfig | 2 ++
init/Kconfig | 5 +++++
2 files changed, 7 insertions(+)

diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index 2ee0c9b..15f4c3d 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -21,6 +21,8 @@ config ARC
select HAVE_ARCH_KGDB
select HAVE_ARCH_TRACEHOOK
select HAVE_IOREMAP_PROT
+ select HAVE_KERNEL_UNCOMPRESSED
+ select HAVE_KERNEL_GZIP
select HAVE_KPROBES
select HAVE_KRETPROBES
select HAVE_MEMBLOCK
diff --git a/init/Kconfig b/init/Kconfig
index 5496f30..d4baf2e 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -97,6 +97,9 @@ config LOCALVERSION_AUTO

which is done within the script "scripts/setlocalversion".)

+config HAVE_KERNEL_UNCOMPRESSED
+ bool
+
config HAVE_KERNEL_GZIP
bool

@@ -118,6 +121,7 @@ config HAVE_KERNEL_LZ4
choice
prompt "Kernel compression mode"
default KERNEL_GZIP
+ depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_UNCOMPRESSED
help
The linux kernel is a kind of self-extracting executable.
Several compression algorithms are available, which differ
@@ -138,6 +142,7 @@ choice

config KERNEL_UNCOMPRESSED
bool "No compression"
+ depends on HAVE_KERNEL_UNCOMPRESSED
help
No compression at all. The kernel is huge but the compression and
decompression times are zero.
--
1.8.4

Vineet Gupta

unread,
Nov 16, 2013, 4:50:02 AM11/16/13
to
On 11/15/2013 10:21 PM, Christian Ruppert wrote:
> Some architectures with self-decompressing kernel images did not compile
> with commit 69f0554ec261fd686ac7fa1c598cc9eb27b83a80 because they don't
> provide a non-decompression mechanism for uncompressed kernels.
>
> Rectify this problem by allowing uncompressed kernels only for architectures
> which explicitly state they support them.
>
> Signed-off-by: Christian Ruppert <christia...@abilis.com>


Acked-by: Vineet Gupta <vgu...@synopsys.com>

Christian Ruppert

unread,
Nov 18, 2013, 4:50:03 AM11/18/13
to
On Sat, Nov 16, 2013 at 03:12:56PM +0530, Vineet Gupta wrote:
> On 11/15/2013 10:21 PM, Christian Ruppert wrote:
> > Some architectures with self-decompressing kernel images did not compile
> > with commit 69f0554ec261fd686ac7fa1c598cc9eb27b83a80 because they don't
> > provide a non-decompression mechanism for uncompressed kernels.
> >
> > Rectify this problem by allowing uncompressed kernels only for architectures
> > which explicitly state they support them.
> >
> > Signed-off-by: Christian Ruppert <christia...@abilis.com>
> Acked-by: Vineet Gupta <vgu...@synopsys.com>

Looks like the revert was applied to main line (and not this fix). In
the follow-up the complete (fixed) patch set rebased on the latest main
line: First patch for Kconfig/ARC and as requested a cleaned up second
patch for x86. I could only test the second patch on one physical
machine and one VM so some more testing might be required on x86.

Greetings,
Christian

Christian Ruppert

unread,
Nov 18, 2013, 5:00:02 AM11/18/13
to
Some ARC users say they can boot faster with without kernel compression.
This probably depends on things like the FLASH chip they use etc.

Until now, kernel compression can only be disabled by removing "select
HAVE_<compression>" lines from the architecture Kconfig. So add the
Kconfig logic to permit disabling of kernel compression.

Signed-off-by: Christian Ruppert <christia...@abilis.com>
---
arch/arc/Kconfig | 2 ++
init/Kconfig | 13 ++++++++++++-
2 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index 2ee0c9b..15f4c3d 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -21,6 +21,8 @@ config ARC
select HAVE_ARCH_KGDB
select HAVE_ARCH_TRACEHOOK
select HAVE_IOREMAP_PROT
+ select HAVE_KERNEL_UNCOMPRESSED
+ select HAVE_KERNEL_GZIP
select HAVE_KPROBES
select HAVE_KRETPROBES
select HAVE_MEMBLOCK
diff --git a/init/Kconfig b/init/Kconfig
index 3fc8a2f..a21e94b 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -97,6 +97,9 @@ config LOCALVERSION_AUTO

which is done within the script "scripts/setlocalversion".)

+config HAVE_KERNEL_UNCOMPRESSED
+ bool
+
config HAVE_KERNEL_GZIP
bool

@@ -118,7 +121,7 @@ config HAVE_KERNEL_LZ4
choice
prompt "Kernel compression mode"
default KERNEL_GZIP
- depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4
+ depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_UNCOMPRESSED
help
The linux kernel is a kind of self-extracting executable.
Several compression algorithms are available, which differ
@@ -137,6 +140,14 @@ choice

If in doubt, select 'gzip'

+config KERNEL_UNCOMPRESSED
+ bool "No compression"
+ depends on HAVE_KERNEL_UNCOMPRESSED
+ help
+ No compression at all. The kernel is huge but the compression and
+ decompression times are zero.
+ This is usually not what you want.
+
config KERNEL_GZIP
bool "Gzip"
depends on HAVE_KERNEL_GZIP
--
1.7.1

Christian Ruppert

unread,
Nov 18, 2013, 5:00:03 AM11/18/13
to
Signed-off-by: Christian Ruppert <christia...@abilis.com>
---
arch/x86/Kconfig | 1 +
arch/x86/boot/compressed/Makefile | 14 ++++++------
arch/x86/boot/compressed/misc.c | 4 +++
lib/decompress_copy.c | 44 +++++++++++++++++++++++++++++++++++++
4 files changed, 56 insertions(+), 7 deletions(-)
create mode 100644 lib/decompress_copy.c

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index e903c71..009349f 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -62,6 +62,7 @@ config X86
select USER_STACKTRACE_SUPPORT
select HAVE_REGS_AND_STACK_ACCESS_API
select HAVE_DMA_API_DEBUG
+ select HAVE_KERNEL_UNCOMPRESSED
select HAVE_KERNEL_GZIP
select HAVE_KERNEL_BZIP2
select HAVE_KERNEL_LZMA
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index dcd90df..f65e444 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -67,16 +67,16 @@ $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
$(call if_changed,lz4)

-suffix-$(CONFIG_KERNEL_GZIP) := gz
-suffix-$(CONFIG_KERNEL_BZIP2) := bz2
-suffix-$(CONFIG_KERNEL_LZMA) := lzma
-suffix-$(CONFIG_KERNEL_XZ) := xz
-suffix-$(CONFIG_KERNEL_LZO) := lzo
-suffix-$(CONFIG_KERNEL_LZ4) := lz4
+suffix-$(CONFIG_KERNEL_GZIP) := .gz
+suffix-$(CONFIG_KERNEL_BZIP2) := .bz2
+suffix-$(CONFIG_KERNEL_LZMA) := .lzma
+suffix-$(CONFIG_KERNEL_XZ) := .xz
+suffix-$(CONFIG_KERNEL_LZO) := .lzo
+suffix-$(CONFIG_KERNEL_LZ4) := .lz4

quiet_cmd_mkpiggy = MKPIGGY $@
cmd_mkpiggy = $(obj)/mkpiggy $< > $@ || ( rm -f $@ ; false )

targets += piggy.S
-$(obj)/piggy.S: $(obj)/vmlinux.bin.$(suffix-y) $(obj)/mkpiggy FORCE
+$(obj)/piggy.S: $(obj)/vmlinux.bin$(suffix-y) $(obj)/mkpiggy FORCE
$(call if_changed,mkpiggy)
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
index 434f077..c210314 100644
--- a/arch/x86/boot/compressed/misc.c
+++ b/arch/x86/boot/compressed/misc.c
@@ -149,6 +149,10 @@ static int lines, cols;
#include "../../../../lib/decompress_unlz4.c"
#endif

+#ifdef CONFIG_KERNEL_UNCOMPRESSED
+#include "../../../../lib/decompress_copy.c"
+#endif
+
static void scroll(void)
{
int i;
diff --git a/lib/decompress_copy.c b/lib/decompress_copy.c
new file mode 100644
index 0000000..109ef22
--- /dev/null
+++ b/lib/decompress_copy.c
@@ -0,0 +1,44 @@
+#include <linux/decompress/mm.h>
+
+#define NOZIP_BUFSZ (16 * 1024)
+STATIC int INIT nozip(unsigned char *buf, int len,
+ int(*fill)(void*, unsigned int),
+ int(*flush)(void*, unsigned int),
+ unsigned char *outbuf,
+ int *pos,
+ void(*error)(char *x))
+{
+ char *b;
+
+ if (buf)
+ b = buf;
+ else
+ b = malloc(NOZIP_BUFSZ);
+
+ if (!b) {
+ error("Out of memory while allocating buffer");
+ return -1;
+ }
+
+ if (flush) {
+ if (!len)
+ len = fill(b, NOZIP_BUFSZ);
+
+ len = flush(b, len);
+ } else {
+ if (!len)
+ len = fill(outbuf, NOZIP_BUFSZ);
+ else
+ memcpy(outbuf, b, len);
+ }
+
+ if (pos)
+ *pos = len;
+
+ if (!buf)
+ free(b);
+
+ return 0;
+}
+
+#define decompress nozip
--
1.7.1

Borislav Petkov

unread,
Nov 18, 2013, 6:30:02 AM11/18/13
to
On Mon, Nov 18, 2013 at 10:51:51AM +0100, Christian Ruppert wrote:

How about a commit message ... somewhere around here would be nice, for
example :)

> Signed-off-by: Christian Ruppert <christia...@abilis.com>
> ---
> arch/x86/Kconfig | 1 +
> arch/x86/boot/compressed/Makefile | 14 ++++++------
> arch/x86/boot/compressed/misc.c | 4 +++
> lib/decompress_copy.c | 44 +++++++++++++++++++++++++++++++++++++
> 4 files changed, 56 insertions(+), 7 deletions(-)
> create mode 100644 lib/decompress_copy.c

--
Regards/Gruss,
Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

Christian Ruppert

unread,
Nov 18, 2013, 8:50:02 AM11/18/13
to
There seems to be some interest to enable uncompressed kernels also for x86
in addition to (embedded) ARC platforms.

Add the code to support uncompressed kernels to lib/, select the respective
Kconfig options for the x86 architecture and use this code in the x86 kernel
self-decompressor.

Signed-off-by: Christian Ruppert <christia...@abilis.com>
---
arch/x86/Kconfig | 1 +
arch/x86/boot/compressed/Makefile | 14 ++++++------
arch/x86/boot/compressed/misc.c | 4 +++
lib/decompress_copy.c | 44 +++++++++++++++++++++++++++++++++++++
4 files changed, 56 insertions(+), 7 deletions(-)
create mode 100644 lib/decompress_copy.c

Christian Ruppert

unread,
Dec 16, 2013, 4:10:02 AM12/16/13
to
On Mon, Nov 18, 2013 at 02:48:30PM +0100, Christian Ruppert wrote:
> There seems to be some interest to enable uncompressed kernels also for x86
> in addition to (embedded) ARC platforms.
>
> Add the code to support uncompressed kernels to lib/, select the respective
> Kconfig options for the x86 architecture and use this code in the x86 kernel
> self-decompressor.

Any news on this? Was someone able to take a look at / test this patch?
I have given it some more testing and encountered no issues so far.

Greetings,
Christian
0 new messages