mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-19 12:24:34 +08:00
7481cddf29
Unlike crc32c(), which is wired up to the crypto API internally so the optimal driver is selected based on the platform's capabilities, crc32_le() is implemented as a library function using a slice-by-8 table based C implementation. Even though few of the call sites may be bottlenecks, calling a time variant implementation with a non-negligible D-cache footprint is a bit of a waste, given that ARMv8.1 and up mandates support for the CRC32 instructions that were optional in ARMv8.0, but are already widely available, even on the Cortex-A53 based Raspberry Pi. So implement routines that use these instructions if available, and fall back to the existing generic routines otherwise. The selection is based on alternatives patching. Note that this unconditionally selects CONFIG_CRC32 as a builtin. Since CRC32 is relied upon by core functionality such as CONFIG_OF_FLATTREE, this just codifies the status quo. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
30 lines
1.3 KiB
Makefile
30 lines
1.3 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
lib-y := clear_user.o delay.o copy_from_user.o \
|
|
copy_to_user.o copy_in_user.o copy_page.o \
|
|
clear_page.o memchr.o memcpy.o memmove.o memset.o \
|
|
memcmp.o strcmp.o strncmp.o strlen.o strnlen.o \
|
|
strchr.o strrchr.o tishift.o
|
|
|
|
# Tell the compiler to treat all general purpose registers (with the
|
|
# exception of the IP registers, which are already handled by the caller
|
|
# in case of a PLT) as callee-saved, which allows for efficient runtime
|
|
# patching of the bl instruction in the caller with an atomic instruction
|
|
# when supported by the CPU. Result and argument registers are handled
|
|
# correctly, based on the function prototype.
|
|
lib-$(CONFIG_ARM64_LSE_ATOMICS) += atomic_ll_sc.o
|
|
CFLAGS_atomic_ll_sc.o := -fcall-used-x0 -ffixed-x1 -ffixed-x2 \
|
|
-ffixed-x3 -ffixed-x4 -ffixed-x5 -ffixed-x6 \
|
|
-ffixed-x7 -fcall-saved-x8 -fcall-saved-x9 \
|
|
-fcall-saved-x10 -fcall-saved-x11 -fcall-saved-x12 \
|
|
-fcall-saved-x13 -fcall-saved-x14 -fcall-saved-x15 \
|
|
-fcall-saved-x18 -fomit-frame-pointer
|
|
CFLAGS_REMOVE_atomic_ll_sc.o := -pg
|
|
GCOV_PROFILE_atomic_ll_sc.o := n
|
|
KASAN_SANITIZE_atomic_ll_sc.o := n
|
|
KCOV_INSTRUMENT_atomic_ll_sc.o := n
|
|
UBSAN_SANITIZE_atomic_ll_sc.o := n
|
|
|
|
lib-$(CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE) += uaccess_flushcache.o
|
|
|
|
obj-$(CONFIG_CRC32) += crc32.o
|