From nobody Fri Apr 17 06:15:34 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) (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 A897D34D4FD for ; Mon, 23 Feb 2026 08:40:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771836045; cv=none; b=aPumH4UJPt1ncGdQGjowjmw5tM2QPgoRTQyA9MTMc0NSxjl9OqCUNs36AVSIgBnqB4Nd0Qgl7aLpq3ItkgPKwnk0g1PrYzPZCz0JXuS31wfRFOZxralGhG1X5+G91m6RGzx5OZeacWTZYyrRawH/iN5dpBL1drxhRMoZZnMagxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771836045; c=relaxed/simple; bh=nEKT87239/0oP7+UDsczkgsNom6oeFHqhXSC4GmgIow=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Xs1bw/HqaW/EqaQtDFZsskhknfe7+TM4k523Ofv2G2gTeFYf3oLh9QeW2y13ZYZd0z4fYAJg2OwRQUBsONV/gg5DfsuQ3N/mL8SfzZPgcWbeCifszQyBeljmXuvrpwxWf3tJJIAinKPSgY9ZCkSSrzH5p1KN/FlnaXw6xMN+0jc= 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=lL0AflJe; arc=none smtp.client-ip=209.85.214.195 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="lL0AflJe" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2ab46931cf1so30680515ad.0 for ; Mon, 23 Feb 2026 00:40:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771836043; x=1772440843; 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=DJMqZhTw+6tfgh3M5mC64dvgKIeBryvh3KcIHfyE5f8=; b=lL0AflJeEkevNniuKe641iyJiuA7l17hJ1EPbvVzFbWMzrOjpCQ5xelcPMmO5gv1bB iM7coXX/mn2FslusCaIUGnBJCh4FPq72JMfIJndFBSt0f0nLMJFjMgJqkPYsvzSIEemy zhRREC2c1p7PB3vGxskwgX0NhA3+CGDrKIat1uBQmzwFZkfWOzNxjXi2UqqdBYC34XiZ 9Il6CKXYRMQ3oZJvOuZbNF+KhkH/ZhMNrhBwy33u/Jv76tAjqPKu57NCuCMfCQO8vK6j 0kmaFIdeRsvRyoxqdLkSRNa9rZgeWIm3uMHvXLxsLN817jUXSd3LSL6ZFRgG0RhU4um0 T3JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771836043; x=1772440843; 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=DJMqZhTw+6tfgh3M5mC64dvgKIeBryvh3KcIHfyE5f8=; b=XkPPDEF8t0GQIwxQ9fJIdrIQEm6Iw07Ov5pJaNxsCvHUFBj2Dn4zG6uHhbjqfsoL/a UFM8VYYDNkMw0Nz+7vjFmgIu8tfRLfA4njXgO+5HUr0JHmd/SYIeAKv2SuGYLb2/mMlW 0BN08SMd19WX8/KNvK5by+KQRPFUW8p6/jDhhP9LHC/KYe2CsW/kmWJWFn63vR7xV7q4 xD/McafeVXUMvkKAQIuYtVCA8jTN+mMW4YUZUEX9hXKJ7vslg4QrqEIOjZ5U4XwxkzUx RhdEgcXTtpkLkCjMi549ifCDRgjnwtOEvz6H+2ctiKZOWgs/lI3TSNBlIq0uyboM6L26 Kakg== X-Forwarded-Encrypted: i=1; AJvYcCU7pahN/zDW+q0ZHkAbRK8qUN6dHv4rwydYU+hgrB+EpJM6b6PiGILLVj9Vm0ikYjkj8V5lqec29s02BFk=@vger.kernel.org X-Gm-Message-State: AOJu0YwFKfMBaXJGFgCEoCJX0mdOXHtfB/9KD1QN+123pQ/9QRWFjA+0 5fQWkl5MnyGazzmU21aVMobjPy8FhgkTIy+EH3aojeo6Z19+EMUfrriU X-Gm-Gg: ATEYQzweZDloq4oManHRbdK6UVkrhdemdqZwDFVuqsYMK9xU0hH/M/LE9SjhkC4iyTf P7rWzSWnQVR5nbSIAiMHB7QOzFXbO0iWfK1cHlwJZq1S/kxJvjM2oGk4343EfiPUPbwMtilokiQ ECbGjDqb/78yXUnzKeGsQT768BWkEdHjZwLTu5Bpn8o5t0C0Utl6rNSl/y2vowDJXITRRUn1QO9 j3AyZPB/e2nWFQJXTWWUc3IfCDoIEdBvcwk0z/gCIBBPFt5yCvMCsUMuQ505+GUt9PpCxpg/ePy ihZdhCu/glPctitRE6YQHLUeIJcU6EGRDSdU6Hn4qVEA5GZaydVQ65gVqtT4EYV6/TV/QXcnQBc FTbEd7aNnldsgiqdXy/lA/XwMdub9sMBnqSN90xs1WgI3I3yEWAiEJuWm1ue8CEV0Pe5i64qpa4 Uw17cuLIm78cV2ZXsmFGBXQA6U8knP6ZY= X-Received: by 2002:a17:902:f70c:b0:2a9:5ac3:a925 with SMTP id d9443c01a7336-2ad741c8be7mr72170345ad.3.1771836043135; Mon, 23 Feb 2026 00:40:43 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad750591e2sm65725405ad.91.2026.02.23.00.40.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 00:40:42 -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 1/3] bpf,s390: introduce emit_store_stack_imm64() for trampoline Date: Mon, 23 Feb 2026 16:40:20 +0800 Message-ID: <20260223084022.653186-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260223084022.653186-1-dongml2@chinatelecom.cn> References: <20260223084022.653186-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 Reviewed-by: Ilya Leoshkevich --- arch/s390/net/bpf_jit_comp.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index 579461d471bb..763d2491dfa3 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,18 +2747,9 @@ 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); - } - /* lghi %r0,nr_bpf_args */ - EMIT4_IMM(0xa7090000, REG_0, nr_bpf_args); - /* stg %r0,arg_cnt_off(%r15) */ - EMIT6_DISP_LH(0xe3000000, 0x0024, REG_0, REG_0, REG_15, - tjit->arg_cnt_off); + if (flags & BPF_TRAMP_F_IP_ARG) + emit_store_stack_imm64(jit, REG_0, tjit->ip_off, (u64)func_addr); + emit_store_stack_imm64(jit, REG_0, tjit->arg_cnt_off, nr_bpf_args); =20 if (flags & BPF_TRAMP_F_CALL_ORIG) { /* --=20 2.53.0 From nobody Fri Apr 17 06:15:34 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 4419934D4D2 for ; Mon, 23 Feb 2026 08:40:51 +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=1771836052; cv=none; b=gJks0qkynKOXjeL4pmxMYkKDz7LSnNoKHCvhv+eq9X+TJ/rutmckm5tt6MGkAxWbBuyRuQTNs0KOJF8owcETfluM9Wmg3P825qyGDfZ5qfDIlkYUTzX9xvPbe44KkDmsjHnRB0DtruPz08E475bTh4PC9QHsCQL1TlTPv94QSbA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771836052; c=relaxed/simple; bh=H4FGkDsciyvqLsAgOwj9Z6j0tvm3/gijETOKB9Ix7l8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W0gan+OHEltv7G8DWKDzISX4Arx6ykOiJg/lG4Mbz1KuhMtIGQ3XxzbIAg6xoirJm4OnXSO0SBOfPOHBexXE924MMJVpXNwepJZiSXbCKRvrbor5dxkBQWpuG51Kl5jE+VBmDMRPJNCYOOS/FBr+1Dhv4WLO5sPbMl2IA6Dz/pI= 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=eRFuTcu8; 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="eRFuTcu8" Received: by mail-pg1-f193.google.com with SMTP id 41be03b00d2f7-c648bc907ebso2418688a12.3 for ; Mon, 23 Feb 2026 00:40:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771836051; x=1772440851; 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=fqDYeikxCzctMnDOkxJiKALxw8THCeumBykoyQa3Xfs=; b=eRFuTcu8HgT6vGgRxh/oNbKdPOObWBEb60OI3x35fx4loo9mlxzcZ9ViZT92vV+mkS reFRvigZcPim4yDHj4IRqfA6joN6mCxQPdY+ZXxaUh3c24NR7obJauv7eB891mbmgMQI Mh7JA6MkMuSOCxpe6JdHJDtqty6WgdlCZhl4cVf80HfETXC+mDCfYblscKm2tT/EIB/l 1HcsQ4NJ4ggnQfToLjeFIjoWgaYxOApqvWHEYvk0CZAYX0/yo1dqRrD+3qTgJ//FTXT/ fBrJ4zN9XV1hspdfenQggGaiZCfPXk4/3+GZ26GEiGsc1DnluwiVGR2leT2cDS3riH9R 6oxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771836051; x=1772440851; 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=fqDYeikxCzctMnDOkxJiKALxw8THCeumBykoyQa3Xfs=; b=K5+6LRJ0y7OyrR4/pvpfOZ8rg4TAWCKDiRlxF9MP/cXxx7iH0tFVStzd80Ko96qL+a YbWO7WLLOsPWop4RHKSEj3qySF13QG24SO9Tho/fYrhfGPi+rY3xPM2/K8u4Bo7qwg/s seac9MJH7RpZF+7YEPdsXMMJtIBBOYop4SbxEilsIL5CgQf4NtfnZZ80v4ooGaePq/qu Itd5ekYu2cgGNUummpdvKtYgQG/TkVI7YVMJQ69O9tNUGLhWtLq4KzZnX79UMazNAnkX sIz3poYt/6V3nOlz+IwESSFJ+0HYvSAK5aUVOWK84hG39mGRj1oTxGI2NXNKS8Ew7rt1 dl8w== X-Forwarded-Encrypted: i=1; AJvYcCWOvaq+A28SZl42NU1Ho+mr4tLEP/lpaXD3Ba284XE3wjeFGViftHMD/p+J/l745gWKJZQtk2nWpQquXcc=@vger.kernel.org X-Gm-Message-State: AOJu0YxEYwAnNrfBt/aokBxOfTVTb5HIsOrVpD3kSP0qNAZiNyvuVPpe mt4yNfZGcVAoHnbE0q6sn1cN3+dqdET7NsJ4T+OBr1w7VMc8hhDPFjdO X-Gm-Gg: ATEYQzyDmAB2A2i/JyGQ2zCfRQT9PT75I65kIGAtUlo7A8ggRP1i88k0PoQBGfoorWl YfdZiK4sockF5IcZOCuQBsgwZlHlv0sKikcb3dlveBc8kqyylYqNb8GH7pYWfDK9oObWUFLL5jl 0r+YsJUhO2U1Ydav+OfReO2ZHcPdbhwbKuwWrww+Wkumw6ryrcT9POAgcjw80xJKHAofOPCLkHD HjvM0IRXKikQECapYYFe7Jd3ABVQtw04PP0vkvp/0p6eouLJsYBqWYn6qGGHt6+Jzu/XwKCiW4S d2+NpWmCqohEA2T067NGrRUjyOjpYvsFsusiSzBAew5elgJ3dmkb25tbMXhY+LxzglVI0LmcFHL ls7hAzcCuJft9XDQ0PbYPL3SLviZoMZHIQor+Bbi8FKtGXAjo4l2uttFhtRNJ6OJm69JWU1Ee2I 0g7PHiploVLE0g+zYqyRiR X-Received: by 2002:a17:903:3c4c:b0:2a1:3cd9:a734 with SMTP id d9443c01a7336-2ad7452bbcfmr79115605ad.43.1771836050649; Mon, 23 Feb 2026 00:40:50 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad750591e2sm65725405ad.91.2026.02.23.00.40.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 00:40:50 -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 2/3] bpf,s390: add fsession support for trampolines Date: Mon, 23 Feb 2026 16:40:21 +0800 Message-ID: <20260223084022.653186-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260223084022.653186-1-dongml2@chinatelecom.cn> References: <20260223084022.653186-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 --- arch/s390/net/bpf_jit_comp.c | 68 +++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index 763d2491dfa3..ea0c81f18ece 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,7 +2777,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, =20 if (flags & BPF_TRAMP_F_IP_ARG) emit_store_stack_imm64(jit, REG_0, tjit->ip_off, (u64)func_addr); - emit_store_stack_imm64(jit, REG_0, tjit->arg_cnt_off, nr_bpf_args); + func_meta =3D nr_bpf_args; + emit_store_stack_imm64(jit, REG_0, tjit->func_meta_off, func_meta); =20 if (flags & BPF_TRAMP_F_CALL_ORIG) { /* @@ -2762,10 +2791,19 @@ 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)) + 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 (fentry->nr_links) { + 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) { /* @@ -2842,11 +2880,18 @@ 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)) + if (fexit->nr_links) { + 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; @@ -2951,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 06:15:34 2026 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) (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 4AF2B34B40C for ; Mon, 23 Feb 2026 08:40:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771836061; cv=none; b=gXR748o+tw4Ke2S3Jz8yorcBAxp7aHogEP+zVAvvCHHqCeuAwLasw6vUq9kyIj7FXrMrVYJF00SHz3+heLZCRqmbfYbDvcSNhOkayxydBcKTIDZRcVNaAr2NIuvnU3FEAYXE8IQY4OWxfGID2/jU6mx/ZWTptWOKQ4lqeZuDanA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771836061; c=relaxed/simple; bh=szp2iGNF4Kv6bLZiyYuIUdsXdQpB2wVIlacXByNuPIk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=alTAgvPncPDEqlwM28XuUKga99t7Qy4k55vRqw/CnmPLBLb+5exmtZlXOCPIAVql4snkP0pnVax0zyS7enF84p3Ke/EU2vhfXPPlTzrC9eFPLCFOFxd4bbxuFO8DV59h4bwDviVaav+3SxHoP2EhBNyRN7w4sf62t29bhicZ+Dk= 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=f3WQoh/l; arc=none smtp.client-ip=209.85.214.196 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="f3WQoh/l" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a7a9b8ed69so35890555ad.2 for ; Mon, 23 Feb 2026 00:40:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771836059; x=1772440859; 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=jmlGR9kLwjUsf9wLTH82AWyfcud9qPjjE5O/Ouurqko=; b=f3WQoh/li10ZBhMiKHTblgR84G3LSO4geEcfysg7VpqYoaRwGON4Wpij6UMAD07Zh+ bMmATpBgjKNJgTxXg1bba1xNt9AX+6OwtFy7ESBiHJ9tUeBsZ8CCa7bk6miJqRlsZwSI bqM2FrKsd9pBLyjUAkigzXA59IZTZJryMB+k2dkmXappTm+Vgo79/JwCDnJQ5CxohfaZ zRmF2QtfDOPlBcJ5uIfxK8/AMDRj4gOp2B7MtYVOtvChAEazpuep5I7qlapoAUWvkk68 ayxHyzCu4vBMCEyd3shXQLVYfaSIKLcSVcEM3g4y+mvX5ppV/HWmrg3FwpJK7ESl2H67 75VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771836059; x=1772440859; 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=jmlGR9kLwjUsf9wLTH82AWyfcud9qPjjE5O/Ouurqko=; b=e6KX3aH0m3+k2l7b0jKYYl3bOk5LL6e34uHlqv2FedwuLKTUDyvJr/uR+E44zIueBH Jv2bkfMrDUPg6QX41v4kHgNVRXsq06Zng8QC37cMfGYniFYM7Sk7VGOamirMZst9FPsn k7TDlQhilCrZJSqvzgBn4wisuttpYhYbV7ahtSP6/O+9Kn6BgXv/NkIGKVNlfMO5UxEZ IOr1k9UhbV3ZAKwr551evpYsEqkk7TPTyU5EMGScwBGhdD6CO1hoEoSydvBGETt9uTA/ MqxLoRkrT9u9fYzmZlTJOtcAXBAxOn+fx1nrVIkCkmGVxiy3cGHHYQdTJWxXup0sTsFZ 7hTw== X-Forwarded-Encrypted: i=1; AJvYcCUwoGG/ZYuIqhLUHsCG4JyRPmO4ONdkBbMOcsFd/7L4uQBShRUrqrOynTciSPeRH1Kvf7lMJskh/Jve3aQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzSxXem5KK4J+z/sHW5YYRylKiH8jVeHTywj99ijAY6Ut/QnnMJ XRWIVzBnfh7Jnr4qEPYzXcQd16tl8RSNffNBz5PCzlfAI1J0y6zaaWag X-Gm-Gg: ATEYQzxHOLBcuaBgtmx1IXnEbHag4WSkNoxIWVitL+TbUcyjj9k0WgdXitWUYAwINal M9z0G+Zsq3DJXHqQil+LOW4f4EQ/GNhggxdPyMk2paLC9HbFw6AnInu+prp/xWI2KvLcG7hNDIb 2ZRkRaWlGEONWPizdjGDm2yUnJ9tviyXdAv+AfNiGZQm4Wn/k57qJF9lq5nek4+xKDaXgNyhhZU 9FSwVFuwR1zgBSD2GeH3PBEtu58UyjsZ+IUpAocFBi8ysruaWtKM5GilXzChBgexR/s/IKTnAw1 z9xHlpmP0Fka5THjDa0wE3EwyAH6gBnwoEQnoETfN5mAFYmWJfpsdy+aDlM1qoZLQ8rPX55+vYp X6llad93PoF6FWue5oYG6AAmA00kuwPHsgyRHWj7utJPv7CdSDiU/7wOtOhteNvPsqSBL9OHdY8 FQXCCeA0v0vm0O3Q/AD8Qz X-Received: by 2002:a17:903:18d:b0:2a1:3cd9:a737 with SMTP id d9443c01a7336-2ad744eca61mr84182535ad.36.1771836058656; Mon, 23 Feb 2026 00:40:58 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad750591e2sm65725405ad.91.2026.02.23.00.40.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 00:40:58 -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 3/3] selftests/bpf: factor out get_func_* tests for fsession Date: Mon, 23 Feb 2026 16:40:22 +0800 Message-ID: <20260223084022.653186-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260223084022.653186-1-dongml2@chinatelecom.cn> References: <20260223084022.653186-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