mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 18:26:42 +00:00
perf header: Move is_cpu_online to numa bench
The helper function is only used in the NUMA benchmark as typically online CPUs are determined through perf_cpu_map__new_online_cpus(). Reduce the scope of the function for now. Reviewed-by: James Clark <james.clark@linaro.org> Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: Xu Yang <xu.yang_2@nxp.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexandre Ghiti <alexghiti@rivosinc.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Ben Zong-You Xie <ben717@andestech.com> Cc: Benjamin Gray <bgray@linux.ibm.com> Cc: Bibo Mao <maobibo@loongson.cn> Cc: Clément Le Goffic <clement.legoffic@foss.st.com> Cc: Dima Kogan <dima@secretsauce.net> Cc: Dr. David Alan Gilbert <linux@treblig.org> Cc: Huacai Chen <chenhuacai@kernel.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.g.garry@oracle.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linux.dev> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mike Leach <mike.leach@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Sandipan Das <sandipan.das@amd.com> Cc: Will Deacon <will@kernel.org> Cc: Yicong Yang <yangyicong@hisilicon.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-riscv@lists.infradead.org Link: https://lore.kernel.org/r/20241107162035.52206-3-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
4a159e6049
commit
c6fafe36ba
@ -27,6 +27,7 @@
|
|||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/time64.h>
|
#include <linux/time64.h>
|
||||||
@ -35,6 +36,7 @@
|
|||||||
|
|
||||||
#include "../util/header.h"
|
#include "../util/header.h"
|
||||||
#include "../util/mutex.h"
|
#include "../util/mutex.h"
|
||||||
|
#include <api/fs/fs.h>
|
||||||
#include <numa.h>
|
#include <numa.h>
|
||||||
#include <numaif.h>
|
#include <numaif.h>
|
||||||
|
|
||||||
@ -533,6 +535,57 @@ static int parse_cpu_list(const char *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check whether a CPU is online
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 1 -> if CPU is online
|
||||||
|
* 0 -> if CPU is offline
|
||||||
|
* -1 -> error case
|
||||||
|
*/
|
||||||
|
static int is_cpu_online(unsigned int cpu)
|
||||||
|
{
|
||||||
|
char *str;
|
||||||
|
size_t strlen;
|
||||||
|
char buf[256];
|
||||||
|
int status = -1;
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf),
|
||||||
|
"/sys/devices/system/cpu/cpu%d", cpu);
|
||||||
|
if (stat(buf, &statbuf) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if /sys/devices/system/cpu/cpux/online file
|
||||||
|
* exists. Some cases cpu0 won't have online file since
|
||||||
|
* it is not expected to be turned off generally.
|
||||||
|
* In kernels without CONFIG_HOTPLUG_CPU, this
|
||||||
|
* file won't exist
|
||||||
|
*/
|
||||||
|
snprintf(buf, sizeof(buf),
|
||||||
|
"/sys/devices/system/cpu/cpu%d/online", cpu);
|
||||||
|
if (stat(buf, &statbuf) != 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read online file using sysfs__read_str.
|
||||||
|
* If read or open fails, return -1.
|
||||||
|
* If read succeeds, return value from file
|
||||||
|
* which gets stored in "str"
|
||||||
|
*/
|
||||||
|
snprintf(buf, sizeof(buf),
|
||||||
|
"devices/system/cpu/cpu%d/online", cpu);
|
||||||
|
|
||||||
|
if (sysfs__read_str(buf, &str, &strlen) < 0)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
status = atoi(str);
|
||||||
|
|
||||||
|
free(str);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
static int parse_setup_cpu_list(void)
|
static int parse_setup_cpu_list(void)
|
||||||
{
|
{
|
||||||
struct thread_data *td;
|
struct thread_data *td;
|
||||||
|
@ -987,57 +987,6 @@ static int write_dir_format(struct feat_fd *ff,
|
|||||||
return do_write(ff, &data->dir.version, sizeof(data->dir.version));
|
return do_write(ff, &data->dir.version, sizeof(data->dir.version));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Check whether a CPU is online
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* 1 -> if CPU is online
|
|
||||||
* 0 -> if CPU is offline
|
|
||||||
* -1 -> error case
|
|
||||||
*/
|
|
||||||
int is_cpu_online(unsigned int cpu)
|
|
||||||
{
|
|
||||||
char *str;
|
|
||||||
size_t strlen;
|
|
||||||
char buf[256];
|
|
||||||
int status = -1;
|
|
||||||
struct stat statbuf;
|
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf),
|
|
||||||
"/sys/devices/system/cpu/cpu%d", cpu);
|
|
||||||
if (stat(buf, &statbuf) != 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if /sys/devices/system/cpu/cpux/online file
|
|
||||||
* exists. Some cases cpu0 won't have online file since
|
|
||||||
* it is not expected to be turned off generally.
|
|
||||||
* In kernels without CONFIG_HOTPLUG_CPU, this
|
|
||||||
* file won't exist
|
|
||||||
*/
|
|
||||||
snprintf(buf, sizeof(buf),
|
|
||||||
"/sys/devices/system/cpu/cpu%d/online", cpu);
|
|
||||||
if (stat(buf, &statbuf) != 0)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read online file using sysfs__read_str.
|
|
||||||
* If read or open fails, return -1.
|
|
||||||
* If read succeeds, return value from file
|
|
||||||
* which gets stored in "str"
|
|
||||||
*/
|
|
||||||
snprintf(buf, sizeof(buf),
|
|
||||||
"devices/system/cpu/cpu%d/online", cpu);
|
|
||||||
|
|
||||||
if (sysfs__read_str(buf, &str, &strlen) < 0)
|
|
||||||
return status;
|
|
||||||
|
|
||||||
status = atoi(str);
|
|
||||||
|
|
||||||
free(str);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBBPF_SUPPORT
|
#ifdef HAVE_LIBBPF_SUPPORT
|
||||||
static int write_bpf_prog_info(struct feat_fd *ff,
|
static int write_bpf_prog_info(struct feat_fd *ff,
|
||||||
struct evlist *evlist __maybe_unused)
|
struct evlist *evlist __maybe_unused)
|
||||||
|
@ -196,7 +196,6 @@ int write_padded(struct feat_fd *fd, const void *bf,
|
|||||||
|
|
||||||
#define MAX_CACHE_LVL 4
|
#define MAX_CACHE_LVL 4
|
||||||
|
|
||||||
int is_cpu_online(unsigned int cpu);
|
|
||||||
int build_caches_for_cpu(u32 cpu, struct cpu_cache_level caches[], u32 *cntp);
|
int build_caches_for_cpu(u32 cpu, struct cpu_cache_level caches[], u32 *cntp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user