]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
lib/crc: make arch-optimized code use subsys_initcall
authorEric Biggers <ebiggers@google.com>
Sat, 10 May 2025 03:59:59 +0000 (20:59 -0700)
committerEric Biggers <ebiggers@google.com>
Sat, 10 May 2025 04:02:37 +0000 (21:02 -0700)
Make the architecture-optimized CRC code do its CPU feature checks in
subsys_initcalls instead of arch_initcalls.  This makes it consistent
with arch/*/lib/crypto/ and ensures that it runs after initcalls that
possibly could be a prerequisite for kernel-mode FPU, such as x86's
xfd_update_static_branch() and loongarch's init_euen_mask().

Note: as far as I can tell, x86's xfd_update_static_branch() isn't
*actually* needed for kernel-mode FPU.  loongarch's init_euen_mask() is
needed to enable save/restore of the vector registers, but loongarch
doesn't yet have any CRC or crypto code that uses vector registers
anyway.  Regardless, let's be consistent with arch/*/lib/crypto/ and
robust against any potential future dependency on an arch_initcall.

Link: https://lore.kernel.org/r/20250510035959.87995-1-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
arch/arm/lib/crc-t10dif.c
arch/arm/lib/crc32.c
arch/arm64/lib/crc-t10dif.c
arch/loongarch/lib/crc32-loongarch.c
arch/mips/lib/crc32-mips.c
arch/powerpc/lib/crc-t10dif.c
arch/powerpc/lib/crc32.c
arch/sparc/lib/crc32.c
arch/x86/lib/crc-t10dif.c
arch/x86/lib/crc32.c
arch/x86/lib/crc64.c

index 382437094bddd627ea2743568a8b9f6d5572722f..1093f8ec13b0bef9efd6d53834706c01eb48c3bf 100644 (file)
@@ -60,7 +60,7 @@ static int __init crc_t10dif_arm_init(void)
        }
        return 0;
 }
-arch_initcall(crc_t10dif_arm_init);
+subsys_initcall(crc_t10dif_arm_init);
 
 static void __exit crc_t10dif_arm_exit(void)
 {
index 7ef7db9c0de738fa3b4da9c756a75124bf64e81c..f2bef8849c7c3aa9fba300b2872d72e975c17181 100644 (file)
@@ -103,7 +103,7 @@ static int __init crc32_arm_init(void)
                static_branch_enable(&have_pmull);
        return 0;
 }
-arch_initcall(crc32_arm_init);
+subsys_initcall(crc32_arm_init);
 
 static void __exit crc32_arm_exit(void)
 {
index 99d0b5668a2866eb3c8e4c9f42e82caf46925af6..c2ffe4fdb59d14005811e3a43d3833cca056ffa7 100644 (file)
@@ -61,7 +61,7 @@ static int __init crc_t10dif_arm64_init(void)
        }
        return 0;
 }
-arch_initcall(crc_t10dif_arm64_init);
+subsys_initcall(crc_t10dif_arm64_init);
 
 static void __exit crc_t10dif_arm64_exit(void)
 {
index 8e6d1f517e73c8904cffedcd4a52b22316db4601..b37cd8537b459181771a97fb2332a9d72be03d6e 100644 (file)
@@ -114,7 +114,7 @@ static int __init crc32_loongarch_init(void)
                static_branch_enable(&have_crc32);
        return 0;
 }
-arch_initcall(crc32_loongarch_init);
+subsys_initcall(crc32_loongarch_init);
 
 static void __exit crc32_loongarch_exit(void)
 {
index 84df361e71813d699319581a690b85fbca9a86c4..45e4d2c9fbf549f0fb64399f442d81f40e12ef3c 100644 (file)
@@ -163,7 +163,7 @@ static int __init crc32_mips_init(void)
                static_branch_enable(&have_crc32);
        return 0;
 }
-arch_initcall(crc32_mips_init);
+subsys_initcall(crc32_mips_init);
 
 static void __exit crc32_mips_exit(void)
 {
index ddd5c4088f508dbfa871b16b35e0e13c550e3bdb..4253842cc50d3be2cf3b4910fb15366aa7d8fd2a 100644 (file)
@@ -71,7 +71,7 @@ static int __init crc_t10dif_powerpc_init(void)
                static_branch_enable(&have_vec_crypto);
        return 0;
 }
-arch_initcall(crc_t10dif_powerpc_init);
+subsys_initcall(crc_t10dif_powerpc_init);
 
 static void __exit crc_t10dif_powerpc_exit(void)
 {
index 42f2dd3c85dde5fa0d2c56d13cebc92910ba97f2..77e5a37006f000398697ecfb77902626d9d0a2d3 100644 (file)
@@ -72,7 +72,7 @@ static int __init crc32_powerpc_init(void)
                static_branch_enable(&have_vec_crypto);
        return 0;
 }
-arch_initcall(crc32_powerpc_init);
+subsys_initcall(crc32_powerpc_init);
 
 static void __exit crc32_powerpc_exit(void)
 {
index 428fd5588e93611b0180e0f225faeb237e1515b2..40d4720a42a1b4be3cc893be01a586588ce33135 100644 (file)
@@ -74,7 +74,7 @@ static int __init crc32_sparc_init(void)
        pr_info("Using sparc64 crc32c opcode optimized CRC32C implementation\n");
        return 0;
 }
-arch_initcall(crc32_sparc_init);
+subsys_initcall(crc32_sparc_init);
 
 static void __exit crc32_sparc_exit(void)
 {
index d073b3678edc225a963cae49e338645b368b30d3..db7ce59c31ace0727aa31e4d5368b1ca01d03937 100644 (file)
@@ -29,7 +29,7 @@ static int __init crc_t10dif_x86_init(void)
        }
        return 0;
 }
-arch_initcall(crc_t10dif_x86_init);
+subsys_initcall(crc_t10dif_x86_init);
 
 static void __exit crc_t10dif_x86_exit(void)
 {
index e6a6285cfca87bc9c1a1a75d68d373bae765631e..d09343e2cea9328ff33dc0e83f8726fafe30e5d8 100644 (file)
@@ -88,7 +88,7 @@ static int __init crc32_x86_init(void)
        }
        return 0;
 }
-arch_initcall(crc32_x86_init);
+subsys_initcall(crc32_x86_init);
 
 static void __exit crc32_x86_exit(void)
 {
index 1214ee726c16d8e61ca3c22b476c61069a2d8d32..351a09f5813e2f34f84a6d0eeb04af4db8836e3b 100644 (file)
@@ -39,7 +39,7 @@ static int __init crc64_x86_init(void)
        }
        return 0;
 }
-arch_initcall(crc64_x86_init);
+subsys_initcall(crc64_x86_init);
 
 static void __exit crc64_x86_exit(void)
 {