mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 08:15:07 -04: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:
committed by
Arnaldo Carvalho de Melo
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 {
|
||||
|
||||
Reference in New Issue
Block a user