72 lines
2.4 KiB
Diff
72 lines
2.4 KiB
Diff
From 7661750ff202b9382e81b0c2de267f029be4a61f Mon Sep 17 00:00:00 2001
|
|
From: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Date: Fri, 17 Jul 2020 09:35:18 -0300
|
|
Subject: [PATCH 045/201] perf tools: Sync hashmap.h with libbpf's
|
|
|
|
mainline inclusion
|
|
from mainline-v5.8-rc6
|
|
commit 94fddb7ad019ad9f14d33cd0a6cd159a52a082b8
|
|
category: bugfix
|
|
bugzilla: https://gitee.com/openeuler/kernel/issues/I8C0CX
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8aa259b10a6a759c50137bbbf225df0c17ca5d27
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
To pick up the changes in:
|
|
|
|
b2f9f1535bb9 ("libbpf: Fix libbpf hashmap on (I)LP32 architectures")
|
|
|
|
Silencing this warning:
|
|
|
|
Warning: Kernel ABI header at 'tools/perf/util/hashmap.h' differs from latest version at 'tools/lib/bpf/hashmap.h'
|
|
diff -u tools/perf/util/hashmap.h tools/lib/bpf/hashmap.h
|
|
|
|
I'll eventually update the warning to remove the "Kernel ABI" part
|
|
and instead state libbpf when noticing that the original is at
|
|
"tools/lib/something".
|
|
|
|
Cc: Adrian Hunter <adrian.hunter@intel.com>
|
|
Cc: Alexei Starovoitov <ast@kernel.org>
|
|
Cc: Andrii Nakryiko <andriin@fb.com>
|
|
Cc: Jakub Bogusz <qboosh@pld-linux.org>
|
|
Cc: Jiri Olsa <jolsa@kernel.org>
|
|
Cc: Namhyung Kim <namhyung@kernel.org>
|
|
Ian Rogers <irogers@google.com>
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
tools/perf/util/hashmap.h | 12 ++++++++----
|
|
1 file changed, 8 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/tools/perf/util/hashmap.h b/tools/perf/util/hashmap.h
|
|
index df59fd4fc95b..e0af36b0e5d8 100644
|
|
--- a/tools/perf/util/hashmap.h
|
|
+++ b/tools/perf/util/hashmap.h
|
|
@@ -11,14 +11,18 @@
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <limits.h>
|
|
-#ifndef __WORDSIZE
|
|
-#define __WORDSIZE (__SIZEOF_LONG__ * 8)
|
|
-#endif
|
|
|
|
static inline size_t hash_bits(size_t h, int bits)
|
|
{
|
|
/* shuffle bits and return requested number of upper bits */
|
|
- return (h * 11400714819323198485llu) >> (__WORDSIZE - bits);
|
|
+#if (__SIZEOF_SIZE_T__ == __SIZEOF_LONG_LONG__)
|
|
+ /* LP64 case */
|
|
+ return (h * 11400714819323198485llu) >> (__SIZEOF_LONG_LONG__ * 8 - bits);
|
|
+#elif (__SIZEOF_SIZE_T__ <= __SIZEOF_LONG__)
|
|
+ return (h * 2654435769lu) >> (__SIZEOF_LONG__ * 8 - bits);
|
|
+#else
|
|
+# error "Unsupported size_t size"
|
|
+#endif
|
|
}
|
|
|
|
typedef size_t (*hashmap_hash_fn)(const void *key, void *ctx);
|
|
--
|
|
2.27.0
|
|
|