]> git.baikalelectronics.ru Git - kernel.git/commit
x86/boot/compressed: Use builtin mem functions for decompressor
authorArvind Sankar <nivedita@alum.mit.edu>
Tue, 4 Aug 2020 23:48:17 +0000 (19:48 -0400)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 19 Aug 2020 18:23:45 +0000 (11:23 -0700)
commit760d37adc6e25ce61865a9b3dd403597001b2884
treed85db3a61b2c64459e667f25bc5cca3e1349bf65
parent3559967e2fa78c298e585cfc4b8e135ecb47edcd
x86/boot/compressed: Use builtin mem functions for decompressor

Since commits

  19a122c5db4a ("x86, boot: Create a separate string.h file to provide standard string functions")
  09ea54df991e ("x86, boot: Move memcmp() into string.h and string.c")

the decompressor stub has been using the compiler's builtin memcpy,
memset and memcmp functions, _except_ where it would likely have the
largest impact, in the decompression code itself.

Remove the #undef's of memcpy and memset in misc.c so that the
decompressor code also uses the compiler builtins.

The rationale given in the comment doesn't really apply: just because
some functions use the out-of-line version is no reason to not use the
builtin version in the rest.

Replace the comment with an explanation of why memzero and memmove are
being #define'd.

Drop the suggestion to #undef in boot/string.h as well: the out-of-line
versions are not really optimized versions, they're generic code that's
good enough for the preboot environment. The compiler will likely
generate better code for constant-size memcpy/memset/memcmp if it is
allowed to.

Most decompressors' performance is unchanged, with the exception of LZ4
and 64-bit ZSTD.

Before After ARCH
LZ4   73ms  10ms   32
LZ4  120ms  10ms 64
ZSTD   90ms  74ms 64

Measurements on QEMU on 2.2GHz Broadwell Xeon, using defconfig kernels.

Decompressor code size has small differences, with the largest being
that 64-bit ZSTD decreases just over 2k. The largest code size increase
was on 64-bit XZ, of about 400 bytes.

Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Suggested-by: Nick Terrell <nickrterrell@gmail.com>
Tested-by: Nick Terrell <nickrterrell@gmail.com>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86/boot/compressed/misc.c
arch/x86/boot/string.h