Update to zstd-1.4.10
Subsystems (7)
v8 cover Update to zstd-1.4.10
From: Nick Terrell <[email protected]>
Please pull from
[email protected]:terrelln/linux.git tags/v8-zstd-1.4.10
to get these changes. Alternatively the patchset is included.
This patchset upgrades the zstd library to the latest upstream release. The current zstd version in the kernel is a modified version of upstream zstd-1.3.1. At the time it was integrated, zstd wasn't ready to be used in the kernel as-is. But, it is now possible to use upstream zstd directly in the kernel.
I have not yet released zstd-1.4.10 upstream. I want the zstd version in the kernel to match up with a known upstream release, so we know exactly what code is running. Whenever this patchset is ready for merge, I will cut a release at the upstream commit that gets merged. This should not be necessary for future releases.
The kernel zstd library is automatically generated from upstream zstd. A script makes the necessary changes and imports it into the kernel. The changes are:
1. Replace all libc dependencies with kernel replacements and rewrite includes.
2. Remove unncessary portability macros like: #if defined(_MSC_VER).
3. Use the kernel xxhash instead of bundling it.
This automation gets tested every commit by upstream's continuous integration. When we cut a new zstd release, we will submit a patch to the kernel to update the zstd version in the kernel.
I've updated zstd to upstream with one big patch because every commit must build, so that precludes partial updates. Since the commit is 100% generated, I hope the review burden is lightened. I considered replaying upstream commits, but that is not possible because there have been ~3500 upstream commits since the last zstd import, and the commits don't all build individually. The bulk update preserves bisectablity because bugs can be bisected to the zstd version update. At that point the update can be reverted, and we can work with upstream to find and fix the bug. After this big switch in how the kernel consumes zstd, future patches will be smaller, because they will only have one upstream release worth of changes each.
This patchset adds a new kernel-style wrapper around zstd. This wrapper API is functionally equivalent to the subset of the current zstd API that is currently used. The wrapper API changes to be kernel style so that the symbols don't collide with zstd's symbols. The update to zstd-1.4.10 maintains the same API and preserves the semantics, so that none of the callers need to be updated.
This patchset comes in 2 parts:
1. The first 2 patches prepare for the zstd upgrade. The first patch adds the new kernel style API so zstd can be upgraded without modifying any callers. The second patch adds an indirection for the lib/decompress_unzstd.c including of all decompression source files.
2. Import zstd-1.4.10. This patch is completely generated from upstream using automated tooling.
I tested every caller of zstd on x86_64. I tested both after the 1.4.10 upgrade using the compatibility wrapper, and after the final patch in this series.
I tested kernel and initramfs decompression in i386 and arm.
I ran benchmarks to compare the current zstd in the kernel with zstd-1.4.10. I benchmarked on x86_64 using QEMU with KVM enabled on an Intel i9-9900k. I found:
* BtrFS zstd compression at levels 1 and 3 is 5% faster
* BtrFS zstd decompression+read is 15% faster
* SquashFS zstd decompression+read is 15% faster
* F2FS zstd compression+write at level 3 is 8% faster
* F2FS zstd decompression+read is 20% faster
* ZRAM decompression+read is 30% faster
* Kernel zstd decompression is 35% faster
* Initramfs zstd decompression+build is 5% faster
The latest zstd also offers bug fixes. For example the problem with large kernel decompression has been fixed upstream for over 2 years
https://lkml.org/lkml/2020/9/29/27.
Please let me know if there is anything that I can do to ease the way for these patches. I think it is important because it gets large performance improvements, contains bug fixes, and is switching to a more maintainable model of consuming upstream zstd directly, making it easy to keep up to date.
Best,
Nick Terrell
v1 -> v2:
* Successfully tested F2FS with help from Chao Yu to fix my test.
* (1/9) Fix ZSTD_initCStream() wrapper to handle pledged_src_size=0 means unknown. This fixes F2FS with the zstd-1.4.6 compatibility wrapper, exposed by the test.
v2 -> v3:
* (3/9) Silence warnings by Kernel Test Robot:
https://github.com/facebook/zstd/pull/2324
Stack size warnings remain, but these aren't new, and the functions it warns on are either unused or not in the maximum stack path. This patchset reduces zstd compression stack usage by 1 KB overall. I've gotten the low hanging fruit, and more stack reduction would require significant changes that have the potential to introduce new bugs. However, I do hope to continue to reduce zstd stack usage in future versions.
v3 -> v4:
* (3/9) Fix errors and warnings reported by Kernel Test Robot:
https://github.com/facebook/zstd/pull/2326
- Replace mem.h with a custom kernel implementation that matches the current lib/zstd/mem.h in the kernel. This avoids calls to __builtin_bswap*() which don't work on certain architectures, as exposed by the Kernel Test Robot.
- Remove ASAN/MSAN (un)poisoning code which doesn't work in the kernel, as exposed by the Kernel Test Robot.
- I've fixed all of the valid cppcheck warnings reported, but there were many false positives, where cppcheck was incorrectly analyzing the situation, which I did not fix. I don't believe it is reasonable to expect that upstream zstd silences all the static analyzer false positives. Upstream zstd uses clang scan-build for its static analysis. We find that supporting multiple static analysis tools multiplies the burden of silencing false positives, without providing enough marginal value over running a single static analysis tool.
v4 -> v5:
* Rebase onto v5.10-rc2
* (6/9) Merge with other F2FS changes (no functional change in patch).
v5 -> v6:
* Rebase onto v5.10-rc6.
* Switch to using a kernel style wrapper API as suggested by Cristoph.
v6 -> v7:
* Expose the upstream library header as include/linux/zstd_lib.h. Instead of creating new structs mirroring the upstream zstd structs use upstream's structs directly with a typedef to get a kernel style name. This removes the memcpy cruft.
* (1/3) Undo ZSTD_WINDOWLOG_MAX and handle_zstd_error changes.
* (3/3) Expose zstd_errors.h as include/linux/zstd_errors.h because it is needed by the kernel wrapper API.
v7 -> v8:
* (1/3) Fix typo in EXPORT_SYMBOL().
* (1/3) Fix typo in zstd.h comments.
* (3/3) Update to latest zstd release: 1.4.6 -> 1.4.10 This includes ~1KB of stack space reductions.
Nick Terrell (3):
lib: zstd: Add kernel-specific API
lib: zstd: Add decompress_sources.h for decompress_unzstd
lib: zstd: Upgrade to latest upstream zstd version 1.4.10
crypto/zstd.c | 28 +- fs/btrfs/zstd.c | 68 +- fs/f2fs/compress.c | 56 +- fs/pstore/platform.c | 2 +- fs/squashfs/zstd_wrapper.c | 16 +- include/linux/zstd.h | 1227 +--- include/linux/zstd_errors.h | 77 + include/linux/zstd_lib.h | 2432 ++++++++ lib/decompress_unzstd.c | 48 +- lib/zstd/Makefile | 35 +- lib/zstd/bitstream.h | 380 -- lib/zstd/common/bitstream.h | 437 ++ lib/zstd/common/compiler.h | 151 + lib/zstd/common/cpu.h | 194 + lib/zstd/common/debug.c | 24 + lib/zstd/common/debug.h | 101 + lib/zstd/common/entropy_common.c | 357 ++ lib/zstd/common/error_private.c | 56 + lib/zstd/common/error_private.h | 66 + lib/zstd/common/fse.h | 710 +++ lib/zstd/common/fse_decompress.c | 390 ++ lib/zstd/common/huf.h | 356 ++ lib/zstd/common/mem.h | 258 + lib/zstd/common/zstd_common.c | 83 + lib/zstd/common/zstd_deps.h | 124 + lib/zstd/common/zstd_internal.h | 450 ++ lib/zstd/compress.c | 3485 ----------- lib/zstd/compress/fse_compress.c | 625 ++ lib/zstd/compress/hist.c | 165 + lib/zstd/compress/hist.h | 75 + lib/zstd/compress/huf_compress.c | 902 +++ lib/zstd/compress/zstd_compress.c | 5105 +++++++++++++++++ lib/zstd/compress/zstd_compress_internal.h | 1188 ++++ lib/zstd/compress/zstd_compress_literals.c | 158 + lib/zstd/compress/zstd_compress_literals.h | 29 + lib/zstd/compress/zstd_compress_sequences.c | 439 ++ lib/zstd/compress/zstd_compress_sequences.h | 54 + lib/zstd/compress/zstd_compress_superblock.c | 850 +++ lib/zstd/compress/zstd_compress_superblock.h | 32 + lib/zstd/compress/zstd_cwksp.h | 482 ++ lib/zstd/compress/zstd_double_fast.c | 521 ++ lib/zstd/compress/zstd_double_fast.h | 32 + lib/zstd/compress/zstd_fast.c | 496 ++ lib/zstd/compress/zstd_fast.h | 31 + lib/zstd/compress/zstd_lazy.c | 1412 +++++ lib/zstd/compress/zstd_lazy.h | 81 + lib/zstd/compress/zstd_ldm.c | 686 +++ lib/zstd/compress/zstd_ldm.h | 110 + lib/zstd/compress/zstd_ldm_geartab.h | 103 + lib/zstd/compress/zstd_opt.c | 1345 +++++ lib/zstd/compress/zstd_opt.h | 50 + lib/zstd/decompress.c | 2531 -------- lib/zstd/decompress/huf_decompress.c | 1206 ++++ lib/zstd/decompress/zstd_ddict.c | 241 + lib/zstd/decompress/zstd_ddict.h | 44 + lib/zstd/decompress/zstd_decompress.c | 2075 +++++++ lib/zstd/decompress/zstd_decompress_block.c | 1540 +++++ lib/zstd/decompress/zstd_decompress_block.h | 62 + .../decompress/zstd_decompress_internal.h | 202 + lib/zstd/decompress_sources.h | 19 + lib/zstd/entropy_common.c | 243 - lib/zstd/error_private.h | 53 - lib/zstd/fse.h | 575 -- lib/zstd/fse_compress.c | 795 --- lib/zstd/fse_decompress.c | 325 -- lib/zstd/huf.h | 212 - lib/zstd/huf_compress.c | 773 --- lib/zstd/huf_decompress.c | 960 ---- lib/zstd/mem.h | 151 - lib/zstd/zstd_common.c | 75 - lib/zstd/zstd_compress_module.c | 103 + lib/zstd/zstd_decompress_module.c | 96 + lib/zstd/zstd_internal.h | 273 - lib/zstd/zstd_opt.h | 1014 ---- 74 files changed, 27219 insertions(+), 12931 deletions(-) create mode 100644 include/linux/zstd_errors.h create mode 100644 include/linux/zstd_lib.h delete mode 100644 lib/zstd/bitstream.h create mode 100644 lib/zstd/common/bitstream.h create mode 100644 lib/zstd/common/compiler.h create mode 100644 lib/zstd/common/cpu.h create mode 100644 lib/zstd/common/debug.c create mode 100644 lib/zstd/common/debug.h create mode 100644 lib/zstd/common/entropy_common.c create mode 100644 lib/zstd/common/error_private.c create mode 100644 lib/zstd/common/error_private.h create mode 100644 lib/zstd/common/fse.h create mode 100644 lib/zstd/common/fse_decompress.c create mode 100644 lib/zstd/common/huf.h create mode 100644 lib/zstd/common/mem.h create mode 100644 lib/zstd/common/zstd_common.c create mode 100644 lib/zstd/common/zstd_deps.h create mode 100644 lib/zstd/common/zstd_internal.h delete mode 100644 lib/zstd/compress.c create mode 100644 lib/zstd/compress/fse_compress.c create mode 100644 lib/zstd/compress/hist.c create mode 100644 lib/zstd/compress/hist.h create mode 100644 lib/zstd/compress/huf_compress.c create mode 100644 lib/zstd/compress/zstd_compress.c create mode 100644 lib/zstd/compress/zstd_compress_internal.h create mode 100644 lib/zstd/compress/zstd_compress_literals.c create mode 100644 lib/zstd/compress/zstd_compress_literals.h create mode 100644 lib/zstd/compress/zstd_compress_sequences.c create mode 100644 lib/zstd/compress/zstd_compress_sequences.h create mode 100644 lib/zstd/compress/zstd_compress_superblock.c create mode 100644 lib/zstd/compress/zstd_compress_superblock.h create mode 100644 lib/zstd/compress/zstd_cwksp.h create mode 100644 lib/zstd/compress/zstd_double_fast.c create mode 100644 lib/zstd/compress/zstd_double_fast.h create mode 100644 lib/zstd/compress/zstd_fast.c create mode 100644 lib/zstd/compress/zstd_fast.h create mode 100644 lib/zstd/compress/zstd_lazy.c create mode 100644 lib/zstd/compress/zstd_lazy.h create mode 100644 lib/zstd/compress/zstd_ldm.c create mode 100644 lib/zstd/compress/zstd_ldm.h create mode 100644 lib/zstd/compress/zstd_ldm_geartab.h create mode 100644 lib/zstd/compress/zstd_opt.c create mode 100644 lib/zstd/compress/zstd_opt.h delete mode 100644 lib/zstd/decompress.c create mode 100644 lib/zstd/decompress/huf_decompress.c create mode 100644 lib/zstd/decompress/zstd_ddict.c create mode 100644 lib/zstd/decompress/zstd_ddict.h create mode 100644 lib/zstd/decompress/zstd_decompress.c create mode 100644 lib/zstd/decompress/zstd_decompress_block.c create mode 100644 lib/zstd/decompress/zstd_decompress_block.h create mode 100644 lib/zstd/decompress/zstd_decompress_internal.h create mode 100644 lib/zstd/decompress_sources.h delete mode 100644 lib/zstd/entropy_common.c delete mode 100644 lib/zstd/error_private.h delete mode 100644 lib/zstd/fse.h delete mode 100644 lib/zstd/fse_compress.c delete mode 100644 lib/zstd/fse_decompress.c delete mode 100644 lib/zstd/huf.h delete mode 100644 lib/zstd/huf_compress.c delete mode 100644 lib/zstd/huf_decompress.c delete mode 100644 lib/zstd/mem.h delete mode 100644 lib/zstd/zstd_common.c create mode 100644 lib/zstd/zstd_compress_module.c create mode 100644 lib/zstd/zstd_decompress_module.c delete mode 100644 lib/zstd/zstd_internal.h delete mode 100644 lib/zstd/zstd_opt.h
Signature · 1 line
2.31.0
PATCH v8 1/3 lib: zstd: Add kernel-specific API
From: Nick Terrell <[email protected]>
This patch:
- Moves include/linux/zstd.h -> include/linux/zstd_lib.h
- Adds a new API in include/linux/zstd.h that is functionally equivalent to the in-use subset of the current API. Functions are renamed to avoid symbol collisions with zstd, to make it clear it is not the upstream zstd API, and to follow the kernel style guide.
- Updates all callers to use the new API.
There are no functional changes in this patch. Since there are no functional change, I felt it was okay to update all the callers in a single patch. Once the API is approved, the callers are mechanically changed.
This patch is preparing for the 3rd patch in this series, which updates zstd to version 1.4.10. Since the upstream zstd API is no longer exposed to callers, the update can happen transparently.
--- crypto/zstd.c | 28 +- fs/btrfs/zstd.c | 68 +- fs/f2fs/compress.c | 56 +- fs/pstore/platform.c | 2 +- fs/squashfs/zstd_wrapper.c | 16 +- include/linux/zstd.h | 1218 ++++++++---------------------------- include/linux/zstd_lib.h | 1157 ++++++++++++++++++++++++++++++++++ lib/decompress_unzstd.c | 42 +- lib/zstd/compress.c | 107 ++-- lib/zstd/decompress.c | 112 ++-- 10 files changed, 1657 insertions(+), 1149 deletions(-) create mode 100644 include/linux/zstd_lib.h
crypto/zstd.c +14 -14
@@ -18,22 +18,22 @@#define ZSTD_DEF_LEVEL 3struct zstd_ctx { -ZSTD_CCtx *cctx; -ZSTD_DCtx *dctx; +zstd_cctx *cctx; +zstd_dctx *dctx;void *cwksp;void *dwksp; }; -static ZSTD_parameters zstd_params (void ) +static zstd_parameters zstd_params (void ) { -return ZSTD_getParams (ZSTD_DEF_LEVEL ,0 ,0 ); +return zstd_get_params (ZSTD_DEF_LEVEL ,0 ); }static int zstd_comp_init (struct zstd_ctx *ctx) {int ret =0 ; -const ZSTD_parameters params =zstd_params (); -const size_t wksp_size =ZSTD_CCtxWorkspaceBound (params.cParams); +const zstd_parameters params =zstd_params (); +const size_t wksp_size =zstd_cctx_workspace_bound (¶ms.cParams); ctx->cwksp =vzalloc (wksp_size);if (!ctx->cwksp) {
@@ -41,7 +41,7 @@ static int zstd_comp_init(struct zstd_ctx *ctx) goto out; } - ctx->cctx =ZSTD_initCCtx (ctx->cwksp, wksp_size); + ctx->cctx =zstd_init_cctx (ctx->cwksp, wksp_size);if (!ctx->cctx) { ret = -EINVAL ; goto out_free;
@@ -56,7 +56,7 @@ static int zstd_comp_init(struct zstd_ctx *ctx)static int zstd_decomp_init (struct zstd_ctx *ctx) {int ret =0 ; -const size_t wksp_size =ZSTD_DCtxWorkspaceBound (); +const size_t wksp_size =zstd_dctx_workspace_bound (); ctx->dwksp =vzalloc (wksp_size);if (!ctx->dwksp) {
@@ -64,7 +64,7 @@ static int zstd_decomp_init(struct zstd_ctx *ctx) goto out; } - ctx->dctx =ZSTD_initDCtx (ctx->dwksp, wksp_size); + ctx->dctx =zstd_init_dctx (ctx->dwksp, wksp_size);if (!ctx->dctx) { ret = -EINVAL ; goto out_free;
@@ -152,10 +152,10 @@ static int __zstd_compress(const u8 *src, unsigned int slen, {size_t out_len;struct zstd_ctx *zctx = ctx; -const ZSTD_parameters params =zstd_params (); +const zstd_parameters params =zstd_params (); - out_len =ZSTD_compressCCtx (zctx->cctx, dst, *dlen, src, slen, params); -if (ZSTD_isError (out_len)) + out_len =zstd_compress_cctx (zctx->cctx, dst, *dlen, src, slen, ¶ms); +if (zstd_is_error (out_len))return -EINVAL ; *dlen = out_len;return 0 ;
@@ -182,8 +182,8 @@ static int __zstd_decompress(const u8 *src, unsigned int slen,size_t out_len;struct zstd_ctx *zctx = ctx; - out_len =ZSTD_decompressDCtx (zctx->dctx, dst, *dlen, src, slen); -if (ZSTD_isError (out_len)) + out_len =zstd_decompress_dctx (zctx->dctx, dst, *dlen, src, slen); +if (zstd_is_error (out_len))return -EINVAL ; *dlen = out_len;return 0 ;
fs/btrfs/zstd.c +34 -34
169 lines not on this page · raw message
fs/f2fs/compress.c +28 -28
123 lines not on this page · raw message
fs/pstore/platform.c +1 -1
@@ -218,7 +218,7 @@ static int zbufsize_842(size_t size)#if IS_ENABLED (CONFIG_PSTORE_ZSTD_COMPRESS )static int zbufsize_zstd (size_t size) { -return ZSTD_compressBound (size); +return zstd_compress_bound (size); }#endif
fs/squashfs/zstd_wrapper.c +8 -8
@@ -34,7 +34,7 @@ static void *zstd_init(struct squashfs_sb_info *msblk, void *buff) goto failed; wksp->window_size =max_t (size_t, msblk->block_size,SQUASHFS_METADATA_SIZE ); - wksp->mem_size =ZSTD_DStreamWorkspaceBound (wksp->window_size); + wksp->mem_size =zstd_dstream_workspace_bound (wksp->window_size); wksp->mem =vmalloc (wksp->mem_size);if (wksp->mem ==NULL ) goto failed;
@@ -63,15 +63,15 @@ static int zstd_uncompress(struct squashfs_sb_info *msblk, void *strm, struct squashfs_page_actor *output) {struct workspace *wksp = strm; -ZSTD_DStream *stream; +zstd_dstream *stream;size_t total_out =0 ;int error =0 ; -ZSTD_inBuffer in_buf = {NULL ,0 ,0 }; -ZSTD_outBuffer out_buf = {NULL ,0 ,0 }; +zstd_in_buffer in_buf = {NULL ,0 ,0 }; +zstd_out_buffer out_buf = {NULL ,0 ,0 };struct bvec_iter_all iter_all = {};struct bio_vec *bvec =bvec_init_iter_all (&iter_all); - stream =ZSTD_initDStream (wksp->window_size, wksp->mem, wksp->mem_size); + stream =zstd_init_dstream (wksp->window_size, wksp->mem, wksp->mem_size);if (!stream) {ERROR ("Failed to initialize zstd decompressor\n" );
@@ -116,14 +116,14 @@ static int zstd_uncompress(struct squashfs_sb_info *msblk, void *strm, } total_out -= out_buf.pos; - zstd_err =ZSTD_decompressStream (stream, &out_buf, &in_buf); + zstd_err =zstd_decompress_stream (stream, &out_buf, &in_buf); total_out += out_buf.pos;/* add the additional data produced */ if (zstd_err ==0 )break ; -if (ZSTD_isError (zstd_err)) { +if (zstd_is_error (zstd_err)) {ERROR ("zstd decompression error: %d\n" , - (int )ZSTD_getErrorCode (zstd_err)); + (int )zstd_get_error_code (zstd_err)); error = -EIO ;break ; }
include/linux/zstd.h +246 -972
1,391 lines not on this page · raw message
include/linux/zstd_lib.h new file +1157 -0
1,157 lines not on this page · raw message
lib/decompress_unzstd.c +23 -19
33 lines not on this page · raw message
lib/zstd/compress.c +70 -37
107 lines not on this page · raw message
lib/zstd/decompress.c +76 -36
112 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 8 lines
2.31.0 _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
Part of the diff is not shown here. View the raw message.
kernel test robot
build botRe: [PATCH v8 1/3] lib: zstd: Add kernel-specific API
Thank you for the patch! Yet something to improve:
Hi Nick,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on cryptodev/master]
[also build test ERROR on kdave/for-next f2fs/dev-test linus/master v5.12-rc4 next-20210326] [cannot apply to crypto/master kees/for-next/pstore squashfs/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Nick-Terrell/Update-to-zstd-1-4-10/20210327-031827 base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master config: sh-allmodconfig (attached as .config) compiler: sh4-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/c7b74f012a26721a207dd6a9a9a05210a8b1d627
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Nick-Terrell/Update-to-zstd-1-4-10/20210327-031827 git checkout c7b74f012a26721a207dd6a9a9a05210a8b1d627
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sh
If you fix the issue, kindly add following tag as appropriate
All errors (new ones prefixed by >>, old ones prefixed by <<):
ERROR: modpost: "__delay" [drivers/net/mdio/mdio-cavium.ko] undefined!
>> ERROR: modpost: "ZSTD_maxCLevel" [fs/f2fs/f2fs.ko] undefined!
ERROR: modpost: "__udivdi3" [fs/btrfs/btrfs.ko] undefined!
ERROR: modpost: "__umoddi3" [fs/btrfs/btrfs.ko] undefined!
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for SND_ATMEL_SOC_PDC
Depends on SOUND && !UML && SND && SND_SOC && SND_ATMEL_SOC && HAS_DMA Selected by
- SND_ATMEL_SOC_SSC && SOUND && !UML && SND && SND_SOC && SND_ATMEL_SOC
- SND_ATMEL_SOC_SSC_PDC && SOUND && !UML && SND && SND_SOC && SND_ATMEL_SOC && ATMEL_SSC
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
Re: [PATCH v8 1/3] lib: zstd: Add kernel-specific API
Hello.
Quoted 1 line · kernel test robot
Quoted 1 line
Quoted 1 line
ERROR: modpost: "
ZSTD_maxCLevel" [fs/f2fs/f2fs.ko] undefined!
Since f2fs can be built as a module, the following correction seems to be needed:
```
diff --git a/lib/zstd/compress/zstd_compress.c b/lib/zstd/compress/zstd_compress.c
index 9c998052a0e5..584c92c51169 100644
--- a/lib/zstd/compress/zstd_compress.c
+++ b/lib/zstd/compress/zstd_compress.c
@@ -4860,6 +4860,7 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)
#define ZSTD_MAX_CLEVEL 22
int ZSTD_maxCLevel(void) { return ZSTD_MAX_CLEVEL; }
+EXPORT_SYMBOL(ZSTD_maxCLevel);
int ZSTD_minCLevel(void) { return (int)-ZSTD_TARGETLENGTH_MAX; }
static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = {
```Not sure if the same should be done for ZSTD_minCLevel() since I don't see it being used anywhere else.
Signature · 1 line
Oleksandr Natalenko (post-factum)
Re: [PATCH v8 1/3] lib: zstd: Add kernel-specific API
Quoted 8 lines · Oleksandr Natalenko
Hello.
Quoted 1 line · kernel test robot
Quoted 1 line
Quoted 1 line
ERROR: modpost: "
ZSTD_maxCLevel" [fs/f2fs/f2fs.ko] undefined!Since f2fs can be built as a module, the following correction seems to be needed:
Thanks Oleksandr! Looks like f2fs has been updated to use ZSTD_maxCLevel() since the first version of these patches. I'll put up a new version shortly with the fix, and update my test suite to build f2fs and other users as modules, so it can catch this.
Best,
Nick
Quoted 20 lines
```
lib/zstd/compress/zstd_compress.c +1
-0@@ -4860,6 +4860,7 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)#define ZSTD_MAX_CLEVEL 22int ZSTD_maxCLevel (void ) {return ZSTD_MAX_CLEVEL ; } +EXPORT_SYMBOL (ZSTD_maxCLevel);int ZSTD_minCLevel (void ) {return (int )-ZSTD_TARGETLENGTH_MAX ; }static const ZSTD_compressionParameters ZSTD_defaultCParameters[4 ][ZSTD_MAX_CLEVEL +1 ] = {```
Not sure if the same should be done for
ZSTD_minCLevel()since I don't see it being used anywhere else.--
Oleksandr Natalenko (post-factum)
PATCH v8 2/3 lib: zstd: Add decompress_sources.h for decompress_unzstd
In reply to Nick TerrellFrom: Nick Terrell <[email protected]>
Adds decompress_sources.h which includes every .c file necessary for zstd decompression. This is used in decompress_unzstd.c so the internal structure of the library isn't exposed.
This allows us to upgrade the zstd library version without modifying any callers. Instead we just need to update decompress_sources.h.
--- lib/decompress_unzstd.c | 6 +----- lib/zstd/decompress_sources.h | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 lib/zstd/decompress_sources.h
lib/decompress_unzstd.c +1 -5
@@ -68,11 +68,7 @@#ifdef STATIC # define UNZSTD_PREBOOT # include "xxhash.c" -# include "zstd/entropy_common.c" -# include "zstd/fse_decompress.c" -# include "zstd/huf_decompress.c" -# include "zstd/zstd_common.c" -# include "zstd/decompress.c" +# include "zstd/decompress_sources.h" #endif #include <linux/decompress/mm.h>
lib/zstd/decompress_sources.h new file +14 -0
@@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +/* +* This file includes every .c file needed for decompression. +* It is used by lib/decompress_unzstd.c to include the decompression +* source into the translation-unit, so it can be used for kernel +* decompression. +*/ + +#include "entropy_common.c" +#include "fse_decompress.c" +#include "huf_decompress.c" +#include "zstd_common.c" +#include "decompress.c"
Signature · 1 line
2.31.0
PATCH v8 3/3 lib: zstd: Upgrade to latest upstream zstd version 1.4.10
In reply to Nick TerrellFrom: Nick Terrell <[email protected]>
Upgrade to the latest upstream zstd version 1.4.10.
This patch is 100% generated from upstream zstd commit c1a244d534bc [0].
This patch is very large because it is transitioning from the custom kernel zstd to using upstream directly. The new zstd follows upstreams file structure which is different. Future update patches will be much smaller because they will only contain the changes from one upstream zstd release.
As an aid for review I've created a commit [1] that shows the diff between upstream zstd as-is (which doesn't compile), and the zstd code imported in this patch. The verion of zstd in this patch is generated from upstream with changes applied by automation to replace upstreams libc dependencies, remove unnecessary portability macros, and use the kernel's xxhash instead of bundling it.
The benefits of this patch are as follows:
1. Using upstream directly with automated script to generate kernel code. This allows us to update the kernel every upstream release, so the kernel gets the latest bug fixes and performance improvements, and doesn't get 3 years out of date again. The automation and the translated code are tested every upstream commit to ensure it continues to work.
2. Upgrades from a custom zstd based on 1.3.1 to 1.4.10, getting 3 years of performance improvements and bug fixes. On x86_64 I've measured 15% faster BtrFS and SquashFS decompression+read speeds, 35% faster kernel decompression, and 30% faster ZRAM decompression+read speeds.
3. Zstd-1.4.10 supports negative compression levels, which allow zstd to match or subsume lzo's performance.
4. Maintains the same kernel-specific wrapper API, so no callers have to be modified with zstd version updates.
One concern that was brought up was stack usage. Upstream zstd had already removed most of its heavy stack usage functions, but I just removed the last functions that allocate arrays on the stack. I've measured the high water mark for both compression and decompression before and after this patch. Decompression is approximately neutral, using about 1.2KB of stack space. Compression levels up to 3 regressed from 1.4KB -> 1.6KB, and higher compression levels regressed from 1.5KB -> 2KB. We've added unit tests upstream to prevent further regression. I believe that this is a reasonable increase, and if it does end up causing problems, this commit can be cleanly reverted, because it only touches zstd.
I chose the bulk update instead of replaying upstream commits because there have been ~3500 upstream commits since the 1.3.1 release, zstd wasn't ready to be used in the kernel as-is before a month ago, and not all upstream zstd commits build. The bulk update preserves bisectablity because bugs can be bisected to the zstd version update. At that point the update can be reverted, and we can work with upstream to find and fix the bug.
Note that upstream zstd release 1.4.10 doesn't exist yet. I have cut a staging branch at c1a244d534bc [0] and will apply any changes requested to the staging branch. Once we're ready to merge this update I will cut a zstd release at the commit we merge, so we have a known zstd release in the kernel.
The implementation of the kernel API is contained in zstd_compress_module.c and zstd_decompress_module.c.
[0] https://github.com/facebook/zstd/commit/c1a244d534bcdfcf1bbba89f980dd21972ea4aa5
[1] https://github.com/terrelln/linux/commit/e01587379243583a0545568c6568ef0921956c3a
--- include/linux/zstd.h | 11 +- include/linux/zstd_errors.h | 77 + include/linux/zstd_lib.h | 3327 +++++++---- lib/zstd/Makefile | 35 +- lib/zstd/bitstream.h | 380 -- lib/zstd/common/bitstream.h | 437 ++ lib/zstd/common/compiler.h | 151 + lib/zstd/common/cpu.h | 194 + lib/zstd/common/debug.c | 24 + lib/zstd/common/debug.h | 101 + lib/zstd/common/entropy_common.c | 357 ++ lib/zstd/common/error_private.c | 56 + lib/zstd/common/error_private.h | 66 + lib/zstd/common/fse.h | 710 +++ lib/zstd/common/fse_decompress.c | 390 ++ lib/zstd/common/huf.h | 356 ++ lib/zstd/common/mem.h | 258 + lib/zstd/common/zstd_common.c | 83 + lib/zstd/common/zstd_deps.h | 124 + lib/zstd/common/zstd_internal.h | 450 ++ lib/zstd/compress.c | 3518 ------------ lib/zstd/compress/fse_compress.c | 625 ++ lib/zstd/compress/hist.c | 165 + lib/zstd/compress/hist.h | 75 + lib/zstd/compress/huf_compress.c | 902 +++ lib/zstd/compress/zstd_compress.c | 5105 +++++++++++++++++ lib/zstd/compress/zstd_compress_internal.h | 1188 ++++ lib/zstd/compress/zstd_compress_literals.c | 158 + lib/zstd/compress/zstd_compress_literals.h | 29 + lib/zstd/compress/zstd_compress_sequences.c | 439 ++ lib/zstd/compress/zstd_compress_sequences.h | 54 + lib/zstd/compress/zstd_compress_superblock.c | 850 +++ lib/zstd/compress/zstd_compress_superblock.h | 32 + lib/zstd/compress/zstd_cwksp.h | 482 ++ lib/zstd/compress/zstd_double_fast.c | 521 ++ lib/zstd/compress/zstd_double_fast.h | 32 + lib/zstd/compress/zstd_fast.c | 496 ++ lib/zstd/compress/zstd_fast.h | 31 + lib/zstd/compress/zstd_lazy.c | 1412 +++++ lib/zstd/compress/zstd_lazy.h | 81 + lib/zstd/compress/zstd_ldm.c | 686 +++ lib/zstd/compress/zstd_ldm.h | 110 + lib/zstd/compress/zstd_ldm_geartab.h | 103 + lib/zstd/compress/zstd_opt.c | 1345 +++++ lib/zstd/compress/zstd_opt.h | 50 + lib/zstd/decompress.c | 2571 --------- lib/zstd/decompress/huf_decompress.c | 1206 ++++ lib/zstd/decompress/zstd_ddict.c | 241 + lib/zstd/decompress/zstd_ddict.h | 44 + lib/zstd/decompress/zstd_decompress.c | 2075 +++++++ lib/zstd/decompress/zstd_decompress_block.c | 1540 +++++ lib/zstd/decompress/zstd_decompress_block.h | 62 + .../decompress/zstd_decompress_internal.h | 202 + lib/zstd/decompress_sources.h | 15 +- lib/zstd/entropy_common.c | 243 - lib/zstd/error_private.h | 53 - lib/zstd/fse.h | 575 -- lib/zstd/fse_compress.c | 795 --- lib/zstd/fse_decompress.c | 325 -- lib/zstd/huf.h | 212 - lib/zstd/huf_compress.c | 773 --- lib/zstd/huf_decompress.c | 960 ---- lib/zstd/mem.h | 151 - lib/zstd/zstd_common.c | 75 - lib/zstd/zstd_compress_module.c | 103 + lib/zstd/zstd_decompress_module.c | 96 + lib/zstd/zstd_internal.h | 273 - lib/zstd/zstd_opt.h | 1014 ---- 68 files changed, 26725 insertions(+), 12955 deletions(-) create mode 100644 include/linux/zstd_errors.h delete mode 100644 lib/zstd/bitstream.h create mode 100644 lib/zstd/common/bitstream.h create mode 100644 lib/zstd/common/compiler.h create mode 100644 lib/zstd/common/cpu.h create mode 100644 lib/zstd/common/debug.c create mode 100644 lib/zstd/common/debug.h create mode 100644 lib/zstd/common/entropy_common.c create mode 100644 lib/zstd/common/error_private.c create mode 100644 lib/zstd/common/error_private.h create mode 100644 lib/zstd/common/fse.h create mode 100644 lib/zstd/common/fse_decompress.c create mode 100644 lib/zstd/common/huf.h create mode 100644 lib/zstd/common/mem.h create mode 100644 lib/zstd/common/zstd_common.c create mode 100644 lib/zstd/common/zstd_deps.h create mode 100644 lib/zstd/common/zstd_internal.h delete mode 100644 lib/zstd/compress.c create mode 100644 lib/zstd/compress/fse_compress.c create mode 100644 lib/zstd/compress/hist.c create mode 100644 lib/zstd/compress/hist.h create mode 100644 lib/zstd/compress/huf_compress.c create mode 100644 lib/zstd/compress/zstd_compress.c create mode 100644 lib/zstd/compress/zstd_compress_internal.h create mode 100644 lib/zstd/compress/zstd_compress_literals.c create mode 100644 lib/zstd/compress/zstd_compress_literals.h create mode 100644 lib/zstd/compress/zstd_compress_sequences.c create mode 100644 lib/zstd/compress/zstd_compress_sequences.h create mode 100644 lib/zstd/compress/zstd_compress_superblock.c create mode 100644 lib/zstd/compress/zstd_compress_superblock.h create mode 100644 lib/zstd/compress/zstd_cwksp.h create mode 100644 lib/zstd/compress/zstd_double_fast.c create mode 100644 lib/zstd/compress/zstd_double_fast.h create mode 100644 lib/zstd/compress/zstd_fast.c create mode 100644 lib/zstd/compress/zstd_fast.h create mode 100644 lib/zstd/compress/zstd_lazy.c create mode 100644 lib/zstd/compress/zstd_lazy.h create mode 100644 lib/zstd/compress/zstd_ldm.c create mode 100644 lib/zstd/compress/zstd_ldm.h create mode 100644 lib/zstd/compress/zstd_ldm_geartab.h create mode 100644 lib/zstd/compress/zstd_opt.c create mode 100644 lib/zstd/compress/zstd_opt.h delete mode 100644 lib/zstd/decompress.c create mode 100644 lib/zstd/decompress/huf_decompress.c create mode 100644 lib/zstd/decompress/zstd_ddict.c create mode 100644 lib/zstd/decompress/zstd_ddict.h create mode 100644 lib/zstd/decompress/zstd_decompress.c create mode 100644 lib/zstd/decompress/zstd_decompress_block.c create mode 100644 lib/zstd/decompress/zstd_decompress_block.h create mode 100644 lib/zstd/decompress/zstd_decompress_internal.h delete mode 100644 lib/zstd/entropy_common.c delete mode 100644 lib/zstd/error_private.h delete mode 100644 lib/zstd/fse.h delete mode 100644 lib/zstd/fse_compress.c delete mode 100644 lib/zstd/fse_decompress.c delete mode 100644 lib/zstd/huf.h delete mode 100644 lib/zstd/huf_compress.c delete mode 100644 lib/zstd/huf_decompress.c delete mode 100644 lib/zstd/mem.h delete mode 100644 lib/zstd/zstd_common.c create mode 100644 lib/zstd/zstd_compress_module.c create mode 100644 lib/zstd/zstd_decompress_module.c delete mode 100644 lib/zstd/zstd_internal.h delete mode 100644 lib/zstd/zstd_opt.h
include/linux/zstd.h +9 -2
@@ -27,6 +27,7 @@/* ====== Dependency ====== */ #include <linux/types.h> +#include <linux/zstd_errors.h> #include <linux/zstd_lib.h> /* ====== Helper Functions ====== */
@@ -408,12 +409,18 @@ size_t zstd_find_frame_compressed_size(const void *src, size_t src_size);/** * struct zstd_frame_params - zstd frame parameters stored in the frame header -* @frameContentSize: The frame content size, or 0 if not present. +* @frameContentSize: The frame content size, or ZSTD_CONTENTSIZE_UNKNOWN if not +* present. * @windowSize: The window size, or 0 if the frame is a skippable frame. +* @blockSizeMax: The maximum block size. +* @frameType: The frame type (zstd or skippable) +* @headerSize: The size of the frame header. * @dictID: The dictionary id, or 0 if not present. * @checksumFlag: Whether a checksum was used. +* +* See zstd_lib.h. */ -typedef ZSTD_frameParams zstd_frame_header ; +typedef ZSTD_frameHeader zstd_frame_header ;/** * zstd_get_frame_header() - extracts parameters from a zstd or skippable frame
include/linux/zstd_errors.h new file +77 -0
77 lines not on this page · raw message
include/linux/zstd_lib.h +2301 -1026
2,896 lines not on this page · raw message
lib/zstd/bitstream.h deleted +0 -380
380 lines not on this page · raw message
lib/zstd/common/bitstream.h new file +437 -0
437 lines not on this page · raw message
lib/zstd/common/compiler.h new file +151 -0
151 lines not on this page · raw message
lib/zstd/common/cpu.h new file +194 -0
194 lines not on this page · raw message
lib/zstd/common/debug.h new file +101 -0
101 lines not on this page · raw message
lib/zstd/common/entropy_common.c new file +357 -0
357 lines not on this page · raw message
lib/zstd/common/error_private.c new file +56 -0
56 lines not on this page · raw message
lib/zstd/common/error_private.h new file +66 -0
66 lines not on this page · raw message
lib/zstd/common/fse.h new file +710 -0
710 lines not on this page · raw message
lib/zstd/common/fse_decompress.c new file +390 -0
390 lines not on this page · raw message
lib/zstd/common/huf.h new file +356 -0
356 lines not on this page · raw message
lib/zstd/common/mem.h new file +258 -0
258 lines not on this page · raw message
lib/zstd/common/zstd_common.c new file +83 -0
83 lines not on this page · raw message
lib/zstd/common/zstd_deps.h new file +124 -0
124 lines not on this page · raw message
lib/zstd/common/zstd_internal.h new file +450 -0
450 lines not on this page · raw message
lib/zstd/compress.c deleted +0 -3518
3,518 lines not on this page · raw message
lib/zstd/compress/fse_compress.c new file +625 -0
625 lines not on this page · raw message
lib/zstd/compress/hist.c new file +165 -0
165 lines not on this page · raw message
lib/zstd/compress/hist.h new file +75 -0
75 lines not on this page · raw message
lib/zstd/compress/huf_compress.c new file +902 -0
902 lines not on this page · raw message
lib/zstd/compress/zstd_compress.c new file +5105 -0
5,105 lines not on this page · raw message
lib/zstd/compress/zstd_compress_internal.h new file +1188 -0
1,188 lines not on this page · raw message
lib/zstd/compress/zstd_compress_literals.c new file +158 -0
158 lines not on this page · raw message
lib/zstd/compress/zstd_compress_literals.h new file +29 -0
Lines of this file are not shown. View the raw message.
lib/zstd/compress/zstd_compress_sequences.c new file +439 -0
439 lines not on this page · raw message
lib/zstd/compress/zstd_compress_sequences.h new file +54 -0
54 lines not on this page · raw message
lib/zstd/compress/zstd_compress_superblock.c new file +850 -0
850 lines not on this page · raw message
lib/zstd/compress/zstd_compress_superblock.h new file +32 -0
Lines of this file are not shown. View the raw message.
lib/zstd/compress/zstd_cwksp.h new file +482 -0
482 lines not on this page · raw message
lib/zstd/compress/zstd_double_fast.c new file +521 -0
521 lines not on this page · raw message
lib/zstd/compress/zstd_double_fast.h new file +32 -0
Lines of this file are not shown. View the raw message.
lib/zstd/compress/zstd_fast.c new file +496 -0
496 lines not on this page · raw message
lib/zstd/compress/zstd_fast.h new file +31 -0
Lines of this file are not shown. View the raw message.
lib/zstd/compress/zstd_lazy.c new file +1412 -0
1,412 lines not on this page · raw message
lib/zstd/compress/zstd_lazy.h new file +81 -0
81 lines not on this page · raw message
lib/zstd/compress/zstd_ldm.c new file +686 -0
686 lines not on this page · raw message
lib/zstd/compress/zstd_ldm.h new file +110 -0
110 lines not on this page · raw message
lib/zstd/compress/zstd_ldm_geartab.h new file +103 -0
103 lines not on this page · raw message
lib/zstd/compress/zstd_opt.c new file +1345 -0
1,345 lines not on this page · raw message
lib/zstd/compress/zstd_opt.h new file +50 -0
50 lines not on this page · raw message
lib/zstd/decompress.c deleted +0 -2571
2,571 lines not on this page · raw message
lib/zstd/decompress/huf_decompress.c new file +1206 -0
1,206 lines not on this page · raw message
lib/zstd/decompress/zstd_ddict.c new file +241 -0
241 lines not on this page · raw message
lib/zstd/decompress/zstd_ddict.h new file +44 -0
44 lines not on this page · raw message
lib/zstd/decompress/zstd_decompress.c new file +2075 -0
2,075 lines not on this page · raw message
lib/zstd/decompress/zstd_decompress_block.c new file +1540 -0
1,540 lines not on this page · raw message
lib/zstd/decompress/zstd_decompress_block.h new file +62 -0
62 lines not on this page · raw message
lib/zstd/decompress/zstd_decompress_internal.h new file +202 -0
202 lines not on this page · raw message
lib/zstd/entropy_common.c deleted +0 -243
243 lines not on this page · raw message
lib/zstd/error_private.h deleted +0 -53
53 lines not on this page · raw message
lib/zstd/fse.h deleted +0 -575
575 lines not on this page · raw message
lib/zstd/fse_compress.c deleted +0 -795
795 lines not on this page · raw message
lib/zstd/fse_decompress.c deleted +0 -325
325 lines not on this page · raw message
lib/zstd/huf.h deleted +0 -212
212 lines not on this page · raw message
lib/zstd/huf_compress.c deleted +0 -773
773 lines not on this page · raw message
lib/zstd/huf_decompress.c deleted +0 -960
960 lines not on this page · raw message
lib/zstd/mem.h deleted +0 -151
151 lines not on this page · raw message
lib/zstd/zstd_common.c deleted +0 -75
75 lines not on this page · raw message
lib/zstd/zstd_compress_module.c new file +103 -0
103 lines not on this page · raw message
lib/zstd/zstd_decompress_module.c new file +96 -0
96 lines not on this page · raw message
lib/zstd/zstd_internal.h deleted +0 -273
273 lines not on this page · raw message
lib/zstd/zstd_opt.h deleted +0 -1014
1,014 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.31.0
Part of the diff is not shown here. View the raw message.
kernel test robot
build botRe: [PATCH v8 3/3] lib: zstd: Upgrade to latest upstream zstd version 1.4.10
Thank you for the patch! Perhaps something to improve:
Hi Nick,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on cryptodev/master]
[also build test WARNING on kdave/for-next f2fs/dev-test linus/master v5.12-rc4 next-20210326] [cannot apply to crypto/master kees/for-next/pstore squashfs/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Nick-Terrell/Update-to-zstd-1-4-10/20210327-031827 base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master config: um-allmodconfig (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/ebbff13fa6a537fb8b3dc6b42c3093f9ce4358f8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Nick-Terrell/Update-to-zstd-1-4-10/20210327-031827 git checkout ebbff13fa6a537fb8b3dc6b42c3093f9ce4358f8
# save the attached .config to linux build tree
make W=1 ARCH=um
If you fix the issue, kindly add following tag as appropriate
All warnings (new ones prefixed by >>):
lib/zstd/compress/zstd_compress_sequences.c:17: warning: Cannot understand * -log2(x / 256) lookup table for x in [0, 256).
on line 17 - I thought it was a doc line
lib/zstd/compress/zstd_compress_sequences.c:58: warning: Function parameter or member 'nbSeq' not described in 'ZSTD_useLowProbCount'
>> lib/zstd/compress/zstd_compress_sequences.c:58: warning: expecting prototype for 1 else we should(). Prototype was for ZSTD_useLowProbCount() instead
>> lib/zstd/compress/zstd_compress_sequences.c:67: warning: wrong kernel-doc identifier on line:
* Returns the cost in bytes of encoding the normalized count header.
lib/zstd/compress/zstd_compress_sequences.c:85: warning: Function parameter or member 'count' not described in 'ZSTD_entropyCost'
lib/zstd/compress/zstd_compress_sequences.c:85: warning: Function parameter or member 'max' not described in 'ZSTD_entropyCost'
lib/zstd/compress/zstd_compress_sequences.c:85: warning: Function parameter or member 'total' not described in 'ZSTD_entropyCost'
>> lib/zstd/compress/zstd_compress_sequences.c:85: warning: expecting prototype for Returns the cost in bits of encoding the distribution described by count(). Prototype was for ZSTD_entropyCost() instead
lib/zstd/compress/zstd_compress_sequences.c:99: warning: wrong kernel-doc identifier on line:
* Returns the cost in bits of encoding the distribution in count using ctable.
lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'norm' not described in 'ZSTD_crossEntropyCost'
lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'accuracyLog' not described in 'ZSTD_crossEntropyCost'
lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'count' not described in 'ZSTD_crossEntropyCost'
lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'max' not described in 'ZSTD_crossEntropyCost'
>> lib/zstd/compress/zstd_compress_sequences.c:139: warning: expecting prototype for Returns the cost in bits of encoding the distribution in count using the(). Prototype was for ZSTD_crossEntropyCost() instead--
lib/zstd/compress/zstd_ldm.c:584: warning: Function parameter or member 'rawSeqStore' not described in 'maybeSplitSequence' lib/zstd/compress/zstd_ldm.c:584: warning: Function parameter or member 'remaining' not described in 'maybeSplitSequence' lib/zstd/compress/zstd_ldm.c:584: warning: Function parameter or member 'minMatch' not described in 'maybeSplitSequence'
>> lib/zstd/compress/zstd_ldm.c:584: warning: expecting prototype for If the sequence length is longer than remaining then the sequence is split(). Prototype was for maybeSplitSequence() instead -- >> lib/zstd/decompress/zstd_decompress.c:992: warning: wrong kernel-doc identifier on line:
* Similar to ZSTD_nextSrcSizeToDecompress(), but when when a block input can be streamed,
--
lib/zstd/decompress/huf_decompress.c:122: warning: Function parameter or member 'symbol' not described in 'HUF_DEltX1_set4' lib/zstd/decompress/huf_decompress.c:122: warning: Function parameter or member 'nbBits' not described in 'HUF_DEltX1_set4'
>> lib/zstd/decompress/huf_decompress.c:122: warning: expecting prototype for This is used to lay down 4 entries at(). Prototype was for HUF_DEltX1_set4() instead
--
>> lib/zstd/compress/zstd_compress.c:128: warning: wrong kernel-doc identifier on line:
* Clears and frees all of the dictionaries in the CCtx.
lib/zstd/compress/zstd_compress.c:265: warning: wrong kernel-doc identifier on line:
* Initializes the cctxParams from params and compressionLevel.
lib/zstd/compress/zstd_compress.c:289: warning: wrong kernel-doc identifier on line:
* Sets cctxParams' cParams and fParams from params, but otherwise leaves them alone.
lib/zstd/compress/zstd_compress.c:910: warning: wrong kernel-doc identifier on line:
* Initializes the local dict using the requested parameters.
lib/zstd/compress/zstd_compress.c:1457: warning: wrong kernel-doc identifier on line:
* Controls, for this matchState reset, whether the tables need to be cleared /
lib/zstd/compress/zstd_compress.c:1473: warning: cannot understand function prototype: 'typedef enum '
lib/zstd/compress/zstd_compress.c:5008: warning: Function parameter or member 'cParams' not described in 'ZSTD_dedicatedDictSearch_revertCParams'
>> lib/zstd/compress/zstd_compress.c:5008: warning: expecting prototype for Reverses the adjustment applied to cparams when enabling dedicated dict(). Prototype was for ZSTD_dedicatedDictSearch_revertCParams() insteadvim +58 lib/zstd/compress/zstd_compress_sequences.c
52
53 /**
54 * Returns true if we should use ncount=-1 else we should
55 * use ncount=1 for low probability symbols instead.
56 */
57 static unsigned ZSTD_useLowProbCount(size_t const nbSeq)
> 58 {
59 /* Heuristic: This should cover most blocks <= 16K and
60 * start to fade out after 16K to about 32K depending on
61 * comprssibility.
62 */
63 return nbSeq >= 2048;
64 }
65
66 /**
> 67 * Returns the cost in bytes of encoding the normalized count header.
68 * Returns an error if any of the helper functions return an error.
69 */
70 static size_t ZSTD_NCountCost(unsigned const* count, unsigned const max,
71 size_t const nbSeq, unsigned const FSELog)
72 {
73 BYTE wksp[FSE_NCOUNTBOUND];
74 S16 norm[MaxSeq + 1];
75 const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max);
76 FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq, max, ZSTD_useLowProbCount(nbSeq)), "");
77 return FSE_writeNCount(wksp, sizeof(wksp), norm, max, tableLog);
78 }
79
80 /**
81 * Returns the cost in bits of encoding the distribution described by count
82 * using the entropy bound.
83 */
84 static size_t ZSTD_entropyCost(unsigned const* count, unsigned const max, size_t const total)
> 85 {
86 unsigned cost = 0;
87 unsigned s;
88 for (s = 0; s <= max; ++s) {
89 unsigned norm = (unsigned)((256 * count[s]) / total);
90 if (count[s] != 0 && norm == 0)
91 norm = 1;
92 assert(count[s] < total);
93 cost += count[s] * kInverseProbabilityLog256[norm];
94 }
95 return cost >> 8;
96 }
97
98 /**
99 * Returns the cost in bits of encoding the distribution in count using ctable.
100 * Returns an error if ctable cannot represent all the symbols in count.
101 */
102 size_t ZSTD_fseBitCost(
103 FSE_CTable const* ctable,
104 unsigned const* count,
105 unsigned const max)
106 {
107 unsigned const kAccuracyLog = 8;
108 size_t cost = 0;
109 unsigned s;
110 FSE_CState_t cstate;
111 FSE_initCState(&cstate, ctable);
112 if (ZSTD_getFSEMaxSymbolValue(ctable) < max) {
113 DEBUGLOG(5, "Repeat FSE_CTable has maxSymbolValue %u < %u",
114 ZSTD_getFSEMaxSymbolValue(ctable), max);
115 return ERROR(GENERIC);
116 }
117 for (s = 0; s <= max; ++s) {
118 unsigned const tableLog = cstate.stateLog;
119 unsigned const badCost = (tableLog + 1) << kAccuracyLog;
120 unsigned const bitCost = FSE_bitCost(cstate.symbolTT, tableLog, s, kAccuracyLog);
121 if (count[s] == 0)
122 continue;
123 if (bitCost >= badCost) {
124 DEBUGLOG(5, "Repeat FSE_CTable has Prob[%u] == 0", s);
125 return ERROR(GENERIC);
126 }
127 cost += (size_t)count[s] * bitCost;
128 }
129 return cost >> kAccuracyLog;
130 }
131
132 /**
133 * Returns the cost in bits of encoding the distribution in count using the
134 * table described by norm. The max symbol support by norm is assumed >= max.
135 * norm must be valid for every symbol with non-zero probability in count.
136 */
137 size_t ZSTD_crossEntropyCost(short const* norm, unsigned accuracyLog,
138 unsigned const* count, unsigned const max)
> 139 {
140 unsigned const shift = 8 - accuracyLog;
141 size_t cost = 0;
142 unsigned s;
143 assert(accuracyLog <= 8);
144 for (s = 0; s <= max; ++s) {
145 unsigned const normAcc = (norm[s] != -1) ? (unsigned)norm[s] : 1;
146 unsigned const norm256 = normAcc << shift;
147 assert(norm256 > 0);
148 assert(norm256 < 256);
149 cost += count[s] * kInverseProbabilityLog256[norm256]; 150 }
151 return cost >> 8;
152 }
153
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
Re: [PATCH v8 3/3] lib: zstd: Upgrade to latest upstream zstd version 1.4.10
Quoted 164 lines · kernel test robot
Hi Nick,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on cryptodev/master]
[also build test WARNING on kdave/for-next f2fs/dev-test linus/master v5.12-rc4 next-20210326] [cannot apply tocrypto/masterkees/for-next/pstore squashfs/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]url: https://github.com/0day-ci/linux/commits/Nick-Terrell/Update-to-zstd-1-4-10/20210327-031827 base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master config: um-allmodconfig (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/ebbff13fa6a537fb8b3dc6b42c3093f9ce4358f8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Nick-Terrell/Update-to-zstd-1-4-10/20210327-031827 git checkoutebbff13fa6a537fb8b3dc6b42c3093f9ce4358f8
# save the attached .config to linux build tree
make W=1 ARCH=umIf you fix the issue, kindly add following tag as appropriate
Reported-by kernel test robot <[email protected]>All warnings (new ones prefixed by >>):
lib/zstd/compress/zstd_compress_sequences.c:17: warning: Cannot understand * -log2(x / 256) lookup table for x in [0, 256).
on line 17 - I thought it was a doc line
lib/zstd/compress/zstd_compress_sequences.c:58: warning: Function parameter or member 'nbSeq' not described in 'ZSTD_useLowProbCount'Quoted 2 lines
Quoted 2 lines
lib/zstd/compress/zstd_compress_sequences.c:58: warning: expecting prototype for 1 else weshould(). Prototype was forZSTD_useLowProbCount()insteadlib/zstd/compress/zstd_compress_sequences.c:67: warning: wrong kernel-doc identifier on line:* Returns the cost in bytes of encoding the normalized count header.
lib/zstd/compress/zstd_compress_sequences.c:85: warning: Function parameter or member 'count' not described in 'ZSTD_entropyCost'lib/zstd/compress/zstd_compress_sequences.c:85: warning: Function parameter or member 'max' not described in 'ZSTD_entropyCost'lib/zstd/compress/zstd_compress_sequences.c:85: warning: Function parameter or member 'total' not described in 'ZSTD_entropyCost'Quoted 1 line
Quoted 1 line
lib/zstd/compress/zstd_compress_sequences.c:85: warning: expecting prototype for Returns the cost in bits of encoding the distribution described bycount(). Prototype was forZSTD_entropyCost()instead
lib/zstd/compress/zstd_compress_sequences.c:99: warning: wrong kernel-doc identifier on line:
* Returns the cost in bits of encoding the distribution in count using ctable.
lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'norm' not described in 'ZSTD_crossEntropyCost'lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'accuracyLog' not described in 'ZSTD_crossEntropyCost'lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'count' not described in 'ZSTD_crossEntropyCost'lib/zstd/compress/zstd_compress_sequences.c:139: warning: Function parameter or member 'max' not described in 'ZSTD_crossEntropyCost'Quoted 1 line
Quoted 1 line
lib/zstd/compress/zstd_compress_sequences.c:139: warning: expecting prototype for Returns the cost in bits of encoding the distribution in count usingthe(). Prototype was forZSTD_crossEntropyCost()instead--
lib/zstd/compress/zstd_ldm.c:584: warning: Function parameter or member 'rawSeqStore' not described in 'maybeSplitSequence'lib/zstd/compress/zstd_ldm.c:584: warning: Function parameter or member 'remaining' not described in 'maybeSplitSequence'lib/zstd/compress/zstd_ldm.c:584: warning: Function parameter or member 'minMatch' not described in 'maybeSplitSequence'Quoted 1 line
Quoted 1 line
lib/zstd/compress/zstd_ldm.c:584: warning: expecting prototype for If the sequence length is longer than remaining then the sequence issplit(). Prototype was formaybeSplitSequence()instead--
Quoted 1 line
Quoted 1 line
lib/zstd/decompress/zstd_decompress.c:992: warning: wrong kernel-doc identifier on line:* Similar to
ZSTD_nextSrcSizeToDecompress(), but when when a block input can be streamed,
--
lib/zstd/decompress/huf_decompress.c:122: warning: Function parameter or member 'symbol' not described in 'HUF_DEltX1_set4'lib/zstd/decompress/huf_decompress.c:122: warning: Function parameter or member 'nbBits' not described in 'HUF_DEltX1_set4'Quoted 1 line
Quoted 1 line
lib/zstd/decompress/huf_decompress.c:122: warning: expecting prototype for This is used to lay down 4 entriesat(). Prototype was forHUF_DEltX1_set4()instead--
Quoted 1 line
Quoted 1 line
lib/zstd/compress/zstd_compress.c:128: warning: wrong kernel-doc identifier on line:* Clears and frees all of the dictionaries in the CCtx.
lib/zstd/compress/zstd_compress.c:265: warning: wrong kernel-doc identifier on line:
* Initializes the cctxParams from params and compressionLevel.
lib/zstd/compress/zstd_compress.c:289: warning: wrong kernel-doc identifier on line:
* Sets cctxParams' cParams and fParams from params, but otherwise leaves them alone.
lib/zstd/compress/zstd_compress.c:910: warning: wrong kernel-doc identifier on line:
* Initializes the local dict using the requested parameters.
lib/zstd/compress/zstd_compress.c:1457: warning: wrong kernel-doc identifier on line:
* Controls, for this matchState reset, whether the tables need to be cleared /
lib/zstd/compress/zstd_compress.c:1473: warning: cannot understand function prototype: 'typedef enum 'lib/zstd/compress/zstd_compress.c:5008: warning: Function parameter or member 'cParams' not described in 'ZSTD_dedicatedDictSearch_revertCParams'Quoted 1 line
Quoted 1 line
lib/zstd/compress/zstd_compress.c:5008: warning: expecting prototype for Reverses the adjustment applied to cparams when enabling dedicateddict(). Prototype was forZSTD_dedicatedDictSearch_revertCParams()insteadvim +58
lib/zstd/compress/zstd_compress_sequences.c52
53 /**
54 * Returns true if we should use ncount=-1 else we should
55 * use ncount=1 for low probability symbols instead.
56 */
57 static unsignedZSTD_useLowProbCount(size_t const nbSeq)Quoted 1 line
58 {
59 /* Heuristic: This should cover most blocks <= 16K and 60 * start to fade out after 16K to about 32K depending on 61 * comprssibility. 62 */ 63 return nbSeq >= 2048; 64 } 65 66 /**Quoted 1 line
67 * Returns the cost in bytes of encoding the normalized count header.
68 * Returns an error if any of the helper functions return an error. 69 */ 70 static size_t ZSTD_NCountCost(unsigned const* count, unsigned const max, 71 size_t const nbSeq, unsigned const FSELog) 72 { 73 BYTE wksp[FSE_NCOUNTBOUND]; 74 S16 norm[MaxSeq + 1]; 75 const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max); 76 FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq, max, ZSTD_useLowProbCount(nbSeq)), ""); 77 return FSE_writeNCount(wksp, sizeof(wksp), norm, max, tableLog); 78 } 79 80 /** 81 * Returns the cost in bits of encoding the distribution described by count 82 * using the entropy bound. 83 */ 84 static size_t ZSTD_entropyCost(unsigned const* count, unsigned const max, size_t const total)Quoted 1 line
85 {
86 unsigned cost = 0; 87 unsigned s; 88 for (s = 0; s <= max; ++s) { 89 unsigned norm = (unsigned)((256 * count[s]) / total); 90 if (count[s] != 0 && norm == 0) 91 norm = 1; 92 assert(count[s] < total); 93 cost += count[s] * kInverseProbabilityLog256[norm]; 94 } 95 return cost >> 8; 96 } 97 98 /** 99 * Returns the cost in bits of encoding the distribution in count using ctable. 100 * Returns an error if ctable cannot represent all the symbols in count. 101 */ 102 size_t ZSTD_fseBitCost( 103 FSE_CTable const* ctable, 104 unsigned const* count, 105 unsigned const max) 106 { 107 unsigned const kAccuracyLog = 8; 108 size_t cost = 0; 109 unsigned s; 110 FSE_CState_t cstate; 111 FSE_initCState(&cstate, ctable); 112 if (ZSTD_getFSEMaxSymbolValue(ctable) < max) { 113 DEBUGLOG(5, "Repeat FSE_CTable has maxSymbolValue %u < %u", 114 ZSTD_getFSEMaxSymbolValue(ctable), max); 115 return ERROR(GENERIC); 116 } 117 for (s = 0; s <= max; ++s) { 118 unsigned const tableLog = cstate.stateLog; 119 unsigned const badCost = (tableLog + 1) << kAccuracyLog; 120 unsigned const bitCost = FSE_bitCost(cstate.symbolTT, tableLog, s, kAccuracyLog); 121 if (count[s] == 0) 122 continue; 123 if (bitCost >= badCost) { 124 DEBUGLOG(5, "Repeat FSE_CTable has Prob[%u] == 0", s); 125 return ERROR(GENERIC); 126 } 127 cost += (size_t)count[s] * bitCost; 128 } 129 return cost >> kAccuracyLog; 130 } 131 132 /** 133 * Returns the cost in bits of encoding the distribution in count using the 134 * table described by norm. The max symbol support by norm is assumed >= max. 135 * norm must be valid for every symbol with non-zero probability in count. 136 */ 137 size_t ZSTD_crossEntropyCost(short const* norm, unsigned accuracyLog, 138 unsigned const* count, unsigned const max)Quoted 1 line
139 {
Quoted 15 lines
140 unsigned const shift = 8 - accuracyLog;
141 size_t cost = 0;
142 unsigned s;
143 assert(accuracyLog <= 8);
144 for (s = 0; s <= max; ++s) {
145 unsigned const normAcc = (norm[s] != -1) ? (unsigned)norm[s] : 1;
146 unsigned const norm256 = normAcc << shift;
147 assert(norm256 > 0);
148 assert(norm256 < 256);
149 cost += count[s] * kInverseProbabilityLog256[norm256];
150 }
151 return cost >> 8;
152 }
153These all seem to be comment style warnings. Since this is code imported from an upstream project, it doesn't make sense to adhere to the kernel comment style. The public header include/linux/zstd.h should adhere to the kernel style guide, but not lib/zstd.
-Nick
Quoted 3 lines
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org