diff --git a/contrib/linux-kernel/Makefile b/contrib/linux-kernel/Makefile index fbd4a4ab1..b1c7f6f72 100644 --- a/contrib/linux-kernel/Makefile +++ b/contrib/linux-kernel/Makefile @@ -39,7 +39,6 @@ libzstd: -DZSTD_ADDRESS_SANITIZER=0 \ -DZSTD_MEMORY_SANITIZER=0 \ -DZSTD_COMPRESS_HEAPMODE=1 \ - -UZSTD_NO_INLINE \ -UNO_PREFETCH \ -U__cplusplus \ -UZSTD_DLL_EXPORT \ @@ -53,7 +52,8 @@ libzstd: -RZSTD_FALLTHROUGH=fallthrough \ -DZSTD_HAVE_WEAK_SYMBOLS=0 \ -DZSTD_TRACE=0 \ - -DZSTD_NO_TRACE + -DZSTD_NO_TRACE \ + -DZSTD_LINUX_KERNEL mv linux/lib/zstd/zstd.h linux/include/linux/zstd_lib.h mv linux/lib/zstd/common/zstd_errors.h linux/include/linux/ cp linux_zstd.h linux/include/linux/zstd.h diff --git a/contrib/linux-kernel/test/macro-test.sh b/contrib/linux-kernel/test/macro-test.sh index c688ac03b..3363cfcdf 100755 --- a/contrib/linux-kernel/test/macro-test.sh +++ b/contrib/linux-kernel/test/macro-test.sh @@ -36,7 +36,6 @@ test_not_present "ZSTD_NO_INTRINSICS" test_not_present "ZSTD_NO_UNUSED_FUNCTIONS" test_not_present "ZSTD_LEGACY_SUPPORT" test_not_present "STATIC_BMI2" -test_not_present "ZSTD_NO_INLINE" test_not_present "ZSTD_DLL_EXPORT" test_not_present "ZSTD_DLL_IMPORT" test_not_present "__ICCARM__" diff --git a/lib/compress/zstd_opt.c b/lib/compress/zstd_opt.c index d9fbfef1f..c1b311eff 100644 --- a/lib/compress/zstd_opt.c +++ b/lib/compress/zstd_opt.c @@ -8,6 +8,20 @@ * You may select, at your option, one of the above-listed licenses. */ +/** + * Disable inlining for the optimal parser for the kernel build. + * It is unlikely to be used in the kernel, and where it is used + * latency shouldn't matter because it is very slow to begin with. + * We prefer a ~180KB binary size win over faster optimal parsing. + * + * TODO(https://github.com/facebook/zstd/issues/2862): + * Improve the code size of the optimal parser in general, so we + * don't need this hack for the kernel build. + */ +#ifdef ZSTD_LINUX_KERNEL +#define ZSTD_NO_INLINE 1 +#endif + #include "zstd_compress_internal.h" #include "hist.h" #include "zstd_opt.h" @@ -894,7 +908,7 @@ static void ZSTD_optLdm_processMatchCandidate(ZSTD_optLdm_t* optLdm, ZSTD_match_ */ U32 posOvershoot = currPosInBlock - optLdm->endPosInBlock; ZSTD_optLdm_skipRawSeqStoreBytes(&optLdm->seqStore, posOvershoot); - } + } ZSTD_opt_getNextMatchAndUpdateSeqStore(optLdm, currPosInBlock, remainingBytes); } ZSTD_optLdm_maybeAddMatch(matches, nbMatches, optLdm, currPosInBlock);