perf llvm: Pass number of configured CPUs to clang compiler
This patch introduces a new macro "__NR_CPUS__" to perf's embedded clang compiler, which represent the number of configured CPUs in this system. BPF programs can use this macro to create a map with the same number of system CPUs. For example: struct bpf_map_def SEC("maps") pmu_map = { .type = BPF_MAP_TYPE_PERF_EVENT_ARRAY, .key_size = sizeof(int), .value_size = sizeof(u32), .max_entries = __NR_CPUS__, }; Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1446636007-239722-2-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
98916392a0
commit
59f41af980
|
@ -11,10 +11,11 @@
|
|||
#include "cache.h"
|
||||
|
||||
#define CLANG_BPF_CMD_DEFAULT_TEMPLATE \
|
||||
"$CLANG_EXEC -D__KERNEL__ $CLANG_OPTIONS " \
|
||||
"$KERNEL_INC_OPTIONS -Wno-unused-value " \
|
||||
"-Wno-pointer-sign -working-directory " \
|
||||
"$WORKING_DIR -c \"$CLANG_SOURCE\" -target bpf -O2 -o -"
|
||||
"$CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS "\
|
||||
"$CLANG_OPTIONS $KERNEL_INC_OPTIONS " \
|
||||
"-Wno-unused-value -Wno-pointer-sign " \
|
||||
"-working-directory $WORKING_DIR " \
|
||||
"-c \"$CLANG_SOURCE\" -target bpf -O2 -o -"
|
||||
|
||||
struct llvm_param llvm_param = {
|
||||
.clang_path = "clang",
|
||||
|
@ -326,8 +327,8 @@ get_kbuild_opts(char **kbuild_dir, char **kbuild_include_opts)
|
|||
int llvm__compile_bpf(const char *path, void **p_obj_buf,
|
||||
size_t *p_obj_buf_sz)
|
||||
{
|
||||
int err;
|
||||
char clang_path[PATH_MAX];
|
||||
int err, nr_cpus_avail;
|
||||
char clang_path[PATH_MAX], nr_cpus_avail_str[64];
|
||||
const char *clang_opt = llvm_param.clang_opt;
|
||||
const char *template = llvm_param.clang_bpf_cmd_template;
|
||||
char *kbuild_dir = NULL, *kbuild_include_opts = NULL;
|
||||
|
@ -354,6 +355,17 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,
|
|||
*/
|
||||
get_kbuild_opts(&kbuild_dir, &kbuild_include_opts);
|
||||
|
||||
nr_cpus_avail = sysconf(_SC_NPROCESSORS_CONF);
|
||||
if (nr_cpus_avail <= 0) {
|
||||
pr_err(
|
||||
"WARNING:\tunable to get available CPUs in this system: %s\n"
|
||||
" \tUse 128 instead.\n", strerror(errno));
|
||||
nr_cpus_avail = 128;
|
||||
}
|
||||
snprintf(nr_cpus_avail_str, sizeof(nr_cpus_avail_str), "%d",
|
||||
nr_cpus_avail);
|
||||
|
||||
force_set_env("NR_CPUS", nr_cpus_avail_str);
|
||||
force_set_env("CLANG_EXEC", clang_path);
|
||||
force_set_env("CLANG_OPTIONS", clang_opt);
|
||||
force_set_env("KERNEL_INC_OPTIONS", kbuild_include_opts);
|
||||
|
|
Loading…
Reference in New Issue