Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1774318pxk; Tue, 1 Sep 2020 07:31:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzMPZuCt2JDUZQi7doY2krwwVoFk75oUwL6/iZSPUPgERuLImEHhaduxURdopvwFbZShizL X-Received: by 2002:aa7:db85:: with SMTP id u5mr1876287edt.316.1598970660945; Tue, 01 Sep 2020 07:31:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598970660; cv=none; d=google.com; s=arc-20160816; b=Du32YVsL3yIHT3zH4ocEIQvpaIU6DqDnM8FulL3I8+kQGkjHZ2gdonEU7CTzRvs7BL 8Z1iuS+EOota6+6k9XBTFytOlc9HxRsbaRXlic9aueVSXelc5lvKBkow7aUDNlxL+56K x3HeGWMvpDDxcXKxy+E6VidbdA1xLj6GzNfHzrIYo8a1sXM1RdsO+uyaml+a4BxFusde frLW0YhefwC9K3xJuL/by9GN7echXmmJlIBJpV0JN7yV/lgUyVUP2wXYlKj0N1r3PDmL 3yhuqFAIB36QjnOgnCrTfZAxihHbG96fuS61rhnimU9LCR7TLW77DIQBkuX+WWg+HNEn QT9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yU+G5wm9UV0/Lr0JJrsdPUDzSeYzX6a4lcXqh4c6G+0=; b=mhh6eYx6Yey9PImKt2zS9mqQ5Yxfjbssf8EirYlgYse2R+Id/H75hA2KrLtqyZIjKa Bq9e/E1oCie0kHEFNWeuHqMLS6vHbVnxXw07Cju5VpMdF98Jqxyr1ltxUUaj39NHnVX/ 9w3k0XhNnRwBZ6R0JmhtzEtWHGiTHmnzGyx9v3CSAaaXXKB9AFFGbmDLlSUlnNr0hUez gm3AJEEloNNdFIZT6g1srWEpFxdtWYeFC62SNjQb28K4HTMWIVSCX7PbmDrtTlaLm2q3 Jx75vl+SAf1n+pkv1OolZjCArHtC7aaWlN8YjH2mU/pgMci3JADQWYCr/CZQ9dTAR1ZY MiPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@crapouillou.net header.s=mail header.b=HhHU3Nc6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h12si743346eji.301.2020.09.01.07.30.37; Tue, 01 Sep 2020 07:31:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@crapouillou.net header.s=mail header.b=HhHU3Nc6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728454AbgIAO3Q (ORCPT + 99 others); Tue, 1 Sep 2020 10:29:16 -0400 Received: from crapouillou.net ([89.234.176.41]:45394 "EHLO crapouillou.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728289AbgIAO1r (ORCPT ); Tue, 1 Sep 2020 10:27:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crapouillou.net; s=mail; t=1598970419; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yU+G5wm9UV0/Lr0JJrsdPUDzSeYzX6a4lcXqh4c6G+0=; b=HhHU3Nc6W8OyBdfECWVhQHZrKsN6YU67y7ugf5zT0hdIOTsbRpIry/YTQJY4IHt7pyqlgm u3XKVUQJRz67Ja9q01KpglQXo9i7er1TVwlHD/6zvqAvba2zwPnjfuKNohZBYBw9pEU9jp G9nm5SGShMU9AI9MOC87A5L/Rrrvr1A= From: Paul Cercueil To: Thomas Bogendoerfer , Nick Terrell Cc: od@zcrc.me, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, Paul Cercueil Subject: [PATCH v3 2/2] MIPS: Add support for ZSTD-compressed kernels Date: Tue, 1 Sep 2020 16:26:51 +0200 Message-Id: <20200901142651.1165237-3-paul@crapouillou.net> In-Reply-To: <20200901142651.1165237-1-paul@crapouillou.net> References: <20200901142651.1165237-1-paul@crapouillou.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for self-extracting kernels with a ZSTD compression. Tested on a kernel for the GCW-Zero, it allows to reduce the size of the kernel file from 4.1 MiB with gzip to 3.5 MiB with ZSTD, and boots just as fast. Compressed kernels are now also compiled with -D__DISABLE_EXPORTS in order to disable the EXPORT_SYMBOL() macros inside of lib/zstd/decompress.c. Signed-off-by: Paul Cercueil --- Notes: v2: Add -D__DISABLE_EXPORTS to CFLAGS and use zstd22 v3: Make memmove __weak, since it is provided for other compression schemes arch/mips/Kconfig | 1 + arch/mips/boot/compressed/Makefile | 3 ++- arch/mips/boot/compressed/decompress.c | 4 ++++ arch/mips/boot/compressed/string.c | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index c95fa3a2484c..b9d7c4249dc9 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -1890,6 +1890,7 @@ config SYS_SUPPORTS_ZBOOT select HAVE_KERNEL_LZMA select HAVE_KERNEL_LZO select HAVE_KERNEL_XZ + select HAVE_KERNEL_ZSTD config SYS_SUPPORTS_ZBOOT_UART16550 bool diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile index 6e56caef69f0..9a9ba77b745e 100644 --- a/arch/mips/boot/compressed/Makefile +++ b/arch/mips/boot/compressed/Makefile @@ -22,7 +22,7 @@ KBUILD_CFLAGS := $(filter-out -pg, $(KBUILD_CFLAGS)) KBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS)) -KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ \ +KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ -D__DISABLE_EXPORTS \ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ @@ -70,6 +70,7 @@ tool_$(CONFIG_KERNEL_LZ4) = lz4 tool_$(CONFIG_KERNEL_LZMA) = lzma tool_$(CONFIG_KERNEL_LZO) = lzo tool_$(CONFIG_KERNEL_XZ) = xzkern +tool_$(CONFIG_KERNEL_ZSTD) = zstd22 targets += vmlinux.bin.z $(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c index 88f5d637b1c4..c61c641674e6 100644 --- a/arch/mips/boot/compressed/decompress.c +++ b/arch/mips/boot/compressed/decompress.c @@ -72,6 +72,10 @@ void error(char *x) #include "../../../../lib/decompress_unxz.c" #endif +#ifdef CONFIG_KERNEL_ZSTD +#include "../../../../lib/decompress_unzstd.c" +#endif + const unsigned long __stack_chk_guard = 0x000a0dff; void __stack_chk_fail(void) diff --git a/arch/mips/boot/compressed/string.c b/arch/mips/boot/compressed/string.c index 43beecc3587c..0b593b709228 100644 --- a/arch/mips/boot/compressed/string.c +++ b/arch/mips/boot/compressed/string.c @@ -5,6 +5,7 @@ * Very small subset of simple string routines */ +#include #include void *memcpy(void *dest, const void *src, size_t n) @@ -27,3 +28,19 @@ void *memset(void *s, int c, size_t n) ss[i] = c; return s; } + +void * __weak memmove(void *dest, const void *src, size_t n) +{ + unsigned int i; + const char *s = src; + char *d = dest; + + if ((uintptr_t)dest < (uintptr_t)src) { + for (i = 0; i < n; i++) + d[i] = s[i]; + } else { + for (i = n; i > 0; i--) + d[i - 1] = s[i - 1]; + } + return dest; +} -- 2.28.0