Skip to content

Commit

Permalink
Merge pull request #3588 from a16bitsysop/hyperscan
Browse files Browse the repository at this point in the history
[Feature] allow hyperscan for aarch64
  • Loading branch information
vstakhov committed Dec 31, 2020
2 parents a943931 + f5a86af commit 53d713a
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 6 deletions.
5 changes: 1 addition & 4 deletions cmake/Hyperscan.cmake
@@ -1,9 +1,6 @@
option (ENABLE_HYPERSCAN "Enable hyperscan for fast regexp processing [default: OFF]" OFF)

if (ENABLE_HYPERSCAN MATCHES "ON")
if (NOT ("${ARCH}" STREQUAL "x86_64" OR "${ARCH}" STREQUAL "i386"))
MESSAGE(FATAL_ERROR "Hyperscan is supported only on x86_64/i386 architectures")
endif ()
ProcessPackage (HYPERSCAN LIBRARY hs INCLUDE hs.h INCLUDE_SUFFIXES
hs include/hs
ROOT ${HYPERSCAN_ROOT_DIR} MODULES libhs)
Expand All @@ -16,4 +13,4 @@ if (ENABLE_HYPERSCAN MATCHES "ON")
set (USE_CXX_LINKER 1)
endif ()
endif ()
endif ()
endif ()
2 changes: 2 additions & 0 deletions src/hs_helper.c
Expand Up @@ -254,11 +254,13 @@ static gboolean
rspamd_rs_compile (struct hs_helper_ctx *ctx, struct rspamd_worker *worker,
gboolean forced)
{
#ifndef __aarch64__
if (!(ctx->cfg->libs_ctx->crypto_ctx->cpu_config & CPUID_SSSE3)) {
msg_warn ("CPU doesn't have SSSE3 instructions set "
"required for hyperscan, disable hyperscan compilation");
return FALSE;
}
#endif

if (!rspamd_hs_helper_cleanup_dir (ctx, forced)) {
msg_warn ("cannot cleanup cache dir '%s'", ctx->hs_dir);
Expand Down
2 changes: 1 addition & 1 deletion src/libserver/cfg_utils.c
Expand Up @@ -816,7 +816,7 @@ rspamd_config_post_load (struct rspamd_config *cfg,
rspamd_regexp_library_init (cfg);
rspamd_multipattern_library_init (cfg->hs_cache_dir);

#ifdef WITH_HYPERSCAN
#if defined(WITH_HYPERSCAN) && !defined(__aarch64__)
if (!cfg->disable_hyperscan) {
if (!(cfg->libs_ctx->crypto_ctx->cpu_config & CPUID_SSSE3)) {
msg_warn_config ("CPU doesn't have SSSE3 instructions set "
Expand Down
4 changes: 3 additions & 1 deletion src/libserver/maps/map_helpers.c
Expand Up @@ -1280,11 +1280,13 @@ rspamd_re_map_finalize (struct rspamd_regexp_map_helper *re_map)

map = re_map->map;

#ifndef __aarch64__
if (!(map->cfg->libs_ctx->crypto_ctx->cpu_config & CPUID_SSSE3)) {
msg_info_map ("disable hyperscan for map %s, ssse3 instructons are not supported by CPU",
map->name);
return;
}
#endif

if (hs_populate_platform (&plt) != HS_SUCCESS) {
msg_err_map ("cannot populate hyperscan platform");
Expand Down Expand Up @@ -1940,4 +1942,4 @@ rspamd_match_cdb_map (struct rspamd_cdb_map_helper *map,
}

return NULL;
}
}

0 comments on commit 53d713a

Please sign in to comment.