mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Backport AVX2 AES-GCM implementation from BoringSSL
This uses the AVX2 versions of the AESENC and PCLMULQDQ instructions; on Zen 3 this provides an up to 80% performance improvement. Original source: https://github.com/google/boringssl/blob/d5440dd2c2c500ac2d3bba4afec47a054b4d99ae/gen/bcm/aes-gcm-avx2-x86_64-linux.S See the original BoringSSL commit at https://github.com/google/boringssl/commit/3b6e1be4391d96e81cee022f77f7bab85d51cf4e. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Rob Norris <robn@despairlabs.com> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Attila Fülöp <attila@fueloep.org> Signed-off-by: Joel Low <joel@joelsplace.sg> Closes #17058
This commit is contained in:
committed by
Brian Behlendorf
parent
885d929cf8
commit
bb9225ea86
@@ -42,7 +42,7 @@ extern "C" {
|
||||
*/
|
||||
#if defined(__x86_64__) && defined(HAVE_AVX) && \
|
||||
defined(HAVE_AES) && defined(HAVE_PCLMULQDQ)
|
||||
#define CAN_USE_GCM_ASM
|
||||
#define CAN_USE_GCM_ASM (HAVE_VAES && HAVE_VPCLMULQDQ ? 2 : 1)
|
||||
extern boolean_t gcm_avx_can_use_movbe;
|
||||
#endif
|
||||
|
||||
@@ -129,6 +129,15 @@ typedef struct ccm_ctx {
|
||||
#define ccm_copy_to ccm_common.cc_copy_to
|
||||
#define ccm_flags ccm_common.cc_flags
|
||||
|
||||
#ifdef CAN_USE_GCM_ASM
|
||||
typedef enum gcm_impl {
|
||||
GCM_IMPL_GENERIC = 0,
|
||||
GCM_IMPL_AVX,
|
||||
GCM_IMPL_AVX2,
|
||||
GCM_IMPL_MAX,
|
||||
} gcm_impl;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* gcm_tag_len: Length of authentication tag.
|
||||
*
|
||||
@@ -174,7 +183,7 @@ typedef struct gcm_ctx {
|
||||
uint64_t gcm_len_a_len_c[2];
|
||||
uint8_t *gcm_pt_buf;
|
||||
#ifdef CAN_USE_GCM_ASM
|
||||
boolean_t gcm_use_avx;
|
||||
enum gcm_impl impl;
|
||||
#endif
|
||||
} gcm_ctx_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user