[RFC PATCH bpf-next 5/7] bpf, s390: Make program update work for trampoline ops
Jordan Rife
jordan at jrife.io
Mon Nov 17 16:52:57 PST 2025
Use update_prog in place of current link prog when link matches
update_link.
Signed-off-by: Jordan Rife <jordan at jrife.io>
---
arch/s390/net/bpf_jit_comp.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
index cf461d76e9da..bf70302d1009 100644
--- a/arch/s390/net/bpf_jit_comp.c
+++ b/arch/s390/net/bpf_jit_comp.c
@@ -2508,20 +2508,19 @@ static void load_imm64(struct bpf_jit *jit, int dst_reg, u64 val)
static int invoke_bpf_prog(struct bpf_tramp_jit *tjit,
const struct btf_func_model *m,
- struct bpf_tramp_link *tlink, bool save_ret)
+ struct bpf_prog *p, u64 cookie, bool save_ret)
{
struct bpf_jit *jit = &tjit->common;
int cookie_off = tjit->run_ctx_off +
offsetof(struct bpf_tramp_run_ctx, bpf_cookie);
- struct bpf_prog *p = tlink->link.prog;
int patch;
/*
- * run_ctx.cookie = tlink->cookie;
+ * run_ctx.cookie = cookie;
*/
- /* %r0 = tlink->cookie */
- load_imm64(jit, REG_W0, tlink->cookie);
+ /* %r0 = cookie */
+ load_imm64(jit, REG_W0, cookie);
/* stg %r0,cookie_off(%r15) */
EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W0, REG_0, REG_15, cookie_off);
@@ -2768,7 +2767,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
}
for (i = 0; i < fentry->nr_links; i++)
- if (invoke_bpf_prog(tjit, m, fentry->links[i],
+ if (invoke_bpf_prog(tjit, m, bpf_tramp_links_prog(fentry, i),
+ fentry->links[i]->cookie,
flags & BPF_TRAMP_F_RET_FENTRY_RET))
return -EINVAL;
@@ -2782,7 +2782,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
0xf000 | tjit->retval_off);
for (i = 0; i < fmod_ret->nr_links; i++) {
- if (invoke_bpf_prog(tjit, m, fmod_ret->links[i], true))
+ if (invoke_bpf_prog(tjit, m,
+ bpf_tramp_links_prog(fmod_ret, i),
+ fmod_ret->links[i]->cookie, true))
return -EINVAL;
/*
@@ -2850,7 +2852,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
/* do_fexit: */
tjit->do_fexit = jit->prg;
for (i = 0; i < fexit->nr_links; i++)
- if (invoke_bpf_prog(tjit, m, fexit->links[i], false))
+ if (invoke_bpf_prog(tjit, m, bpf_tramp_links_prog(fexit, i),
+ fexit->links[i]->cookie, false))
return -EINVAL;
if (flags & BPF_TRAMP_F_CALL_ORIG) {
@@ -2946,6 +2949,11 @@ int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image,
return ret < 0 ? ret : tjit.common.prg;
}
+bool bpf_trampoline_supports_update_prog(void)
+{
+ return true;
+}
+
bool bpf_jit_supports_subprog_tailcalls(void)
{
return true;
--
2.43.0
More information about the linux-arm-kernel
mailing list