From: Nick Terrell <nickrterrell@gmail.com>
To: Borislav Petkov <bp@alien8.de>, Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org, Chris Mason <clm@fb.com>,
linux-kbuild@vger.kernel.org, x86@kernel.org,
gregkh@linuxfoundation.org, Petr Malat <oss@malat.biz>,
Kees Cook <keescook@chromium.org>,
Kernel Team <Kernel-team@fb.com>,
Nick Terrell <nickrterrell@gmail.com>,
Adam Borowski <kilobyte@angband.pl>,
Patrick Williams <patrickw3@fb.com>,
rmikey@fb.com, mingo@kernel.org,
Patrick Williams <patrick@stwcx.xyz>,
Sedat Dilek <sedat.dilek@gmail.com>,
Norbert Lange <nolange79@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Nick Terrell <terrelln@fb.com>
Subject: [PATCH v6 4/8] init: add support for zstd compressed kernel
Date: Mon, 6 Jul 2020 20:46:00 -0700 [thread overview]
Message-ID: <20200707034604.1539157-5-nickrterrell@gmail.com> (raw)
In-Reply-To: <20200707034604.1539157-1-nickrterrell@gmail.com>
From: Nick Terrell <terrelln@fb.com>
* Adds the zstd cmd to scripts/Makefile.lib
* Adds the HAVE_KERNEL_ZSTD and KERNEL_ZSTD options
Architecture specific support is still needed for decompression.
Reviewed-by: Kees Cook <keescook@chromium.org>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Terrell <terrelln@fb.com>
---
init/Kconfig | 15 ++++++++++++++-
scripts/Makefile.lib | 15 +++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/init/Kconfig b/init/Kconfig
index 0498af567f70..8d99f0c5e240 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -191,13 +191,16 @@ config HAVE_KERNEL_LZO
config HAVE_KERNEL_LZ4
bool
+config HAVE_KERNEL_ZSTD
+ bool
+
config HAVE_KERNEL_UNCOMPRESSED
bool
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
+ depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_ZSTD || HAVE_KERNEL_UNCOMPRESSED
help
The linux kernel is a kind of self-extracting executable.
Several compression algorithms are available, which differ
@@ -276,6 +279,16 @@ config KERNEL_LZ4
is about 8% bigger than LZO. But the decompression speed is
faster than LZO.
+config KERNEL_ZSTD
+ bool "ZSTD"
+ depends on HAVE_KERNEL_ZSTD
+ help
+ ZSTD is a compression algorithm targeting intermediate compression
+ with fast decompression speed. It will compress better than GZIP and
+ decompress around the same speed as LZO, but slower than LZ4. You
+ will need at least 192 KB RAM or more for booting. The zstd command
+ line tools is required for compression.
+
config KERNEL_UNCOMPRESSED
bool "None"
depends on HAVE_KERNEL_UNCOMPRESSED
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 916b2f7f7098..d960f8815f87 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -413,6 +413,21 @@ quiet_cmd_xzkern = XZKERN $@
quiet_cmd_xzmisc = XZMISC $@
cmd_xzmisc = cat $(real-prereqs) | $(XZ) --check=crc32 --lzma2=dict=1MiB > $@
+# ZSTD
+# ---------------------------------------------------------------------------
+# Appends the uncompressed size of the data using size_append. The .zst
+# format has the size information available at the beginning of the file too,
+# but it's in a more complex format and it's good to avoid changing the part
+# of the boot code that reads the uncompressed size.
+# Note that the bytes added by size_append will make the zstd tool think that
+# the file is corrupt. This is expected.
+
+quiet_cmd_zstd = ZSTD $@
+cmd_zstd = (cat $(filter-out FORCE,$^) | \
+ zstd -19 && \
+ $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+ (rm -f $@ ; false)
+
# ASM offsets
# ---------------------------------------------------------------------------
--
2.27.0
next prev parent reply other threads:[~2020-07-07 3:51 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-07 3:45 [GIT PULL][PATCH v6 0/8] Add support for ZSTD-compressed kernel and initramfs Nick Terrell
2020-07-07 3:45 ` [PATCH v6 1/8] lib: prepare zstd for preboot environment Nick Terrell
2020-07-07 3:45 ` [PATCH v6 2/8] lib: prepare xxhash " Nick Terrell
2020-07-07 21:59 ` Arvind Sankar
2020-07-08 2:03 ` Nick Terrell
2020-07-08 2:49 ` Kees Cook
2020-07-08 3:23 ` Arvind Sankar
2020-07-07 3:45 ` [PATCH v6 3/8] lib: add zstd support to decompress Nick Terrell
2020-07-07 3:46 ` Nick Terrell [this message]
2020-07-07 7:19 ` [PATCH v6 4/8] init: add support for zstd compressed kernel Norbert Lange
2020-07-07 15:31 ` Nick Terrell
2020-07-07 16:40 ` Norbert Lange
2020-07-07 22:11 ` Arvind Sankar
2020-07-08 2:01 ` Nick Terrell
2020-07-08 3:09 ` Arvind Sankar
2020-07-08 3:25 ` Arvind Sankar
2020-07-07 3:46 ` [PATCH v6 5/8] usr: add support for zstd compressed initramfs Nick Terrell
2020-07-07 3:46 ` [PATCH v6 6/8] x86: bump ZO_z_extra_bytes margin for zstd Nick Terrell
2020-07-07 3:46 ` [PATCH v6 7/8] x86: Add support for ZSTD compressed kernel Nick Terrell
2020-07-07 3:46 ` [PATCH v6 8/8] .gitignore: add ZSTD-compressed files Nick Terrell
2020-07-07 4:03 ` [GIT PULL][PATCH v6 0/8] Add support for ZSTD-compressed kernel and initramfs Sedat Dilek
2020-07-07 9:01 ` Sedat Dilek
2020-07-07 21:32 ` Kees Cook
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=20200707034604.1539157-5-nickrterrell@gmail.com \
--to=nickrterrell@gmail.com \
--cc=Kernel-team@fb.com \
--cc=akpm@linux-foundation.org \
--cc=bp@alien8.de \
--cc=clm@fb.com \
--cc=gregkh@linuxfoundation.org \
--cc=keescook@chromium.org \
--cc=kilobyte@angband.pl \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=nolange79@gmail.com \
--cc=oss@malat.biz \
--cc=patrick@stwcx.xyz \
--cc=patrickw3@fb.com \
--cc=rmikey@fb.com \
--cc=sedat.dilek@gmail.com \
--cc=terrelln@fb.com \
--cc=tglx@linutronix.de \
--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 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.