From nobody Fri Apr 17 01:46:31 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F197736BCF1 for ; Tue, 24 Feb 2026 09:22:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771924959; cv=none; b=tjp84rPr5RUHgy42vkdK/jUKeCVoQs2iiusRcKe3D0ElZJpkrUeOmNBG0JCOwy+5rv0fIctoUXeDr3jFPewFtOSQWy5FZdt5xHT1svfd03rWoFMT9gVzKhC9davvQXgyMEUj9Z380hPI63Vi11R7B7suwPMbnLN+IIxIcZdnUD4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771924959; c=relaxed/simple; bh=//m8dH3bHSjki//i9VjUuOHfUAtffvLarIX5CXsBeds=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E7DbgeIaM+ZaWB2ToNQ9cGG4v2tDHjtPLlir6dqiGhEatni+6Y4nRtlypJIwyUx1vtVl6RRcZ75jTF9jkqxnuDPtBqAM1v+5w+n/s4LEKvsjplSCha5o3+ktGOfwN5ZlNxJ9eMdISddUzROmt7frP2Vmy9M+H3Z3rmqOBYhtZ2U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lVfvXqIR; arc=none smtp.client-ip=209.85.214.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lVfvXqIR" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-2ab232cc803so25786415ad.3 for ; Tue, 24 Feb 2026 01:22:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771924956; x=1772529756; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dpLKOE0cSQ+70LbrawdOonDNbKPUoXYYa3UgZRxOrKk=; b=lVfvXqIR/kNBvdjwiRF/wycVqVRkYyad2JExmTTCItTm+AJ+CvPkRExMgiwTgj7c58 qygeSR5CjMKa9RNyAxFkKhzdzH2e1rsAjATXbAHX09e65KQZbLdBImChgowNnz+fzTBm c3Nq/Yd3uy1yiIHac7JBgwE/KHYdCG6OruP9DBAexv7h0s4FsHSOkpOLw4+afxdRqBme 9NRd+XI8BqXuD7iKYWOR9oGBCBUZXJaNzSf0WydbWS5QPVC8qrj9W9XJGfV3jh52yqxT HnG1KiYTJzWpGXM1anVCq8WAGGWcU9Fm0sNO3TaIrK3Vi6gzdnQBYidsZgnop2WAhVLr 0JPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771924956; x=1772529756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dpLKOE0cSQ+70LbrawdOonDNbKPUoXYYa3UgZRxOrKk=; b=akkpr+F6aXpLZowIx4vBGY1aWfLatn/FiYdJxrJHeepjhI6DBxhJMVlb3D8q4L3jKE B5erw4qnxgaOWvqnMIw9v5sFMWlcmhYedaoFF4QwI3i2xDerf/0aG4N/O99hSwDNUjF3 mLrEgJ4YWoOlGGTpJKysFyb5vmiQL2uYHQFIgcdt/oqqyVSsLn8vfWt9kELy0ZAMiqlE sakfxImNWTgp+GOPu/esO10axJQ7EtTTxztzR2qA9GqmACfQkiR/0sgsmqxTEhSXYqSl wzFRT4ez1sP9WmJnVE02klL67Xw5gMuVa0Uv4nBvet8XuIdAQAaSk9pR/37uF+LZsIjO inFQ== X-Forwarded-Encrypted: i=1; AJvYcCUPx3D8MqMJ0wkqBZCH85bZtVM2Rxdvb2kFxBnnADkdjIcTby3BEs0wK1/xVjEeOXsMuJS2kYpZvgIDB0o=@vger.kernel.org X-Gm-Message-State: AOJu0YzHk8P9EzGg0KCZ7PicPlL2M4iVaXHvy43kI8Fk36WLmU7GmJuI gdScXaB1j3Lp+ZpuvHvB5RAGqRWzDHzel2WkdK1jvD8CoSXUG3Q/k4tn X-Gm-Gg: ATEYQzzu252JoSpBH7brs89NxOPm4n4NISRAaKvm9xGkuJ3pGcFuremSY62Eum0JhyN 045xOoevUpDEEcMGoRTd0qX6q2H7eiXkMv1VjJxAEQNrwUUjYx+8l7rKBwiFaSDWCgWXVFqtg07 trsqDTvEofxjQh7bepIOZPAy8bQ7nDBkRFClmsdXhb+qyohNx3ckpkDELlka104ZznkFge6T6F1 XbI88xUubOCWI2ogosLflOeEkGeCnfXIXivdlUSLlt8mcD0mK6/e+KP01Ib+xiYV21ki8DpLcj1 M13HilsZ9wb5GNqbzlKohJiH8WDIY7VarfxWMHhzyofbCncWlBHz/KwAuk0g+FaoXc84PZS8PIv uRX+eOg8LZSsMIKJ0q9llNEHT6IL36w935EI7KOdwWXgmfipIoXjV51tS48emQ1cT0s1Je7t0qB 3J7BCv6bOBddVndfaYrOyI X-Received: by 2002:a17:902:ecc6:b0:2aa:f469:fa23 with SMTP id d9443c01a7336-2ad74419efemr91872495ad.4.1771924956249; Tue, 24 Feb 2026 01:22:36 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad7500e2b2sm97181695ad.52.2026.02.24.01.22.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Feb 2026 01:22:35 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, iii@linux.ibm.com Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, borntraeger@linux.ibm.com, svens@linux.ibm.com, bpf@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v2 1/3] bpf,s390: introduce emit_store_stack_imm64() for trampoline Date: Tue, 24 Feb 2026 17:22:06 +0800 Message-ID: <20260224092208.1395085-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260224092208.1395085-1-dongml2@chinatelecom.cn> References: <20260224092208.1395085-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce a helper to store 64-bit immediate on the trampoline stack with a help of a register. Signed-off-by: Menglong Dong Acked-by: Ilya Leoshkevich --- v2: - keep LGHI as it was --- arch/s390/net/bpf_jit_comp.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index 579461d471bb..76c80d75184f 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c @@ -2506,6 +2506,13 @@ static void load_imm64(struct bpf_jit *jit, int dst_= reg, u64 val) EMIT6_IMM(0xc00d0000, dst_reg, val); } =20 +static void emit_store_stack_imm64(struct bpf_jit *jit, int tmp_reg, int s= tack_off, u64 imm) +{ + load_imm64(jit, tmp_reg, imm); + /* stg %tmp_reg,stack_off(%r15) */ + EMIT6_DISP_LH(0xe3000000, 0x0024, tmp_reg, REG_0, REG_15, stack_off); +} + static int invoke_bpf_prog(struct bpf_tramp_jit *tjit, const struct btf_func_model *m, struct bpf_tramp_link *tlink, bool save_ret) @@ -2520,10 +2527,7 @@ static int invoke_bpf_prog(struct bpf_tramp_jit *tji= t, * run_ctx.cookie =3D tlink->cookie; */ =20 - /* %r0 =3D tlink->cookie */ - load_imm64(jit, REG_W0, tlink->cookie); - /* stg %r0,cookie_off(%r15) */ - EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W0, REG_0, REG_15, cookie_off); + emit_store_stack_imm64(jit, REG_W0, cookie_off, tlink->cookie); =20 /* * if ((start =3D __bpf_prog_enter(p, &run_ctx)) =3D=3D 0) @@ -2743,13 +2747,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, * arg_cnt =3D m->nr_args; */ =20 - if (flags & BPF_TRAMP_F_IP_ARG) { - /* %r0 =3D func_addr */ - load_imm64(jit, REG_0, (u64)func_addr); - /* stg %r0,ip_off(%r15) */ - EMIT6_DISP_LH(0xe3000000, 0x0024, REG_0, REG_0, REG_15, - tjit->ip_off); - } + if (flags & BPF_TRAMP_F_IP_ARG) + emit_store_stack_imm64(jit, REG_0, tjit->ip_off, (u64)func_addr); /* lghi %r0,nr_bpf_args */ EMIT4_IMM(0xa7090000, REG_0, nr_bpf_args); /* stg %r0,arg_cnt_off(%r15) */ --=20 2.53.0 From nobody Fri Apr 17 01:46:31 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67EF336B061 for ; Tue, 24 Feb 2026 09:22:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771924968; cv=none; b=m1co/73E4jlUPyyHxJ0RuwGLzFZmp69BCqpP0eQgBk7pG+BLAIRVt4x7AKPDfieBIRJaZ6uUtrTdI1hcLfA+egCQsvR9Rqi5sD0Wc2JsngJZ6F3Cd0ZdmHr5HjkLSfeeASwL597fBoFQgqZM5Qj1l0qm/U7Lqwt7nCfwh9VkI28= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771924968; c=relaxed/simple; bh=r0QhidL2qVGhtoDDwycY2a78DmN6eqKCVWtFn/P0iBU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V0I7fRRrDQv4gk/rwS/b9NQ6bjonSQuFEB4M+CK525EYrw8SCtGfovy+M0twE2zrex4LZ+GEjjQXgvYdcsOJLvrycFPgN4Bh7890aLbAT5cV/ld4tdAzNSZd5vRI76Glj9+uRi8ZyRyuENf5tKDb6OAjwLRK08Ar+KMnLhFYJRA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fgoww0tV; arc=none smtp.client-ip=209.85.214.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fgoww0tV" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-2a7a9b8ed69so45809805ad.2 for ; Tue, 24 Feb 2026 01:22:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771924967; x=1772529767; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ECViA3v1HDI+Yk9qZobu+6ZWgxCzTlC7kywhlIlor0w=; b=fgoww0tVBq/lLMnrlpWhXuO1QkTmH6MR+31kTnl5NP/jXP0X/OcrPJiqd3YQc6ayV6 IJO4SjFGM275YTSLNkjGKhOIoKcRtKPq7PPFibO/1ktf3KOALsEmrWQ8riXijsAr0Pgc TeL9fX2RtrgTxr203nBVGeS+OJwAxn/It5hLPjKmxZcrMWHLbEHMPc3cGUzePtxwayUL llS431XWL6wIUWFpMutbpUFn/7YajxLyJp7oljQGIsHlIypah2bAK3H0gbAsIesVJHIg B8m9fm6iszWouNzpIyHsRPblrA5Wbsu0BeZgVKflr4HyAhH6dmFcG5bWW6YgOBAhsYhT T19A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771924967; x=1772529767; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ECViA3v1HDI+Yk9qZobu+6ZWgxCzTlC7kywhlIlor0w=; b=DASFADgcWLyzX4dmOqQEpPQSQkZ8RiS/mLdeEog2gxeMNYszCTO3g+1VTeI16ZiJri hUFpETkuVO/lOzPGITDAtjFlRvqvxgdb6RFqvkSFtoks3t5xUBq9oX692aYWZxjy2god W3Bc+jBFWRhpQO8YPttrGxkRVvVtxZDeKJtHCt2w+S/vwSf73NxbgGLO0nX/VY0aMCR3 gvFDDOqStikgAbq5MNceLRWzCQoUunQLQEKgV26Jvzg6PAt/WB8NoPsJKMRxdE5CVsh3 FqG4ZFMz30disvtdhlwPSCnw+uOjVxFugf7IDZu7iRXWKypYxFyIgymSy42sg43Yga1d 4pdw== X-Forwarded-Encrypted: i=1; AJvYcCXWz9lrlG+YkiTbCPKkVy+HRZ10V4ZjkitO+/ld15jeqD+Ck2A0SVwBJGokDGXdtB0WzY/wGQXiM9cnWuA=@vger.kernel.org X-Gm-Message-State: AOJu0YwB1YKrqC3iMxNa1oh/gJFQ6nANKsCLU7B2Qz14l9zV+eYMsyml 9GRFkA8wpvM6feoMZ6rHdKQIsc4x9HceV5md8mKHuglyXRZEQlJQprvk X-Gm-Gg: ATEYQzyWztcYG6gd5JPop+GP3mdEQrD82CE4Smy1NZRPAbypBtlAGzpgAomKaAYkn+q 8tM0/R+3JmSNPWXlMnAaOtXOXZRb7H9WV9wV+bH8RGFIYdVCCBGfLWbT5D3pI9nXvtTHK2/2Lr3 O9ut/YY2Uh0FieLzF7TVkG84FXJpGPUk1fjyfqfOcqCzlzwY6MJWzQwdz53yfOIwx2N0N75MPSG /QxpPebSzNvHxbHwQYQsBC9n4V+iL7IHVzUxM7dmsMw47vJdW/tP+tcuTmP5aSNLjR2/D7KI2T0 2V+CB18SaYfxLmQxjxJwdObG5H38xiZ5d078pyiEW1JGHdpX8/BLPchyQlMeNVM7sREbYT5AoEw 2neLHXRk77F00AMZIaLEE1mClZBZwiXZljq0iDLsCaqG9ABZqT2ANH2JleAefvhlrKH3WDHf7cB 66AbahIDOr7qQb26bUQuRH X-Received: by 2002:a17:903:2a83:b0:2aa:f43d:7c4b with SMTP id d9443c01a7336-2ad74447149mr92280335ad.19.1771924966875; Tue, 24 Feb 2026 01:22:46 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad7500e2b2sm97181695ad.52.2026.02.24.01.22.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Feb 2026 01:22:46 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, iii@linux.ibm.com Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, borntraeger@linux.ibm.com, svens@linux.ibm.com, bpf@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v2 2/3] bpf,s390: add fsession support for trampolines Date: Tue, 24 Feb 2026 17:22:07 +0800 Message-ID: <20260224092208.1395085-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260224092208.1395085-1-dongml2@chinatelecom.cn> References: <20260224092208.1395085-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement BPF_TRACE_FSESSION support for s390. The logic here is similar to what we did in x86_64. In order to simply the logic, we factor out the function invoke_bpf() for fentry and fexit. Signed-off-by: Menglong Dong --- v2: - fix up the comment style - remove the unnecessary checking of fentry->nr_links and fexit->nr_links --- arch/s390/net/bpf_jit_comp.c | 74 +++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 14 deletions(-) diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index 76c80d75184f..2db32bb04246 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c @@ -2480,8 +2480,8 @@ struct bpf_tramp_jit { int ip_off; /* For bpf_get_func_ip(), has to be at * (ctx - 16) */ - int arg_cnt_off; /* For bpf_get_func_arg_cnt(), has to be at - * (ctx - 8) + int func_meta_off; /* For bpf_get_func_arg_cnt()/fsession, has + * to be at (ctx - 8) */ int bpf_args_off; /* Offset of BPF_PROG context, which consists * of BPF arguments followed by return value @@ -2585,6 +2585,28 @@ static int invoke_bpf_prog(struct bpf_tramp_jit *tji= t, return 0; } =20 +static int invoke_bpf(struct bpf_tramp_jit *tjit, + const struct btf_func_model *m, + struct bpf_tramp_links *tl, bool save_ret, + u64 func_meta, int cookie_off) +{ + int i, cur_cookie =3D (tjit->bpf_args_off - cookie_off) / sizeof(u64); + struct bpf_jit *jit =3D &tjit->common; + + for (i =3D 0; i < tl->nr_links; i++) { + if (bpf_prog_calls_session_cookie(tl->links[i])) { + u64 meta =3D func_meta | ((u64)cur_cookie << BPF_TRAMP_COOKIE_INDEX_SHI= FT); + + emit_store_stack_imm64(jit, REG_0, tjit->func_meta_off, meta); + cur_cookie--; + } + if (invoke_bpf_prog(tjit, m, tl->links[i], save_ret)) + return -EINVAL; + } + + return 0; +} + static int alloc_stack(struct bpf_tramp_jit *tjit, size_t size) { int stack_offset =3D tjit->stack_size; @@ -2614,8 +2636,10 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, struct bpf_tramp_links *fentry =3D &tlinks[BPF_TRAMP_FENTRY]; struct bpf_tramp_links *fexit =3D &tlinks[BPF_TRAMP_FEXIT]; int nr_bpf_args, nr_reg_args, nr_stack_args; + int cookie_cnt, cookie_off, fsession_cnt; struct bpf_jit *jit =3D &tjit->common; int arg, bpf_arg_off; + u64 func_meta; int i, j; =20 /* Support as many stack arguments as "mvc" instruction can handle. */ @@ -2647,6 +2671,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, return -ENOTSUPP; } =20 + cookie_cnt =3D bpf_fsession_cookie_cnt(tlinks); + fsession_cnt =3D bpf_fsession_cnt(tlinks); + /* * Calculate the stack layout. */ @@ -2659,8 +2686,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, tjit->backchain_off =3D tjit->stack_size - sizeof(u64); tjit->stack_args_off =3D alloc_stack(tjit, nr_stack_args * sizeof(u64)); tjit->reg_args_off =3D alloc_stack(tjit, nr_reg_args * sizeof(u64)); + cookie_off =3D alloc_stack(tjit, cookie_cnt * sizeof(u64)); tjit->ip_off =3D alloc_stack(tjit, sizeof(u64)); - tjit->arg_cnt_off =3D alloc_stack(tjit, sizeof(u64)); + tjit->func_meta_off =3D alloc_stack(tjit, sizeof(u64)); tjit->bpf_args_off =3D alloc_stack(tjit, nr_bpf_args * sizeof(u64)); tjit->retval_off =3D alloc_stack(tjit, sizeof(u64)); tjit->r7_r8_off =3D alloc_stack(tjit, 2 * sizeof(u64)); @@ -2749,11 +2777,12 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, =20 if (flags & BPF_TRAMP_F_IP_ARG) emit_store_stack_imm64(jit, REG_0, tjit->ip_off, (u64)func_addr); - /* lghi %r0,nr_bpf_args */ - EMIT4_IMM(0xa7090000, REG_0, nr_bpf_args); - /* stg %r0,arg_cnt_off(%r15) */ + func_meta =3D nr_bpf_args; + /* lghi %r0,func_meta */ + EMIT4_IMM(0xa7090000, REG_0, func_meta); + /* stg %r0,func_meta_off(%r15) */ EMIT6_DISP_LH(0xe3000000, 0x0024, REG_0, REG_0, REG_15, - tjit->arg_cnt_off); + tjit->func_meta_off); =20 if (flags & BPF_TRAMP_F_CALL_ORIG) { /* @@ -2766,10 +2795,17 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, EMIT6_PCREL_RILB_PTR(0xc0050000, REG_14, __bpf_tramp_enter); } =20 - for (i =3D 0; i < fentry->nr_links; i++) - if (invoke_bpf_prog(tjit, m, fentry->links[i], - flags & BPF_TRAMP_F_RET_FENTRY_RET)) - return -EINVAL; + if (fsession_cnt) { + /* Clear all the session cookies' value. */ + for (i =3D 0; i < cookie_cnt; i++) + emit_store_stack_imm64(jit, REG_0, cookie_off + 8 * i, 0); + /* Clear the return value to make sure fentry always gets 0. */ + emit_store_stack_imm64(jit, REG_0, tjit->retval_off, 0); + } + + if (invoke_bpf(tjit, m, fentry, flags & BPF_TRAMP_F_RET_FENTRY_RET, + func_meta, cookie_off)) + return -EINVAL; =20 if (fmod_ret->nr_links) { /* @@ -2846,11 +2882,16 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, EMIT6_PCREL_RILC(0xc0040000, 0, (u64)im->ip_epilogue); } =20 + /* Set the "is_return" flag for fsession. */ + func_meta |=3D (1ULL << BPF_TRAMP_IS_RETURN_SHIFT); + if (fsession_cnt) + emit_store_stack_imm64(jit, REG_W0, tjit->func_meta_off, + func_meta); + /* do_fexit: */ tjit->do_fexit =3D jit->prg; - for (i =3D 0; i < fexit->nr_links; i++) - if (invoke_bpf_prog(tjit, m, fexit->links[i], false)) - return -EINVAL; + if (invoke_bpf(tjit, m, fexit, false, func_meta, cookie_off)) + return -EINVAL; =20 if (flags & BPF_TRAMP_F_CALL_ORIG) { im->ip_epilogue =3D jit->prg_buf + jit->prg; @@ -2955,6 +2996,11 @@ bool bpf_jit_supports_arena(void) return true; } =20 +bool bpf_jit_supports_fsession(void) +{ + return true; +} + bool bpf_jit_supports_insn(struct bpf_insn *insn, bool in_arena) { if (!in_arena) --=20 2.53.0 From nobody Fri Apr 17 01:46:31 2026 Received: from mail-pg1-f193.google.com (mail-pg1-f193.google.com [209.85.215.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C72936AB50 for ; Tue, 24 Feb 2026 09:22:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771924979; cv=none; b=hZhnx5qqZMo0jz3wNaf1lZ8OcpffKtRESmnhDIXoRAiYivx/WtlNv9mRwA6UAUHSB0I8YhJDx+FXJzRMb6MCidJHempiB/SuyE0UHvngbG3B/V5TmfaRcFH1Mp5EVwPvHR2UEWAt7H+hj0zu9RUkQntglsPN48b9t5uAF4R/PN0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771924979; c=relaxed/simple; bh=iA1WwvmzDS5SoQjU9t8h48yCceGfEAvtxk1RGs93S9o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gamy+Ho4jOtirWr/nwGK2YyFLrKIjjxzscJ9zyH04bMcpPA6JQ1hYuycaN1Wpu5UMC+1B7ejfOQIqEigzM5NzJR3BoI/nu7yKk7bi+H0LdR166020jIa/Qg0exCzKqqufFQ7pWCC6Yfmnzkv9eY+uUbSacZhfXdJibsAVk0kMWo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=M3Q+bRJe; arc=none smtp.client-ip=209.85.215.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="M3Q+bRJe" Received: by mail-pg1-f193.google.com with SMTP id 41be03b00d2f7-c6e5998f90dso1764289a12.1 for ; Tue, 24 Feb 2026 01:22:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771924977; x=1772529777; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dFREYxUIZ0cRYQkkmQ4UIO9hPNsMXbWBqRtIGvrYot8=; b=M3Q+bRJeWaj0x3+ELxz0mmwsIgrZSIyKDp3CPZQkS6PKcbBoP4u7diwN484pTO9SuS TrcXwuBHo/YGE2mk4OQrTRqLnS+WZcZLhGjN5D9+U2Ouoa5TUHaG6cBROiXSiw6FVC7m 30PiTLVv2U4Rom+9AU0T/R1q9QwLCfBi1c7WSzUUMtApDFscRoXjoztuZY0hQ6eZBnIb op4m7i0t8O5RiJi3vHJinhgvGUGiN8ZYQXTYcMYcoU7++ARvxr4hTM1Je8HJzPHOkED2 0Klcr75LCGdFpmA4jZfmNWcVMFD3noji7LRiIizXCDzp+ang6hdly66ipTcdLPSakO7p QOng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771924977; x=1772529777; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dFREYxUIZ0cRYQkkmQ4UIO9hPNsMXbWBqRtIGvrYot8=; b=DuKX7b9R7Ixg9wNejMozWIKzyo7TEIjwtvww8j4FSBHvbaW3Myr98CAn45zXtWiNKR xPkMnlyc5iEl8FxI3qyljSwmyzcPhaG5JRkYDV5Tca7V7YVBt6w64o+1pS9G0Ouezlnk Du9yJJcI25tpIGC9TGeQmtMnfU+xcx3gUPUkIOb5yezpdZVcwViBtRLLdvvGYRw3Hx2v ALCUrXKGKC4hvEshVlcKUhIYzi87vuQ07garzrOz/EfyqbNqRYa2RuqUvIZoEJsatLty uhozWCsgTmuuNtE9VKR4JaBQ7wlaiTk5w7zmzGbv2JS7ff+saPoif61d9ilU5Y9d8whB 1q1g== X-Forwarded-Encrypted: i=1; AJvYcCVhhUKALvwnO63gBNDiX4LWZyQlHzolfn3gLK3CxIquxzA5cElOmuIvqAq+T+7kzWBXFdm6Ki0lFWknj6c=@vger.kernel.org X-Gm-Message-State: AOJu0YxwsIavdxEs3/bA+sgSOKDUn/HRVEmHHTtKNS0B8txOMWckp3w1 SbTt8eI6vrVFHCS5gkaQK5nXOomlv9ieSp4xJkqtFXZ+LKkHpYc7ncY6 X-Gm-Gg: ATEYQzzxuMzuGd2AHYj7NmoszU79EJ32G7JHIK7Z/rf42G8RtrZJohvJbNvDu01WnuW 4kU5+B3oMAhmezEzyjigaGu1kbamBSOCn59WyqM9KNWZF7IpHfosJT8e/c4Xz7SCnNXWWueXBp/ 4k3J/fFcME6xKGX2E5HiMGjzXVAUNazNkeRck3Y2UhIgUy5RI0LNpRunsGi/cw/N1w5qRbNfr/U G4MSbMFu84bADWJGSQ4VbQzt/PoeFbfEfvYD01pwXbIhOXYnf9UEJDs+Xxvf5p3tj9lt/gFQvvd G3FWx2qTSaQKiCEc+3DVHS+fmsaja1rh2+c/n2FZh6RpIm62854mb2dayqwHvp3iKPFwz9tP+LT PqTvGiIrOErGerflNK19Bdzjvk2ZtTUKm4BsJbPPPkUf8dFD7wlTAivYU0dlHfDGFywi1TbePVX U9utwRiku8GHS7ZXjEifD/ X-Received: by 2002:a17:902:ce81:b0:2aa:d287:6943 with SMTP id d9443c01a7336-2ad744353e0mr95407575ad.16.1771924977473; Tue, 24 Feb 2026 01:22:57 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad7500e2b2sm97181695ad.52.2026.02.24.01.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Feb 2026 01:22:56 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, iii@linux.ibm.com Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, borntraeger@linux.ibm.com, svens@linux.ibm.com, bpf@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v2 3/3] selftests/bpf: factor out get_func_* tests for fsession Date: Tue, 24 Feb 2026 17:22:08 +0800 Message-ID: <20260224092208.1395085-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260224092208.1395085-1-dongml2@chinatelecom.cn> References: <20260224092208.1395085-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The fsession is already supported by x86_64, arm64, riscv and s390, so we don't need to disable it in the compile time according to the architecture. Factor out the testings for it. Therefore, the testing can be disabled for the architecture that doesn't support it manually. Signed-off-by: Menglong Dong Acked-by: Ilya Leoshkevich --- .../bpf/prog_tests/get_func_args_test.c | 25 +++++++++++- .../bpf/prog_tests/get_func_ip_test.c | 28 +++++++++++++- .../bpf/progs/get_func_args_fsession_test.c | 37 ++++++++++++++++++ .../selftests/bpf/progs/get_func_args_test.c | 38 ------------------- .../bpf/progs/get_func_ip_fsession_test.c | 21 ++++++++++ .../selftests/bpf/progs/get_func_ip_test.c | 23 ----------- 6 files changed, 108 insertions(+), 64 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/get_func_args_fsessio= n_test.c create mode 100644 tools/testing/selftests/bpf/progs/get_func_ip_fsession_= test.c diff --git a/tools/testing/selftests/bpf/prog_tests/get_func_args_test.c b/= tools/testing/selftests/bpf/prog_tests/get_func_args_test.c index 96b27de05524..7bf8adc41e99 100644 --- a/tools/testing/selftests/bpf/prog_tests/get_func_args_test.c +++ b/tools/testing/selftests/bpf/prog_tests/get_func_args_test.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include #include "get_func_args_test.skel.h" +#include "get_func_args_fsession_test.skel.h" =20 void test_get_func_args_test(void) { @@ -41,8 +42,30 @@ void test_get_func_args_test(void) ASSERT_EQ(skel->bss->test4_result, 1, "test4_result"); ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); ASSERT_EQ(skel->bss->test6_result, 1, "test6_result"); - ASSERT_EQ(skel->bss->test7_result, 1, "test7_result"); =20 cleanup: get_func_args_test__destroy(skel); } + +void test_get_func_args_fsession_test(void) +{ + struct get_func_args_fsession_test *skel =3D NULL; + int err; + LIBBPF_OPTS(bpf_test_run_opts, topts); + + skel =3D get_func_args_fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "get_func_args_fsession_test__open_and_load")) + return; + + err =3D get_func_args_fsession_test__attach(skel); + if (!ASSERT_OK(err, "get_func_args_fsession_test__attach")) + goto cleanup; + + err =3D bpf_prog_test_run_opts(bpf_program__fd(skel->progs.test1), &topts= ); + ASSERT_OK(err, "test_run"); + ASSERT_EQ(topts.retval, 0, "test_run"); + + ASSERT_EQ(skel->bss->test1_result, 1, "test1_result"); +cleanup: + get_func_args_fsession_test__destroy(skel); +} diff --git a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c b/to= ols/testing/selftests/bpf/prog_tests/get_func_ip_test.c index 7772a0f288d3..357fdedfea93 100644 --- a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c +++ b/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c @@ -2,6 +2,7 @@ #include #include "get_func_ip_test.skel.h" #include "get_func_ip_uprobe_test.skel.h" +#include "get_func_ip_fsession_test.skel.h" =20 static noinline void uprobe_trigger(void) { @@ -46,8 +47,6 @@ static void test_function_entry(void) ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); ASSERT_EQ(skel->bss->test7_result, 1, "test7_result"); ASSERT_EQ(skel->bss->test8_result, 1, "test8_result"); - ASSERT_EQ(skel->bss->test9_entry_result, 1, "test9_entry_result"); - ASSERT_EQ(skel->bss->test9_exit_result, 1, "test9_exit_result"); =20 cleanup: get_func_ip_test__destroy(skel); @@ -139,3 +138,28 @@ void test_get_func_ip_test(void) test_function_entry(); test_function_body(); } + +void test_get_func_ip_fsession_test(void) +{ + struct get_func_ip_fsession_test *skel =3D NULL; + int err; + LIBBPF_OPTS(bpf_test_run_opts, topts); + + skel =3D get_func_ip_fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "get_func_ip_fsession_test__open_and_load")) + return; + + err =3D get_func_ip_fsession_test__attach(skel); + if (!ASSERT_OK(err, "get_func_ip_fsession_test__attach")) + goto cleanup; + + err =3D bpf_prog_test_run_opts(bpf_program__fd(skel->progs.test1), &topts= ); + ASSERT_OK(err, "test_run"); + ASSERT_EQ(topts.retval, 0, "test_run"); + + ASSERT_EQ(skel->bss->test1_entry_result, 1, "test1_entry_result"); + ASSERT_EQ(skel->bss->test1_exit_result, 1, "test1_exit_result"); + +cleanup: + get_func_ip_fsession_test__destroy(skel); +} diff --git a/tools/testing/selftests/bpf/progs/get_func_args_fsession_test.= c b/tools/testing/selftests/bpf/progs/get_func_args_fsession_test.c new file mode 100644 index 000000000000..bb597f24b659 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/get_func_args_fsession_test.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "vmlinux.h" +#include +#include +#include + +char _license[] SEC("license") =3D "GPL"; + +__u64 test1_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test1) +{ + __u64 cnt =3D bpf_get_func_arg_cnt(ctx); + __u64 a =3D 0, z =3D 0, ret =3D 0; + __s64 err; + + test1_result =3D cnt =3D=3D 1; + + /* valid arguments */ + err =3D bpf_get_func_arg(ctx, 0, &a); + test1_result &=3D err =3D=3D 0 && ((int) a =3D=3D 1); + + /* not valid argument */ + err =3D bpf_get_func_arg(ctx, 1, &z); + test1_result &=3D err =3D=3D -EINVAL; + + if (bpf_session_is_return(ctx)) { + err =3D bpf_get_func_ret(ctx, &ret); + test1_result &=3D err =3D=3D 0 && ret =3D=3D 2; + } else { + err =3D bpf_get_func_ret(ctx, &ret); + test1_result &=3D err =3D=3D 0 && ret =3D=3D 0; + } + + return 0; +} diff --git a/tools/testing/selftests/bpf/progs/get_func_args_test.c b/tools= /testing/selftests/bpf/progs/get_func_args_test.c index 075a1180ec26..1bf47f64d096 100644 --- a/tools/testing/selftests/bpf/progs/get_func_args_test.c +++ b/tools/testing/selftests/bpf/progs/get_func_args_test.c @@ -165,41 +165,3 @@ int BPF_PROG(tp_test2) =20 return 0; } - -__u64 test7_result =3D 0; -#if defined(bpf_target_x86) || defined(bpf_target_arm64) || defined(bpf_ta= rget_riscv) -SEC("fsession/bpf_fentry_test1") -int BPF_PROG(test7) -{ - __u64 cnt =3D bpf_get_func_arg_cnt(ctx); - __u64 a =3D 0, z =3D 0, ret =3D 0; - __s64 err; - - test7_result =3D cnt =3D=3D 1; - - /* valid arguments */ - err =3D bpf_get_func_arg(ctx, 0, &a); - test7_result &=3D err =3D=3D 0 && ((int) a =3D=3D 1); - - /* not valid argument */ - err =3D bpf_get_func_arg(ctx, 1, &z); - test7_result &=3D err =3D=3D -EINVAL; - - if (bpf_session_is_return(ctx)) { - err =3D bpf_get_func_ret(ctx, &ret); - test7_result &=3D err =3D=3D 0 && ret =3D=3D 2; - } else { - err =3D bpf_get_func_ret(ctx, &ret); - test7_result &=3D err =3D=3D 0 && ret =3D=3D 0; - } - - return 0; -} -#else -SEC("fentry/bpf_fentry_test1") -int BPF_PROG(test7) -{ - test7_result =3D 1; - return 0; -} -#endif diff --git a/tools/testing/selftests/bpf/progs/get_func_ip_fsession_test.c = b/tools/testing/selftests/bpf/progs/get_func_ip_fsession_test.c new file mode 100644 index 000000000000..bbeea0d512e3 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/get_func_ip_fsession_test.c @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "vmlinux.h" +#include +#include + +char _license[] SEC("license") =3D "GPL"; + +__u64 test1_entry_result =3D 0; +__u64 test1_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test1, int a) +{ + __u64 addr =3D bpf_get_func_ip(ctx); + + if (bpf_session_is_return(ctx)) + test1_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test1_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} diff --git a/tools/testing/selftests/bpf/progs/get_func_ip_test.c b/tools/t= esting/selftests/bpf/progs/get_func_ip_test.c index 45eaa54d1ac7..2011cacdeb18 100644 --- a/tools/testing/selftests/bpf/progs/get_func_ip_test.c +++ b/tools/testing/selftests/bpf/progs/get_func_ip_test.c @@ -103,26 +103,3 @@ int BPF_URETPROBE(test8, int ret) test8_result =3D (const void *) addr =3D=3D (const void *) uprobe_trigger; return 0; } - -__u64 test9_entry_result =3D 0; -__u64 test9_exit_result =3D 0; -#if defined(bpf_target_x86) || defined(bpf_target_arm64) || defined(bpf_ta= rget_riscv) -SEC("fsession/bpf_fentry_test1") -int BPF_PROG(test9, int a) -{ - __u64 addr =3D bpf_get_func_ip(ctx); - - if (bpf_session_is_return(ctx)) - test9_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; - else - test9_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; - return 0; -} -#else -SEC("fentry/bpf_fentry_test1") -int BPF_PROG(test9, int a) -{ - test9_entry_result =3D test9_exit_result =3D 1; - return 0; -} -#endif --=20 2.53.0