mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
lib/crc: riscv: Migrate optimized CRC code into lib/crc/
Move the riscv-optimized CRC code from arch/riscv/lib/crc* into its new location in lib/crc/riscv/, and wire it up in the new way. This new way of organizing the CRC code eliminates the need to artificially split the code for each CRC variant into separate arch and generic modules, enabling better inlining and dead code elimination. For more details, see "lib/crc: Prepare for arch-optimized code in subdirs of lib/crc/". Reviewed-by: "Martin K. Petersen" <martin.petersen@oracle.com> Acked-by: Ingo Molnar <mingo@kernel.org> Acked-by: "Jason A. Donenfeld" <Jason@zx2c4.com> Link: https://lore.kernel.org/r/20250607200454.73587-9-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@kernel.org>
This commit is contained in:
parent
190c253d86
commit
b5943815e6
15 changed files with 13 additions and 38 deletions
|
@ -24,9 +24,6 @@ config RISCV
|
|||
select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
|
||||
select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_BINFMT_FLAT
|
||||
select ARCH_HAS_CRC32 if RISCV_ISA_ZBC
|
||||
select ARCH_HAS_CRC64 if 64BIT && RISCV_ISA_ZBC
|
||||
select ARCH_HAS_CRC_T10DIF if RISCV_ISA_ZBC
|
||||
select ARCH_HAS_CURRENT_STACK_POINTER
|
||||
select ARCH_HAS_DEBUG_VIRTUAL if MMU
|
||||
select ARCH_HAS_DEBUG_VM_PGTABLE
|
||||
|
|
|
@ -16,12 +16,6 @@ endif
|
|||
lib-$(CONFIG_MMU) += uaccess.o
|
||||
lib-$(CONFIG_64BIT) += tishift.o
|
||||
lib-$(CONFIG_RISCV_ISA_ZICBOZ) += clear_page.o
|
||||
obj-$(CONFIG_CRC32_ARCH) += crc32-riscv.o
|
||||
crc32-riscv-y := crc32.o crc32_msb.o crc32_lsb.o
|
||||
obj-$(CONFIG_CRC64_ARCH) += crc64-riscv.o
|
||||
crc64-riscv-y := crc64.o crc64_msb.o crc64_lsb.o
|
||||
obj-$(CONFIG_CRC_T10DIF_ARCH) += crc-t10dif-riscv.o
|
||||
crc-t10dif-riscv-y := crc-t10dif.o crc16_msb.o
|
||||
obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o
|
||||
lib-$(CONFIG_RISCV_ISA_V) += xor.o
|
||||
lib-$(CONFIG_RISCV_ISA_V) += riscv_v_helpers.o
|
||||
|
|
|
@ -53,6 +53,7 @@ config CRC_T10DIF_ARCH
|
|||
default y if ARM && KERNEL_MODE_NEON
|
||||
default y if ARM64 && KERNEL_MODE_NEON
|
||||
default y if PPC64 && ALTIVEC
|
||||
default y if RISCV && RISCV_ISA_ZBC
|
||||
|
||||
config CRC32
|
||||
tristate
|
||||
|
@ -72,6 +73,7 @@ config CRC32_ARCH
|
|||
default y if LOONGARCH
|
||||
default y if MIPS && CPU_MIPSR6
|
||||
default y if PPC64 && ALTIVEC
|
||||
default y if RISCV && RISCV_ISA_ZBC
|
||||
|
||||
config CRC64
|
||||
tristate
|
||||
|
@ -85,6 +87,7 @@ config ARCH_HAS_CRC64
|
|||
config CRC64_ARCH
|
||||
bool
|
||||
depends on CRC64 && CRC_OPTIMIZATIONS
|
||||
default y if RISCV && RISCV_ISA_ZBC && 64BIT
|
||||
|
||||
config CRC_OPTIMIZATIONS
|
||||
bool "Enable optimized CRC implementations" if EXPERT
|
||||
|
|
|
@ -16,6 +16,7 @@ CFLAGS_crc-t10dif-main.o += -I$(src)/$(SRCARCH)
|
|||
crc-t10dif-$(CONFIG_ARM) += arm/crc-t10dif-core.o
|
||||
crc-t10dif-$(CONFIG_ARM64) += arm64/crc-t10dif-core.o
|
||||
crc-t10dif-$(CONFIG_PPC) += powerpc/crct10dif-vpmsum_asm.o
|
||||
crc-t10dif-$(CONFIG_RISCV) += riscv/crc16_msb.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_CRC32) += crc32.o
|
||||
|
@ -25,12 +26,14 @@ CFLAGS_crc32-main.o += -I$(src)/$(SRCARCH)
|
|||
crc32-$(CONFIG_ARM) += arm/crc32-core.o
|
||||
crc32-$(CONFIG_ARM64) += arm64/crc32-core.o
|
||||
crc32-$(CONFIG_PPC) += powerpc/crc32c-vpmsum_asm.o
|
||||
crc32-$(CONFIG_RISCV) += riscv/crc32_lsb.o riscv/crc32_msb.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_CRC64) += crc64.o
|
||||
crc64-y := crc64-main.o
|
||||
ifeq ($(CONFIG_CRC64_ARCH),y)
|
||||
CFLAGS_crc64-main.o += -I$(src)/$(SRCARCH)
|
||||
crc64-$(CONFIG_RISCV) += riscv/crc64_lsb.o riscv/crc64_msb.o
|
||||
endif
|
||||
|
||||
obj-y += tests/
|
||||
|
|
|
@ -7,18 +7,12 @@
|
|||
|
||||
#include <asm/hwcap.h>
|
||||
#include <asm/alternative-macros.h>
|
||||
#include <linux/crc-t10dif.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include "crc-clmul.h"
|
||||
|
||||
u16 crc_t10dif_arch(u16 crc, const u8 *p, size_t len)
|
||||
static inline u16 crc_t10dif_arch(u16 crc, const u8 *p, size_t len)
|
||||
{
|
||||
if (riscv_has_extension_likely(RISCV_ISA_EXT_ZBC))
|
||||
return crc16_msb_clmul(crc, p, len, &crc16_msb_0x8bb7_consts);
|
||||
return crc_t10dif_generic(crc, p, len);
|
||||
}
|
||||
EXPORT_SYMBOL(crc_t10dif_arch);
|
||||
|
||||
MODULE_DESCRIPTION("RISC-V optimized CRC-T10DIF function");
|
||||
MODULE_LICENSE("GPL");
|
|
@ -7,39 +7,34 @@
|
|||
|
||||
#include <asm/hwcap.h>
|
||||
#include <asm/alternative-macros.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include "crc-clmul.h"
|
||||
|
||||
u32 crc32_le_arch(u32 crc, const u8 *p, size_t len)
|
||||
static inline u32 crc32_le_arch(u32 crc, const u8 *p, size_t len)
|
||||
{
|
||||
if (riscv_has_extension_likely(RISCV_ISA_EXT_ZBC))
|
||||
return crc32_lsb_clmul(crc, p, len,
|
||||
&crc32_lsb_0xedb88320_consts);
|
||||
return crc32_le_base(crc, p, len);
|
||||
}
|
||||
EXPORT_SYMBOL(crc32_le_arch);
|
||||
|
||||
u32 crc32_be_arch(u32 crc, const u8 *p, size_t len)
|
||||
static inline u32 crc32_be_arch(u32 crc, const u8 *p, size_t len)
|
||||
{
|
||||
if (riscv_has_extension_likely(RISCV_ISA_EXT_ZBC))
|
||||
return crc32_msb_clmul(crc, p, len,
|
||||
&crc32_msb_0x04c11db7_consts);
|
||||
return crc32_be_base(crc, p, len);
|
||||
}
|
||||
EXPORT_SYMBOL(crc32_be_arch);
|
||||
|
||||
u32 crc32c_arch(u32 crc, const u8 *p, size_t len)
|
||||
static inline u32 crc32c_arch(u32 crc, const u8 *p, size_t len)
|
||||
{
|
||||
if (riscv_has_extension_likely(RISCV_ISA_EXT_ZBC))
|
||||
return crc32_lsb_clmul(crc, p, len,
|
||||
&crc32_lsb_0x82f63b78_consts);
|
||||
return crc32c_base(crc, p, len);
|
||||
}
|
||||
EXPORT_SYMBOL(crc32c_arch);
|
||||
|
||||
u32 crc32_optimizations(void)
|
||||
static inline u32 crc32_optimizations_arch(void)
|
||||
{
|
||||
if (riscv_has_extension_likely(RISCV_ISA_EXT_ZBC))
|
||||
return CRC32_LE_OPTIMIZATION |
|
||||
|
@ -47,7 +42,3 @@ u32 crc32_optimizations(void)
|
|||
CRC32C_OPTIMIZATION;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(crc32_optimizations);
|
||||
|
||||
MODULE_DESCRIPTION("RISC-V optimized CRC32 functions");
|
||||
MODULE_LICENSE("GPL");
|
|
@ -7,28 +7,21 @@
|
|||
|
||||
#include <asm/hwcap.h>
|
||||
#include <asm/alternative-macros.h>
|
||||
#include <linux/crc64.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include "crc-clmul.h"
|
||||
|
||||
u64 crc64_be_arch(u64 crc, const u8 *p, size_t len)
|
||||
static inline u64 crc64_be_arch(u64 crc, const u8 *p, size_t len)
|
||||
{
|
||||
if (riscv_has_extension_likely(RISCV_ISA_EXT_ZBC))
|
||||
return crc64_msb_clmul(crc, p, len,
|
||||
&crc64_msb_0x42f0e1eba9ea3693_consts);
|
||||
return crc64_be_generic(crc, p, len);
|
||||
}
|
||||
EXPORT_SYMBOL(crc64_be_arch);
|
||||
|
||||
u64 crc64_nvme_arch(u64 crc, const u8 *p, size_t len)
|
||||
static inline u64 crc64_nvme_arch(u64 crc, const u8 *p, size_t len)
|
||||
{
|
||||
if (riscv_has_extension_likely(RISCV_ISA_EXT_ZBC))
|
||||
return crc64_lsb_clmul(crc, p, len,
|
||||
&crc64_lsb_0x9a6c9329ac4bc9b5_consts);
|
||||
return crc64_nvme_generic(crc, p, len);
|
||||
}
|
||||
EXPORT_SYMBOL(crc64_nvme_arch);
|
||||
|
||||
MODULE_DESCRIPTION("RISC-V optimized CRC64 functions");
|
||||
MODULE_LICENSE("GPL");
|
Loading…
Add table
Reference in a new issue