提交 0bb93490 编写于 作者: W Wang Nan 提交者: Arnaldo Carvalho de Melo

perf bpf: Rename bpf config to program config

Following patches are going to introduce BPF object level configuration
to enable setting values into BPF maps. To avoid confusion, this patch
renames existing 'config' in bpf-loader.c to 'program config'. Following
patches would introduce 'object config'.
Signed-off-by: NWang Nan <wangnan0@huawei.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1448614067-197576-4-git-send-email-wangnan0@huawei.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 561bbcca
...@@ -120,7 +120,7 @@ bpf_prog_priv__clear(struct bpf_program *prog __maybe_unused, ...@@ -120,7 +120,7 @@ bpf_prog_priv__clear(struct bpf_program *prog __maybe_unused,
} }
static int static int
config__exec(const char *value, struct perf_probe_event *pev) prog_config__exec(const char *value, struct perf_probe_event *pev)
{ {
pev->uprobes = true; pev->uprobes = true;
pev->target = strdup(value); pev->target = strdup(value);
...@@ -130,7 +130,7 @@ config__exec(const char *value, struct perf_probe_event *pev) ...@@ -130,7 +130,7 @@ config__exec(const char *value, struct perf_probe_event *pev)
} }
static int static int
config__module(const char *value, struct perf_probe_event *pev) prog_config__module(const char *value, struct perf_probe_event *pev)
{ {
pev->uprobes = false; pev->uprobes = false;
pev->target = strdup(value); pev->target = strdup(value);
...@@ -140,8 +140,7 @@ config__module(const char *value, struct perf_probe_event *pev) ...@@ -140,8 +140,7 @@ config__module(const char *value, struct perf_probe_event *pev)
} }
static int static int
config__bool(const char *value, prog_config__bool(const char *value, bool *pbool, bool invert)
bool *pbool, bool invert)
{ {
int err; int err;
bool bool_value; bool bool_value;
...@@ -158,17 +157,17 @@ config__bool(const char *value, ...@@ -158,17 +157,17 @@ config__bool(const char *value,
} }
static int static int
config__inlines(const char *value, prog_config__inlines(const char *value,
struct perf_probe_event *pev __maybe_unused) struct perf_probe_event *pev __maybe_unused)
{ {
return config__bool(value, &probe_conf.no_inlines, true); return prog_config__bool(value, &probe_conf.no_inlines, true);
} }
static int static int
config__force(const char *value, prog_config__force(const char *value,
struct perf_probe_event *pev __maybe_unused) struct perf_probe_event *pev __maybe_unused)
{ {
return config__bool(value, &probe_conf.force_add, false); return prog_config__bool(value, &probe_conf.force_add, false);
} }
static struct { static struct {
...@@ -176,58 +175,58 @@ static struct { ...@@ -176,58 +175,58 @@ static struct {
const char *usage; const char *usage;
const char *desc; const char *desc;
int (*func)(const char *, struct perf_probe_event *); int (*func)(const char *, struct perf_probe_event *);
} bpf_config_terms[] = { } bpf_prog_config_terms[] = {
{ {
.key = "exec", .key = "exec",
.usage = "exec=<full path of file>", .usage = "exec=<full path of file>",
.desc = "Set uprobe target", .desc = "Set uprobe target",
.func = config__exec, .func = prog_config__exec,
}, },
{ {
.key = "module", .key = "module",
.usage = "module=<module name> ", .usage = "module=<module name> ",
.desc = "Set kprobe module", .desc = "Set kprobe module",
.func = config__module, .func = prog_config__module,
}, },
{ {
.key = "inlines", .key = "inlines",
.usage = "inlines=[yes|no] ", .usage = "inlines=[yes|no] ",
.desc = "Probe at inline symbol", .desc = "Probe at inline symbol",
.func = config__inlines, .func = prog_config__inlines,
}, },
{ {
.key = "force", .key = "force",
.usage = "force=[yes|no] ", .usage = "force=[yes|no] ",
.desc = "Forcibly add events with existing name", .desc = "Forcibly add events with existing name",
.func = config__force, .func = prog_config__force,
}, },
}; };
static int static int
do_config(const char *key, const char *value, do_prog_config(const char *key, const char *value,
struct perf_probe_event *pev) struct perf_probe_event *pev)
{ {
unsigned int i; unsigned int i;
pr_debug("config bpf program: %s=%s\n", key, value); pr_debug("config bpf program: %s=%s\n", key, value);
for (i = 0; i < ARRAY_SIZE(bpf_config_terms); i++) for (i = 0; i < ARRAY_SIZE(bpf_prog_config_terms); i++)
if (strcmp(key, bpf_config_terms[i].key) == 0) if (strcmp(key, bpf_prog_config_terms[i].key) == 0)
return bpf_config_terms[i].func(value, pev); return bpf_prog_config_terms[i].func(value, pev);
pr_debug("BPF: ERROR: invalid config option in object: %s=%s\n", pr_debug("BPF: ERROR: invalid program config option: %s=%s\n",
key, value); key, value);
pr_debug("\nHint: Currently valid options are:\n"); pr_debug("\nHint: Valid options are:\n");
for (i = 0; i < ARRAY_SIZE(bpf_config_terms); i++) for (i = 0; i < ARRAY_SIZE(bpf_prog_config_terms); i++)
pr_debug("\t%s:\t%s\n", bpf_config_terms[i].usage, pr_debug("\t%s:\t%s\n", bpf_prog_config_terms[i].usage,
bpf_config_terms[i].desc); bpf_prog_config_terms[i].desc);
pr_debug("\n"); pr_debug("\n");
return -BPF_LOADER_ERRNO__CONFIG_TERM; return -BPF_LOADER_ERRNO__PROGCONF_TERM;
} }
static const char * static const char *
parse_config_kvpair(const char *config_str, struct perf_probe_event *pev) parse_prog_config_kvpair(const char *config_str, struct perf_probe_event *pev)
{ {
char *text = strdup(config_str); char *text = strdup(config_str);
char *sep, *line; char *sep, *line;
...@@ -253,7 +252,7 @@ parse_config_kvpair(const char *config_str, struct perf_probe_event *pev) ...@@ -253,7 +252,7 @@ parse_config_kvpair(const char *config_str, struct perf_probe_event *pev)
} }
*equ = '\0'; *equ = '\0';
err = do_config(line, equ + 1, pev); err = do_prog_config(line, equ + 1, pev);
if (err) if (err)
break; break;
nextline: nextline:
...@@ -268,10 +267,10 @@ parse_config_kvpair(const char *config_str, struct perf_probe_event *pev) ...@@ -268,10 +267,10 @@ parse_config_kvpair(const char *config_str, struct perf_probe_event *pev)
} }
static int static int
parse_config(const char *config_str, struct perf_probe_event *pev) parse_prog_config(const char *config_str, struct perf_probe_event *pev)
{ {
int err; int err;
const char *main_str = parse_config_kvpair(config_str, pev); const char *main_str = parse_prog_config_kvpair(config_str, pev);
if (IS_ERR(main_str)) if (IS_ERR(main_str))
return PTR_ERR(main_str); return PTR_ERR(main_str);
...@@ -312,7 +311,7 @@ config_bpf_program(struct bpf_program *prog) ...@@ -312,7 +311,7 @@ config_bpf_program(struct bpf_program *prog)
pev = &priv->pev; pev = &priv->pev;
pr_debug("bpf: config program '%s'\n", config_str); pr_debug("bpf: config program '%s'\n", config_str);
err = parse_config(config_str, pev); err = parse_prog_config(config_str, pev);
if (err) if (err)
goto errout; goto errout;
...@@ -750,7 +749,7 @@ static const char *bpf_loader_strerror_table[NR_ERRNO] = { ...@@ -750,7 +749,7 @@ static const char *bpf_loader_strerror_table[NR_ERRNO] = {
[ERRCODE_OFFSET(EVENTNAME)] = "No event name found in config string", [ERRCODE_OFFSET(EVENTNAME)] = "No event name found in config string",
[ERRCODE_OFFSET(INTERNAL)] = "BPF loader internal error", [ERRCODE_OFFSET(INTERNAL)] = "BPF loader internal error",
[ERRCODE_OFFSET(COMPILE)] = "Error when compiling BPF scriptlet", [ERRCODE_OFFSET(COMPILE)] = "Error when compiling BPF scriptlet",
[ERRCODE_OFFSET(CONFIG_TERM)] = "Invalid config term in config string", [ERRCODE_OFFSET(PROGCONF_TERM)] = "Invalid program config term in config string",
[ERRCODE_OFFSET(PROLOGUE)] = "Failed to generate prologue", [ERRCODE_OFFSET(PROLOGUE)] = "Failed to generate prologue",
[ERRCODE_OFFSET(PROLOGUE2BIG)] = "Prologue too big for program", [ERRCODE_OFFSET(PROLOGUE2BIG)] = "Prologue too big for program",
[ERRCODE_OFFSET(PROLOGUEOOB)] = "Offset out of bound for prologue", [ERRCODE_OFFSET(PROLOGUEOOB)] = "Offset out of bound for prologue",
...@@ -834,7 +833,7 @@ int bpf__strerror_probe(struct bpf_object *obj __maybe_unused, ...@@ -834,7 +833,7 @@ int bpf__strerror_probe(struct bpf_object *obj __maybe_unused,
int err, char *buf, size_t size) int err, char *buf, size_t size)
{ {
bpf__strerror_head(err, buf, size); bpf__strerror_head(err, buf, size);
case BPF_LOADER_ERRNO__CONFIG_TERM: { case BPF_LOADER_ERRNO__PROGCONF_TERM: {
scnprintf(buf, size, "%s (add -v to see detail)", emsg); scnprintf(buf, size, "%s (add -v to see detail)", emsg);
break; break;
} }
......
...@@ -20,7 +20,7 @@ enum bpf_loader_errno { ...@@ -20,7 +20,7 @@ enum bpf_loader_errno {
BPF_LOADER_ERRNO__EVENTNAME, /* Event name is missing */ BPF_LOADER_ERRNO__EVENTNAME, /* Event name is missing */
BPF_LOADER_ERRNO__INTERNAL, /* BPF loader internal error */ BPF_LOADER_ERRNO__INTERNAL, /* BPF loader internal error */
BPF_LOADER_ERRNO__COMPILE, /* Error when compiling BPF scriptlet */ BPF_LOADER_ERRNO__COMPILE, /* Error when compiling BPF scriptlet */
BPF_LOADER_ERRNO__CONFIG_TERM, /* Invalid config term in config term */ BPF_LOADER_ERRNO__PROGCONF_TERM,/* Invalid program config term in config string */
BPF_LOADER_ERRNO__PROLOGUE, /* Failed to generate prologue */ BPF_LOADER_ERRNO__PROLOGUE, /* Failed to generate prologue */
BPF_LOADER_ERRNO__PROLOGUE2BIG, /* Prologue too big for program */ BPF_LOADER_ERRNO__PROLOGUE2BIG, /* Prologue too big for program */
BPF_LOADER_ERRNO__PROLOGUEOOB, /* Offset out of bound for prologue */ BPF_LOADER_ERRNO__PROLOGUEOOB, /* Offset out of bound for prologue */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册