From 554b60966bdbde1d426a7689eb871c711d9e7666 Mon Sep 17 00:00:00 2001 From: XMRig Date: Tue, 6 Jun 2023 02:30:10 +0700 Subject: [PATCH] Fixed compatibility with hwloc 1.11. --- src/backend/cpu/platform/HwlocCpuInfo.cpp | 26 +++++++++++------------ src/backend/cpu/platform/HwlocCpuInfo.h | 4 ++-- src/crypto/ghostrider/ghostrider.cpp | 20 ++++++++++++++--- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/backend/cpu/platform/HwlocCpuInfo.cpp b/src/backend/cpu/platform/HwlocCpuInfo.cpp index d4db2039d..95753ae2e 100644 --- a/src/backend/cpu/platform/HwlocCpuInfo.cpp +++ b/src/backend/cpu/platform/HwlocCpuInfo.cpp @@ -1,6 +1,6 @@ /* XMRig - * Copyright (c) 2018-2021 SChernykh - * Copyright (c) 2016-2021 XMRig + * Copyright (c) 2018-2023 SChernykh + * Copyright (c) 2016-2023 XMRig * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,27 +36,25 @@ #include "base/io/log/Log.h" +#if HWLOC_API_VERSION < 0x20000 +static inline int hwloc_obj_type_is_cache(hwloc_obj_type_t type) +{ + return type == HWLOC_OBJ_CACHE; +} +#endif + + namespace xmrig { uint32_t HwlocCpuInfo::m_features = 0; -static inline bool isCacheObject(hwloc_obj_t obj) -{ -# if HWLOC_API_VERSION >= 0x20000 - return hwloc_obj_type_is_cache(obj->type); -# else - return obj->type == HWLOC_OBJ_CACHE; -# endif -} - - template static inline void findCache(hwloc_obj_t obj, unsigned min, unsigned max, func lambda) { for (size_t i = 0; i < obj->arity; i++) { - if (isCacheObject(obj->children[i])) { + if (hwloc_obj_type_is_cache(obj->children[i]->type)) { const unsigned depth = obj->children[i]->attr->cache.depth; if (depth < min || depth > max) { continue; @@ -322,7 +320,7 @@ void xmrig::HwlocCpuInfo::processTopLevelCache(hwloc_obj_t cache, const Algorith if (cache->attr->cache.depth == 3) { for (size_t i = 0; i < cache->arity; ++i) { hwloc_obj_t l2 = cache->children[i]; - if (!isCacheObject(l2) || l2->attr == nullptr) { + if (!hwloc_obj_type_is_cache(l2->type) || l2->attr == nullptr) { continue; } diff --git a/src/backend/cpu/platform/HwlocCpuInfo.h b/src/backend/cpu/platform/HwlocCpuInfo.h index 390c7d3f3..db8691840 100644 --- a/src/backend/cpu/platform/HwlocCpuInfo.h +++ b/src/backend/cpu/platform/HwlocCpuInfo.h @@ -1,6 +1,6 @@ /* XMRig - * Copyright (c) 2018-2021 SChernykh - * Copyright (c) 2016-2021 XMRig + * Copyright (c) 2018-2023 SChernykh + * Copyright (c) 2016-2023 XMRig * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/crypto/ghostrider/ghostrider.cpp b/src/crypto/ghostrider/ghostrider.cpp index 70138470b..28fdead83 100644 --- a/src/crypto/ghostrider/ghostrider.cpp +++ b/src/crypto/ghostrider/ghostrider.cpp @@ -47,9 +47,13 @@ #include #ifdef XMRIG_FEATURE_HWLOC -#include "base/kernel/Platform.h" -#include "backend/cpu/platform/HwlocCpuInfo.h" -#include +# include "base/kernel/Platform.h" +# include "backend/cpu/platform/HwlocCpuInfo.h" +# include + +# if HWLOC_API_VERSION < 0x20000 +# define HWLOC_OBJ_L3CACHE HWLOC_OBJ_CACHE +# endif #endif #if defined(XMRIG_ARM) @@ -487,6 +491,12 @@ HelperThread* create_helper_thread(int64_t cpu_index, int priority, const std::v bool is8MB = false; findByType(root, HWLOC_OBJ_L3CACHE, [cpu_index, &is8MB](hwloc_obj_t obj) { +# if HWLOC_API_VERSION < 0x20000 + if (obj->attr->cache.depth != 3) { + return false; + } +# endif + if (!hwloc_bitmap_isset(obj->cpuset, cpu_index)) { return false; } @@ -510,7 +520,11 @@ HelperThread* create_helper_thread(int64_t cpu_index, int priority, const std::v return true; }); +# if HWLOC_API_VERSION >= 0x20000 for (auto obj_type : { HWLOC_OBJ_CORE, HWLOC_OBJ_L1CACHE, HWLOC_OBJ_L2CACHE, HWLOC_OBJ_L3CACHE }) { +# else + for (auto obj_type : { HWLOC_OBJ_CORE, HWLOC_OBJ_CACHE }) { +# endif findByType(root, obj_type, [cpu_index, helper_cpu_set, main_threads_set](hwloc_obj_t obj) { const hwloc_cpuset_t& s = obj->cpuset; if (hwloc_bitmap_isset(s, cpu_index)) {