mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
perf env: Add mutex to protect lazy environment initialization
Introduce a mutex to 'struct perf_env' to safely protect lazy metadata setup, such as os_release or e_machine resolution, preventing concurrent initialization data races and memory leaks during multi-threaded profiling or symbol loading. Signed-off-by: Ian Rogers <irogers@google.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Alexander Gordeev <agordeev@linux.ibm.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Honglei Wang <jameshongleiwang@126.com> Cc: Jan Polensky <japo@linux.ibm.com> Cc: Sumanth Korikkar <sumanthk@linux.ibm.com> Cc: Thomas Richter <tmricht@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
da976dd484
commit
0ff9718c26
|
|
@ -250,6 +250,8 @@ void perf_env__exit(struct perf_env *env)
|
|||
{
|
||||
int i, j;
|
||||
|
||||
mutex_destroy(&env->lock);
|
||||
|
||||
perf_env__purge_bpf(env);
|
||||
perf_env__purge_cgroups(env);
|
||||
zfree(&env->hostname);
|
||||
|
|
@ -307,6 +309,7 @@ void perf_env__init(struct perf_env *env)
|
|||
init_rwsem(&env->bpf_progs.lock);
|
||||
#endif
|
||||
env->kernel_is_64_bit = -1;
|
||||
mutex_init(&env->lock);
|
||||
}
|
||||
|
||||
static void perf_env__init_kernel_mode(struct perf_env *env)
|
||||
|
|
@ -1014,6 +1017,7 @@ bool x86__is_amd_cpu(void)
|
|||
struct perf_env env = { .total_mem = 0, };
|
||||
bool is_amd;
|
||||
|
||||
perf_env__init(&env);
|
||||
perf_env__cpuid(&env);
|
||||
is_amd = perf_env__is_x86_amd_cpu(&env);
|
||||
perf_env__exit(&env);
|
||||
|
|
@ -1036,6 +1040,7 @@ bool x86__is_intel_cpu(void)
|
|||
struct perf_env env = { .total_mem = 0, };
|
||||
bool is_intel;
|
||||
|
||||
perf_env__init(&env);
|
||||
perf_env__cpuid(&env);
|
||||
is_intel = perf_env__is_x86_intel_cpu(&env);
|
||||
perf_env__exit(&env);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include <linux/rbtree.h>
|
||||
#include "cpumap.h"
|
||||
#include "rwsem.h"
|
||||
#include "mutex.h"
|
||||
|
||||
struct perf_cpu_map;
|
||||
|
||||
|
|
@ -156,6 +157,8 @@ struct perf_env {
|
|||
*/
|
||||
bool enabled;
|
||||
} clock;
|
||||
/* Protects lazy environment initialization (e.g. os_release, e_machine). */
|
||||
struct mutex lock;
|
||||
};
|
||||
|
||||
enum perf_compress_type {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user