• Arvind Sankar's avatar
    x86/boot/compressed: Use builtin mem functions for decompressor · 394b19d6
    Arvind Sankar authored
    Since commits
    
      c041b5ad ("x86, boot: Create a separate string.h file to provide standard string functions")
      fb4cac57 ("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: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Suggested-by: default avatarNick Terrell <nickrterrell@gmail.com>
    Tested-by: default avatarNick Terrell <nickrterrell@gmail.com>
    Acked-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    394b19d6
string.h 1.1 KB