wok-current diff linux-libre/stuff/003-squashfs-x86-support-xz-compressed-kernel.patch @ rev 15373
smx: apache 2.4 patch
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Thu Oct 17 16:55:23 2013 +0000 (2013-10-17) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/linux-libre/stuff/003-squashfs-x86-support-xz-compressed-kernel.patch Thu Oct 17 16:55:23 2013 +0000 1.3 @@ -0,0 +1,128 @@ 1.4 +From: Lasse Collin <lasse.collin@tukaani.org> 1.5 +Date: Thu, 2 Dec 2010 19:14:57 +0000 (+0200) 1.6 +Subject: x86: Support XZ-compressed kernel 1.7 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=d4ad78414e5312126127b1f88cdaf8584af3eef1 1.8 + 1.9 +x86: Support XZ-compressed kernel 1.10 + 1.11 +This integrates the XZ decompression code to the x86 1.12 +pre-boot code. 1.13 + 1.14 +mkpiggy.c is updated to reserve about 32 KiB more buffer safety 1.15 +margin for kernel decompression. It is done unconditionally for 1.16 +all decompressors to keep the code simpler. 1.17 + 1.18 +The XZ decompressor needs around 30 KiB of heap, so the heap size 1.19 +is increased to 32 KiB on both x86-32 and x86-64. 1.20 + 1.21 +Documentation/x86/boot.txt is updated to list the XZ magic number. 1.22 + 1.23 +With the x86 BCJ filter in XZ, XZ-compressed x86 kernel tends to be 1.24 +a few percent smaller than the equivalent LZMA-compressed kernel. 1.25 + 1.26 +Signed-off-by: Lasse Collin <lasse.collin@tukaani.org> 1.27 +--- 1.28 + 1.29 +diff --git a/Documentation/x86/boot.txt b/Documentation/x86/boot.txt 1.30 +index 30b43e1..3988cde 100644 1.31 +--- a/Documentation/x86/boot.txt 1.32 ++++ b/Documentation/x86/boot.txt 1.33 +@@ -621,9 +621,9 @@ Protocol: 2.08+ 1.34 + The payload may be compressed. The format of both the compressed and 1.35 + uncompressed data should be determined using the standard magic 1.36 + numbers. The currently supported compression formats are gzip 1.37 +- (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A) and LZMA 1.38 +- (magic number 5D 00). The uncompressed payload is currently always ELF 1.39 +- (magic number 7F 45 4C 46). 1.40 ++ (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA 1.41 ++ (magic number 5D 00), and XZ (magic number FD 37). The uncompressed 1.42 ++ payload is currently always ELF (magic number 7F 45 4C 46). 1.43 + 1.44 + Field name: payload_length 1.45 + Type: read 1.46 +diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig 1.47 +index cea0cd9..f3db0d7 100644 1.48 +--- a/arch/x86/Kconfig 1.49 ++++ b/arch/x86/Kconfig 1.50 +@@ -51,6 +51,7 @@ config X86 1.51 + select HAVE_KERNEL_GZIP 1.52 + select HAVE_KERNEL_BZIP2 1.53 + select HAVE_KERNEL_LZMA 1.54 ++ select HAVE_KERNEL_XZ 1.55 + select HAVE_KERNEL_LZO 1.56 + select HAVE_HW_BREAKPOINT 1.57 + select HAVE_MIXED_BREAKPOINTS_REGS 1.58 +diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile 1.59 +index 0c22955..09664ef 100644 1.60 +--- a/arch/x86/boot/compressed/Makefile 1.61 ++++ b/arch/x86/boot/compressed/Makefile 1.62 +@@ -4,7 +4,7 @@ 1.63 + # create a compressed vmlinux image from the original vmlinux 1.64 + # 1.65 + 1.66 +-targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o 1.67 ++targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o 1.68 + 1.69 + KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 1.70 + KBUILD_CFLAGS += -fno-strict-aliasing -fPIC 1.71 +@@ -49,12 +49,15 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE 1.72 + $(call if_changed,bzip2) 1.73 + $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE 1.74 + $(call if_changed,lzma) 1.75 ++$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE 1.76 ++ $(call if_changed,xzkern) 1.77 + $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE 1.78 + $(call if_changed,lzo) 1.79 + 1.80 + suffix-$(CONFIG_KERNEL_GZIP) := gz 1.81 + suffix-$(CONFIG_KERNEL_BZIP2) := bz2 1.82 + suffix-$(CONFIG_KERNEL_LZMA) := lzma 1.83 ++suffix-$(CONFIG_KERNEL_XZ) := xz 1.84 + suffix-$(CONFIG_KERNEL_LZO) := lzo 1.85 + 1.86 + quiet_cmd_mkpiggy = MKPIGGY $@ 1.87 +diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c 1.88 +index 8f7bef8..6d4cab7 100644 1.89 +--- a/arch/x86/boot/compressed/misc.c 1.90 ++++ b/arch/x86/boot/compressed/misc.c 1.91 +@@ -139,6 +139,10 @@ static int lines, cols; 1.92 + #include "../../../../lib/decompress_unlzma.c" 1.93 + #endif 1.94 + 1.95 ++#ifdef CONFIG_KERNEL_XZ 1.96 ++#include "../../../../lib/decompress_unxz.c" 1.97 ++#endif 1.98 ++ 1.99 + #ifdef CONFIG_KERNEL_LZO 1.100 + #include "../../../../lib/decompress_unlzo.c" 1.101 + #endif 1.102 +diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c 1.103 +index 5c22812..646aa78 100644 1.104 +--- a/arch/x86/boot/compressed/mkpiggy.c 1.105 ++++ b/arch/x86/boot/compressed/mkpiggy.c 1.106 +@@ -74,7 +74,7 @@ int main(int argc, char *argv[]) 1.107 + 1.108 + offs = (olen > ilen) ? olen - ilen : 0; 1.109 + offs += olen >> 12; /* Add 8 bytes for each 32K block */ 1.110 +- offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */ 1.111 ++ offs += 64*1024 + 128; /* Add 64K + 128 bytes slack */ 1.112 + offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ 1.113 + 1.114 + printf(".section \".rodata..compressed\",\"a\",@progbits\n"); 1.115 +diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h 1.116 +index 3b62ab5..5e1a2ee 100644 1.117 +--- a/arch/x86/include/asm/boot.h 1.118 ++++ b/arch/x86/include/asm/boot.h 1.119 +@@ -32,11 +32,7 @@ 1.120 + #define BOOT_HEAP_SIZE 0x400000 1.121 + #else /* !CONFIG_KERNEL_BZIP2 */ 1.122 + 1.123 +-#ifdef CONFIG_X86_64 1.124 +-#define BOOT_HEAP_SIZE 0x7000 1.125 +-#else 1.126 +-#define BOOT_HEAP_SIZE 0x4000 1.127 +-#endif 1.128 ++#define BOOT_HEAP_SIZE 0x8000 1.129 + 1.130 + #endif /* !CONFIG_KERNEL_BZIP2 */ 1.131 +