From: Eric Biggers <ebiggers@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-crypto@vger.kernel.org, linux-ext4@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-mips@vger.kernel.org, linux-riscv@lists.infradead.org,
linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
sparclinux@vger.kernel.org, x86@kernel.org,
Ard Biesheuvel <ardb@kernel.org>
Subject: [PATCH v4 04/19] crypto: crc32 - don't unnecessarily register arch algorithms
Date: Sun, 1 Dec 2024 17:08:29 -0800 [thread overview]
Message-ID: <20241202010844.144356-5-ebiggers@kernel.org> (raw)
In-Reply-To: <20241202010844.144356-1-ebiggers@kernel.org>
From: Eric Biggers <ebiggers@google.com>
Instead of registering the crc32-$arch and crc32c-$arch algorithms if
the arch-specific code was built, only register them when that code was
built *and* is not falling back to the base implementation at runtime.
This avoids confusing users like btrfs which checks the shash driver
name to determine whether it is crc32c-generic.
(It would also make sense to change btrfs to test the crc32_optimization
flags itself, so that it doesn't have to use the weird hack of parsing
the driver name. This change still makes sense either way though.)
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
crypto/crc32_generic.c | 8 ++++++--
crypto/crc32c_generic.c | 8 ++++++--
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/crypto/crc32_generic.c b/crypto/crc32_generic.c
index cc064ea8240e..783a30b27398 100644
--- a/crypto/crc32_generic.c
+++ b/crypto/crc32_generic.c
@@ -155,19 +155,23 @@ static struct shash_alg algs[] = {{
.base.cra_ctxsize = sizeof(u32),
.base.cra_module = THIS_MODULE,
.base.cra_init = crc32_cra_init,
}};
+static int num_algs;
+
static int __init crc32_mod_init(void)
{
/* register the arch flavor only if it differs from the generic one */
- return crypto_register_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ num_algs = 1 + ((crc32_optimizations() & CRC32_LE_OPTIMIZATION) != 0);
+
+ return crypto_register_shashes(algs, num_algs);
}
static void __exit crc32_mod_fini(void)
{
- crypto_unregister_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ crypto_unregister_shashes(algs, num_algs);
}
subsys_initcall(crc32_mod_init);
module_exit(crc32_mod_fini);
diff --git a/crypto/crc32c_generic.c b/crypto/crc32c_generic.c
index 04b03d825cf4..985da981d6e2 100644
--- a/crypto/crc32c_generic.c
+++ b/crypto/crc32c_generic.c
@@ -195,19 +195,23 @@ static struct shash_alg algs[] = {{
.base.cra_ctxsize = sizeof(struct chksum_ctx),
.base.cra_module = THIS_MODULE,
.base.cra_init = crc32c_cra_init,
}};
+static int num_algs;
+
static int __init crc32c_mod_init(void)
{
/* register the arch flavor only if it differs from the generic one */
- return crypto_register_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ num_algs = 1 + ((crc32_optimizations() & CRC32C_OPTIMIZATION) != 0);
+
+ return crypto_register_shashes(algs, num_algs);
}
static void __exit crc32c_mod_fini(void)
{
- crypto_unregister_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ crypto_unregister_shashes(algs, num_algs);
}
subsys_initcall(crc32c_mod_init);
module_exit(crc32c_mod_fini);
--
2.47.1
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: linux-kernel@vger.kernel.org
Cc: linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
linux-scsi@vger.kernel.org, x86@kernel.org,
linux-mips@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-crypto@vger.kernel.org, loongarch@lists.linux.dev,
sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org,
linux-ext4@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
Ard Biesheuvel <ardb@kernel.org>,
linux-arm-kernel@lists.infradead.org
Subject: [f2fs-dev] [PATCH v4 04/19] crypto: crc32 - don't unnecessarily register arch algorithms
Date: Sun, 1 Dec 2024 17:08:29 -0800 [thread overview]
Message-ID: <20241202010844.144356-5-ebiggers@kernel.org> (raw)
In-Reply-To: <20241202010844.144356-1-ebiggers@kernel.org>
From: Eric Biggers <ebiggers@google.com>
Instead of registering the crc32-$arch and crc32c-$arch algorithms if
the arch-specific code was built, only register them when that code was
built *and* is not falling back to the base implementation at runtime.
This avoids confusing users like btrfs which checks the shash driver
name to determine whether it is crc32c-generic.
(It would also make sense to change btrfs to test the crc32_optimization
flags itself, so that it doesn't have to use the weird hack of parsing
the driver name. This change still makes sense either way though.)
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
crypto/crc32_generic.c | 8 ++++++--
crypto/crc32c_generic.c | 8 ++++++--
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/crypto/crc32_generic.c b/crypto/crc32_generic.c
index cc064ea8240e..783a30b27398 100644
--- a/crypto/crc32_generic.c
+++ b/crypto/crc32_generic.c
@@ -155,19 +155,23 @@ static struct shash_alg algs[] = {{
.base.cra_ctxsize = sizeof(u32),
.base.cra_module = THIS_MODULE,
.base.cra_init = crc32_cra_init,
}};
+static int num_algs;
+
static int __init crc32_mod_init(void)
{
/* register the arch flavor only if it differs from the generic one */
- return crypto_register_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ num_algs = 1 + ((crc32_optimizations() & CRC32_LE_OPTIMIZATION) != 0);
+
+ return crypto_register_shashes(algs, num_algs);
}
static void __exit crc32_mod_fini(void)
{
- crypto_unregister_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ crypto_unregister_shashes(algs, num_algs);
}
subsys_initcall(crc32_mod_init);
module_exit(crc32_mod_fini);
diff --git a/crypto/crc32c_generic.c b/crypto/crc32c_generic.c
index 04b03d825cf4..985da981d6e2 100644
--- a/crypto/crc32c_generic.c
+++ b/crypto/crc32c_generic.c
@@ -195,19 +195,23 @@ static struct shash_alg algs[] = {{
.base.cra_ctxsize = sizeof(struct chksum_ctx),
.base.cra_module = THIS_MODULE,
.base.cra_init = crc32c_cra_init,
}};
+static int num_algs;
+
static int __init crc32c_mod_init(void)
{
/* register the arch flavor only if it differs from the generic one */
- return crypto_register_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ num_algs = 1 + ((crc32_optimizations() & CRC32C_OPTIMIZATION) != 0);
+
+ return crypto_register_shashes(algs, num_algs);
}
static void __exit crc32c_mod_fini(void)
{
- crypto_unregister_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ crypto_unregister_shashes(algs, num_algs);
}
subsys_initcall(crc32c_mod_init);
module_exit(crc32c_mod_fini);
--
2.47.1
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers <ebiggers@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-crypto@vger.kernel.org, linux-ext4@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-mips@vger.kernel.org, linux-riscv@lists.infradead.org,
linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
sparclinux@vger.kernel.org, x86@kernel.org,
Ard Biesheuvel <ardb@kernel.org>
Subject: [PATCH v4 04/19] crypto: crc32 - don't unnecessarily register arch algorithms
Date: Sun, 1 Dec 2024 17:08:29 -0800 [thread overview]
Message-ID: <20241202010844.144356-5-ebiggers@kernel.org> (raw)
In-Reply-To: <20241202010844.144356-1-ebiggers@kernel.org>
From: Eric Biggers <ebiggers@google.com>
Instead of registering the crc32-$arch and crc32c-$arch algorithms if
the arch-specific code was built, only register them when that code was
built *and* is not falling back to the base implementation at runtime.
This avoids confusing users like btrfs which checks the shash driver
name to determine whether it is crc32c-generic.
(It would also make sense to change btrfs to test the crc32_optimization
flags itself, so that it doesn't have to use the weird hack of parsing
the driver name. This change still makes sense either way though.)
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
crypto/crc32_generic.c | 8 ++++++--
crypto/crc32c_generic.c | 8 ++++++--
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/crypto/crc32_generic.c b/crypto/crc32_generic.c
index cc064ea8240e..783a30b27398 100644
--- a/crypto/crc32_generic.c
+++ b/crypto/crc32_generic.c
@@ -155,19 +155,23 @@ static struct shash_alg algs[] = {{
.base.cra_ctxsize = sizeof(u32),
.base.cra_module = THIS_MODULE,
.base.cra_init = crc32_cra_init,
}};
+static int num_algs;
+
static int __init crc32_mod_init(void)
{
/* register the arch flavor only if it differs from the generic one */
- return crypto_register_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ num_algs = 1 + ((crc32_optimizations() & CRC32_LE_OPTIMIZATION) != 0);
+
+ return crypto_register_shashes(algs, num_algs);
}
static void __exit crc32_mod_fini(void)
{
- crypto_unregister_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ crypto_unregister_shashes(algs, num_algs);
}
subsys_initcall(crc32_mod_init);
module_exit(crc32_mod_fini);
diff --git a/crypto/crc32c_generic.c b/crypto/crc32c_generic.c
index 04b03d825cf4..985da981d6e2 100644
--- a/crypto/crc32c_generic.c
+++ b/crypto/crc32c_generic.c
@@ -195,19 +195,23 @@ static struct shash_alg algs[] = {{
.base.cra_ctxsize = sizeof(struct chksum_ctx),
.base.cra_module = THIS_MODULE,
.base.cra_init = crc32c_cra_init,
}};
+static int num_algs;
+
static int __init crc32c_mod_init(void)
{
/* register the arch flavor only if it differs from the generic one */
- return crypto_register_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ num_algs = 1 + ((crc32_optimizations() & CRC32C_OPTIMIZATION) != 0);
+
+ return crypto_register_shashes(algs, num_algs);
}
static void __exit crc32c_mod_fini(void)
{
- crypto_unregister_shashes(algs, 1 + IS_ENABLED(CONFIG_CRC32_ARCH));
+ crypto_unregister_shashes(algs, num_algs);
}
subsys_initcall(crc32c_mod_init);
module_exit(crc32c_mod_fini);
--
2.47.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2024-12-02 1:09 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-02 1:08 [PATCH v4 00/19] Wire up CRC32 library functions to arch-optimized code Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 01/19] lib/crc32: drop leading underscores from __crc32c_le_base Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 02/19] lib/crc32: improve support for arch-specific overrides Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 03/19] lib/crc32: expose whether the lib is really optimized at runtime Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` Eric Biggers [this message]
2024-12-02 1:08 ` [PATCH v4 04/19] crypto: crc32 - don't unnecessarily register arch algorithms Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 05/19] arm/crc32: expose CRC32 functions through lib Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 06/19] loongarch/crc32: " Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 07/19] mips/crc32: " Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 08/19] powerpc/crc32: " Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 09/19] s390/crc32: " Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 10/19] sparc/crc32: " Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 11/19] x86/crc32: update prototype for crc_pcl() Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 12/19] x86/crc32: update prototype for crc32_pclmul_le_16() Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 13/19] x86/crc32: expose CRC32 functions through lib Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 14/19] bcachefs: Explicitly select CRYPTO from BCACHEFS_FS Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 15/19] lib/crc32: make crc32c() go directly to lib Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2025-10-19 6:08 ` Askar Safin
2025-10-19 6:08 ` Askar Safin
2025-10-19 6:08 ` [f2fs-dev] " Askar Safin
2025-10-19 8:10 ` Askar Safin
2025-10-19 8:10 ` Askar Safin
2025-10-19 8:10 ` [f2fs-dev] " Askar Safin
2025-10-19 16:23 ` Eric Biggers
2025-10-19 16:23 ` Eric Biggers
2025-10-19 16:23 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 16/19] ext4: switch to using the crc32c library Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 17/19] jbd2: " Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 18/19] f2fs: switch to using the crc32 library Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-02 1:08 ` [PATCH v4 19/19] scsi: target: iscsi: switch to using the crc32c library Eric Biggers
2024-12-02 1:08 ` Eric Biggers
2024-12-02 1:08 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2024-12-12 21:37 ` [PATCH v4 00/19] Wire up CRC32 library functions to arch-optimized code Eric Biggers
2024-12-12 21:37 ` Eric Biggers
2024-12-12 21:37 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2025-01-29 0:56 ` patchwork-bot+f2fs
2025-01-29 0:56 ` patchwork-bot+f2fs
2025-01-29 0:56 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241202010844.144356-5-ebiggers@kernel.org \
--to=ebiggers@kernel.org \
--cc=ardb@kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=sparclinux@vger.kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.