mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
bpf: Factor fsession link to use struct bpf_tramp_node
Now that we split trampoline attachment object (bpf_tramp_node) from the link object (bpf_tramp_link) we can use bpf_tramp_node as fsession's fexit attachment object and get rid of the bpf_fsession_link object. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Link: https://lore.kernel.org/r/20260606123955.345967-10-jolsa@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
65499074ef
commit
880db5d4ab
@@ -1927,15 +1927,11 @@ struct bpf_shim_tramp_link {
|
||||
|
||||
struct bpf_tracing_link {
|
||||
struct bpf_tramp_link link;
|
||||
struct bpf_tramp_node fexit;
|
||||
struct bpf_trampoline *trampoline;
|
||||
struct bpf_prog *tgt_prog;
|
||||
};
|
||||
|
||||
struct bpf_fsession_link {
|
||||
struct bpf_tracing_link link;
|
||||
struct bpf_tramp_link fexit;
|
||||
};
|
||||
|
||||
struct bpf_raw_tp_link {
|
||||
struct bpf_link link;
|
||||
struct bpf_raw_event_map *btp;
|
||||
|
||||
@@ -3730,21 +3730,7 @@ static int bpf_tracing_prog_attach(struct bpf_prog *prog,
|
||||
key = bpf_trampoline_compute_key(tgt_prog, NULL, btf_id);
|
||||
}
|
||||
|
||||
if (prog->expected_attach_type == BPF_TRACE_FSESSION) {
|
||||
struct bpf_fsession_link *fslink;
|
||||
|
||||
fslink = kzalloc_obj(*fslink, GFP_USER);
|
||||
if (fslink) {
|
||||
bpf_tramp_link_init(&fslink->fexit, BPF_LINK_TYPE_TRACING,
|
||||
&bpf_tracing_link_lops, prog, attach_type,
|
||||
bpf_cookie);
|
||||
link = &fslink->link;
|
||||
} else {
|
||||
link = NULL;
|
||||
}
|
||||
} else {
|
||||
link = kzalloc_obj(*link, GFP_USER);
|
||||
}
|
||||
link = kzalloc_obj(*link, GFP_USER);
|
||||
if (!link) {
|
||||
err = -ENOMEM;
|
||||
goto out_put_prog;
|
||||
@@ -3752,6 +3738,11 @@ static int bpf_tracing_prog_attach(struct bpf_prog *prog,
|
||||
bpf_tramp_link_init(&link->link, BPF_LINK_TYPE_TRACING,
|
||||
&bpf_tracing_link_lops, prog, attach_type, bpf_cookie);
|
||||
|
||||
if (prog->expected_attach_type == BPF_TRACE_FSESSION) {
|
||||
link->fexit.link = &link->link.link;
|
||||
link->fexit.cookie = bpf_cookie;
|
||||
}
|
||||
|
||||
mutex_lock(&prog->aux->dst_mutex);
|
||||
|
||||
/* There are a few possible cases here:
|
||||
|
||||
@@ -823,7 +823,7 @@ static int bpf_trampoline_add_prog(struct bpf_trampoline *tr,
|
||||
struct bpf_tramp_node *node,
|
||||
int cnt)
|
||||
{
|
||||
struct bpf_fsession_link *fslink = NULL;
|
||||
struct bpf_tracing_link *tr_link = NULL;
|
||||
enum bpf_tramp_prog_type kind;
|
||||
struct bpf_tramp_node *node_existing;
|
||||
struct hlist_head *prog_list;
|
||||
@@ -850,8 +850,8 @@ static int bpf_trampoline_add_prog(struct bpf_trampoline *tr,
|
||||
hlist_add_head(&node->tramp_hlist, prog_list);
|
||||
if (kind == BPF_TRAMP_FSESSION) {
|
||||
tr->progs_cnt[BPF_TRAMP_FENTRY]++;
|
||||
fslink = container_of(node, struct bpf_fsession_link, link.link.node);
|
||||
hlist_add_head(&fslink->fexit.node.tramp_hlist, &tr->progs_hlist[BPF_TRAMP_FEXIT]);
|
||||
tr_link = container_of(node, struct bpf_tracing_link, link.node);
|
||||
hlist_add_head(&tr_link->fexit.tramp_hlist, &tr->progs_hlist[BPF_TRAMP_FEXIT]);
|
||||
tr->progs_cnt[BPF_TRAMP_FEXIT]++;
|
||||
} else {
|
||||
tr->progs_cnt[kind]++;
|
||||
@@ -862,13 +862,13 @@ static int bpf_trampoline_add_prog(struct bpf_trampoline *tr,
|
||||
static void bpf_trampoline_remove_prog(struct bpf_trampoline *tr,
|
||||
struct bpf_tramp_node *node)
|
||||
{
|
||||
struct bpf_fsession_link *fslink;
|
||||
struct bpf_tracing_link *tr_link;
|
||||
enum bpf_tramp_prog_type kind;
|
||||
|
||||
kind = bpf_attach_type_to_tramp(node->link->prog);
|
||||
if (kind == BPF_TRAMP_FSESSION) {
|
||||
fslink = container_of(node, struct bpf_fsession_link, link.link.node);
|
||||
hlist_del_init(&fslink->fexit.node.tramp_hlist);
|
||||
tr_link = container_of(node, struct bpf_tracing_link, link.node);
|
||||
hlist_del_init(&tr_link->fexit.tramp_hlist);
|
||||
tr->progs_cnt[BPF_TRAMP_FEXIT]--;
|
||||
kind = BPF_TRAMP_FENTRY;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user