]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
[linux-kernel] Don't inline function in zstd_opt.c 2864/head
authorNick Terrell <terrelln@fb.com>
Tue, 16 Nov 2021 00:57:00 +0000 (16:57 -0800)
committerNick Terrell <terrelln@fb.com>
Tue, 16 Nov 2021 04:37:30 +0000 (20:37 -0800)
The optimal parser is unlikely to be used in the linux kernel in
practice. There is no reason these functions should be force inlined,
since we aren't gaining anything, and are losing build size.

| Compiler | Before (Bytes) | After (Bytes) | Delta (Bytes) |
|----------|----------------|---------------|---------------|
| gcc-11   |        1142090 |        952754 |       -189336 |
| clang-12 |        1228402 |        976290 |       -252112 |

This is a temporary solution pending the resolution of PR #2862 in the
`dev` branch.

contrib/linux-kernel/Makefile
contrib/linux-kernel/test/macro-test.sh
lib/compress/zstd_opt.c

index f79de67925966ccc4425376d2d0e4cdb3f874e39..47a4317404bde66d9abef58357db13e2bfd88ab6 100644 (file)
@@ -41,7 +41,6 @@ libzstd:
                -DZSTD_MEMORY_SANITIZER=0 \
                -DZSTD_DATAFLOW_SANITIZER=0 \
                -DZSTD_COMPRESS_HEAPMODE=1 \
-               -UZSTD_NO_INLINE \
                -UNO_PREFETCH \
                -U__cplusplus \
                -UZSTD_DLL_EXPORT \
@@ -55,7 +54,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/zstd_errors.h linux/include/linux/
        cp linux_zstd.h linux/include/linux/zstd.h
index bde6cbb569c29be078b8bf4374586b3c83d0099b..9ea84aa66b1a212a1ae034e35072662e7a17e18d 100755 (executable)
@@ -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__"
index 909e06d0588d616c70be0785699ec4f5bc4fb354..0488589ffbb935fa470af0b3f016da58af119158 100644 (file)
@@ -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"