Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2218502/?format=api
{ "id": 2218502, "url": "http://patchwork.ozlabs.org/api/patches/2218502/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260401141043.41513-1-adubey@linux.ibm.com/", "project": { "id": 2, "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api", "name": "Linux PPC development", "link_name": "linuxppc-dev", "list_id": "linuxppc-dev.lists.ozlabs.org", "list_email": "linuxppc-dev@lists.ozlabs.org", "web_url": "https://github.com/linuxppc/wiki/wiki", "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git", "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/", "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/", "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}" }, "msgid": "<20260401141043.41513-1-adubey@linux.ibm.com>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260401141043.41513-1-adubey@linux.ibm.com/", "date": "2026-04-01T14:10:42", "name": "[v3,1/2] powerpc64/bpf: Implement fsession support", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "8be859fc7a58796341cf2ae0c0f4b0d3d7807e3f", "submitter": { "id": 88541, "url": "http://patchwork.ozlabs.org/api/people/88541/?format=api", "name": "adubey", "email": "adubey@linux.ibm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260401141043.41513-1-adubey@linux.ibm.com/mbox/", "series": [ { "id": 498309, "url": "http://patchwork.ozlabs.org/api/series/498309/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=498309", "date": "2026-04-01T14:10:42", "name": "[v3,1/2] powerpc64/bpf: Implement fsession support", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/498309/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2218502/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2218502/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linuxppc-dev+bounces-19140-incoming=patchwork.ozlabs.org@lists.ozlabs.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linuxppc-dev@lists.ozlabs.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=mnLkOP4v;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-19140-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)", "lists.ozlabs.org;\n arc=none smtp.remote-ip=148.163.158.5", "lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=linux.ibm.com", "lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=mnLkOP4v;\n\tdkim-atps=neutral", "lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com\n (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com;\n envelope-from=adubey@linux.ibm.com; receiver=lists.ozlabs.org)" ], "Received": [ "from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1 raw public key)\n server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fm14602g8z1yGH\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 01 Apr 2026 21:11:48 +1100 (AEDT)", "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fm1440fHWz2ygf;\n\tWed, 01 Apr 2026 21:11:48 +1100 (AEDT)", "from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com\n [148.163.158.5])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4fm1423z9Zz2xpk\n\tfor <linuxppc-dev@lists.ozlabs.org>; Wed, 01 Apr 2026 21:11:45 +1100 (AEDT)", "from pps.filterd (m0353725.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 62VIV9Js201661;\n\tWed, 1 Apr 2026 10:11:29 GMT", "from ppma23.wdc07v.mail.ibm.com\n (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93])\n\tby mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4d65dcew7w-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n\tWed, 01 Apr 2026 10:11:29 +0000 (GMT)", "from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1])\n\tby ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id\n 6317Qwlq014339;\n\tWed, 1 Apr 2026 10:11:28 GMT", "from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229])\n\tby ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4d6ttkmyrh-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n\tWed, 01 Apr 2026 10:11:28 +0000", "from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com\n [10.20.54.100])\n\tby smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 631ABODQ49152472\n\t(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n\tWed, 1 Apr 2026 10:11:24 GMT", "from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 2EF1D2004B;\n\tWed, 1 Apr 2026 10:11:24 +0000 (GMT)", "from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 264162004D;\n\tWed, 1 Apr 2026 10:11:22 +0000 (GMT)", "from ltcrain4-lp15.ltc.tadn.ibm.com (unknown [9.5.7.39])\n\tby smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP;\n\tWed, 1 Apr 2026 10:11:21 +0000 (GMT)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1775038307;\n\tcv=none;\n b=KuoAh7QuCxv4UnsEzEyKS+gKXM8dZK7FE//33d1ZvCXGlww/ga03ZmIP5bxiRDOc9+Hfo3IuM+o+nQNroX72NTEhBbMsFyaYGHZOwkFqcGX8SHXMtaiAahychbKMSGPXTeRhwbdW6g7fIU2ACpGXQWQJwXDEsJGrNmKUukr3XFg6mwm9PXgz+xzQGRBnozduHc0rKfqlmBdCEUA/AIK4+jxAiY2BU85Fn1pHVWuF1lHWN2yakL9kgFXdWmN2Hi795ELpbS4wkEhKGI3AQGF1+RKxjBU09H7MUpmE1GCEjoT55yWk3vqpn50n8pvbB3yYGzxycVu7LKiMziytl3OqUA==", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1775038307; c=relaxed/relaxed;\n\tbh=3mUbcxbKwm7xaMSKR/4qBN3+wZHiqAb74ixt34rZCpY=;\n\th=From:To:Cc:Subject:Date:Message-ID:MIME-Version;\n b=HFpglNxYyGJlspB9axq1P5sib+5JEeTsVrdqTzW9bgKdlisXLRuIK/v7k5V70c0xMleHxbJ85ttJLJm2S6Dmc/SkfrxaPa/SlbWkAjXR2XigSLNj15bjZkMzre5xFEBE0MzBMyfHuiqL0am+kMiM/e4KqVmQGB/Hf19gxxNbYlQWtiSYIblngc2di+Uc56doELqqvelj20bX6DyhwkJ13wDdDRvGzNjyWt3X+uPNkvSyU3LBb/BGBtadBeTBy8obangBjnxEplKgjcUD0ADhz9TnLDhEnvcqwtGoA6x5oC+nKJcXinBJQDSjTXjLXNd6kj14JlD9vbECzNI1saTj6A==", "ARC-Authentication-Results": "i=1; lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=linux.ibm.com;\n dkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=mnLkOP4v; dkim-atps=neutral;\n spf=pass (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com;\n envelope-from=adubey@linux.ibm.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc\n\t:content-transfer-encoding:date:from:message-id:mime-version\n\t:subject:to; s=pp1; bh=3mUbcxbKwm7xaMSKR/4qBN3+wZHiqAb74ixt34rZC\n\tpY=; b=mnLkOP4vD7nndw6VtV+l4PBrfu4VT747tNdPt/bs3T7hdCwDAIUzzuqkq\n\ttB1x76w/8dtc54jILHK04tgz8Y1rS2iu931SObDhwvcRmAg+c5hwTvYddFhXvi+o\n\tg6Ql17N1f6nONsfwnKECGW8GbZwPjOhKI0ABlIwA7wxOrNnkyii5NUFknjmu+lVX\n\tUc8JykD6e4Yfm8Xz7y6lru2mPi8H0N8RBfvKLmD4pPRYdBCiP/NxFOpRG5VBm0+f\n\tmjkeA3WqT4tsesG3LgL3ipcSeDdlnDDd10s4R3ckhd3fJXtfnHFH5xFb64TVUtMR\n\t8SzYJCinkeywYAEm0FceixUuVqQcA==", "From": "adubey@linux.ibm.com", "To": "linuxppc-dev@lists.ozlabs.org", "Cc": "hbathini@linux.ibm.com, bpf@vger.kernel.org, maddy@linux.ibm.com,\n ast@kernel.org, andrii@kernel.org, daniel@iogearbox.net,\n shuah@kernel.org, linux-kselftest@vger.kernel.org,\n Abhishek Dubey <adubey@linux.ibm.com>,\n Venkat Rao Bagalkote <venkat88@linux.ibm.com>", "Subject": "[PATCH v3 1/2] powerpc64/bpf: Implement fsession support", "Date": "Wed, 1 Apr 2026 10:10:42 -0400", "Message-ID": "<20260401141043.41513-1-adubey@linux.ibm.com>", "X-Mailer": "git-send-email 2.52.0", "X-Mailing-List": "linuxppc-dev@lists.ozlabs.org", "List-Id": "<linuxppc-dev.lists.ozlabs.org>", "List-Help": "<mailto:linuxppc-dev+help@lists.ozlabs.org>", "List-Owner": "<mailto:linuxppc-dev+owner@lists.ozlabs.org>", "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>", "List-Archive": "<https://lore.kernel.org/linuxppc-dev/>,\n <https://lists.ozlabs.org/pipermail/linuxppc-dev/>", "List-Subscribe": "<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>", "List-Unsubscribe": "<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>", "Precedence": "list", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-TM-AS-GCONF": "00", "X-Authority-Analysis": "v=2.4 cv=RsjI7SmK c=1 sm=1 tr=0 ts=69ccef51 cx=c_pps\n a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17\n a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22\n a=V8glGbnc2Ofi9Qvn3v5h:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8\n a=p8F4Ghc8BiBnGImhoNcA:9", "X-Proofpoint-GUID": "1SAEDdbf5vHIk4kktIS0UPI61OTR8Bj4", "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDAxMDA4OSBTYWx0ZWRfXyyRbNbQ8O/9d\n wMGZtWZQzwAy6odR4ylaKrplDbmlPeY8xMJd9isszxtDJ2srY7d5s2yBOJqf/6cIU51AcowCgsh\n UL0bh5eElLZAWUNQNigUi26Oz5111qckwXTplGzWIoUseX2SJyWUbFV1bJA6h5MwCuLCBd3FgsA\n ff5wxfeweq9jOTrBWJULdC+OEjdz0jhDVpaIv7YVxvWwdqWy9tbXZTY6gbJNo/gt7+di3yAWlZb\n DLa5Eo1tu41weN0fjtPTCPymk0wme7l46DSENhBc4GPY9C6+Mk6KacgDA3vpvFxAODlrlJroqzG\n Jj03rfd/dU5n1/6XcialGyjasVTLx3lucpvhdSJfymRzTSpUs7itbeaUIn8UFJLwtrrVVPguEYr\n Ht63BXLDl7rmbYX/4ZR80uPzE8eokSGjPJu7Ug0SKEcEdwEVEF92p/YNnWxjvWvCbfxvf0x+rtS\n une/hykPhvKZcJ9SxkQ==", "X-Proofpoint-ORIG-GUID": "1SAEDdbf5vHIk4kktIS0UPI61OTR8Bj4", "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-01_03,2026-04-01_01,2025-10-01_01", "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n impostorscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0\n suspectscore=0 malwarescore=0 spamscore=0 clxscore=1015 phishscore=0\n adultscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001\n definitions=main-2604010089", "X-Spam-Status": "No, score=1.7 required=3.0 tests=DATE_IN_FUTURE_03_06,\n\tDKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,\n\tRCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS autolearn=disabled\n\tversion=4.0.1 OzLabs 8", "X-Spam-Level": "*", "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org" }, "content": "From: Abhishek Dubey <adubey@linux.ibm.com>\n\nImplement JIT support for fsession in powerpc64 trampoline.\nThe trampoline stack now accommodate session cookies and\nfunction metadata in place of function argument. fentry/fexit\nprograms consume corresponding function metadata. This mirrors\nexisting x86 behavior and enable session cookies on powerpc64.\n\n# ./test_progs -t fsession\n#135/1 fsession_test/fsession_test:OK\n#135/2 fsession_test/fsession_reattach:OK\n#135/3 fsession_test/fsession_cookie:OK\n#135 fsession_test:OK\nSummary: 1/3 PASSED, 0 SKIPPED, 0 FAILED\n\nSigned-off-by: Abhishek Dubey <adubey@linux.ibm.com>\nTested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>\n---\n\nThis patch is rebased over https://lore.kernel.org/bpf/20260401103215.104438-1-adubey@linux.ibm.com\n\nv2->v3:\n Rebased over latest changes\n Collected Tested-by tag\nv1->v2:\n No change since v1\n\n[v2]: https://lore.kernel.org/bpf/20260226041217.18059-1-adubey@linux.ibm.com\n[v1]: https://lore.kernel.org/bpf/20260216155310.38457-1-adubey@linux.ibm.com\n\n arch/powerpc/net/bpf_jit.h | 4 +-\n arch/powerpc/net/bpf_jit_comp.c | 69 ++++++++++++++++++++++++++-----\n arch/powerpc/net/bpf_jit_comp64.c | 25 +++++++++++\n 3 files changed, 87 insertions(+), 11 deletions(-)", "diff": "diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h\nindex a232f3fb73be..f32de8704d4d 100644\n--- a/arch/powerpc/net/bpf_jit.h\n+++ b/arch/powerpc/net/bpf_jit.h\n@@ -218,7 +218,9 @@ void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx);\n void bpf_jit_build_fentry_stubs(u32 *image, struct codegen_context *ctx);\n void bpf_jit_realloc_regs(struct codegen_context *ctx);\n int bpf_jit_emit_exit_insn(u32 *image, struct codegen_context *ctx, int tmp_reg, long exit_addr);\n-\n+void prepare_for_fsession_fentry(u32 *image, struct codegen_context *ctx, int cookie_cnt,\n+\t\t\t\t\t\t\t\tint cookie_off, int retval_off);\n+void store_func_meta(u32 *image, struct codegen_context *ctx, u64 func_meta, int func_meta_off);\n int bpf_add_extable_entry(struct bpf_prog *fp, u32 *image, u32 *fimage, int pass,\n \t\t\t struct codegen_context *ctx, int insn_idx,\n \t\t\t int jmp_off, int dst_reg, u32 code);\ndiff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c\nindex 2018260f56c6..16d15ff3145a 100644\n--- a/arch/powerpc/net/bpf_jit_comp.c\n+++ b/arch/powerpc/net/bpf_jit_comp.c\n@@ -540,6 +540,11 @@ bool bpf_jit_supports_private_stack(void)\n \treturn IS_ENABLED(CONFIG_PPC64);\n }\n \n+bool bpf_jit_supports_fsession(void)\n+{\n+\treturn IS_ENABLED(CONFIG_PPC64);\n+}\n+\n bool bpf_jit_supports_arena(void)\n {\n \treturn IS_ENABLED(CONFIG_PPC64);\n@@ -812,12 +817,16 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im\n \t\t\t\t\t struct bpf_tramp_links *tlinks,\n \t\t\t\t\t void *func_addr)\n {\n-\tint regs_off, nregs_off, ip_off, run_ctx_off, retval_off, nvr_off, alt_lr_off, r4_off = 0;\n+\tint regs_off, func_meta_off, ip_off, run_ctx_off, retval_off;\n+\tint nvr_off, alt_lr_off, r4_off = 0;\n \tstruct bpf_tramp_links *fmod_ret = &tlinks[BPF_TRAMP_MODIFY_RETURN];\n \tstruct bpf_tramp_links *fentry = &tlinks[BPF_TRAMP_FENTRY];\n \tstruct bpf_tramp_links *fexit = &tlinks[BPF_TRAMP_FEXIT];\n \tint i, ret, nr_regs, retaddr_off, bpf_frame_size = 0;\n \tstruct codegen_context codegen_ctx, *ctx;\n+\tint cookie_off, cookie_cnt, cookie_ctx_off;\n+\tint fsession_cnt = bpf_fsession_cnt(tlinks);\n+\tu64 func_meta;\n \tu32 *image = (u32 *)rw_image;\n \tppc_inst_t branch_insn;\n \tu32 *branches = NULL;\n@@ -853,9 +862,11 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im\n \t * [ reg argN ]\n \t * [ ... ]\n \t * regs_off [ reg_arg1 ] prog_ctx\n-\t * nregs_off [ args count ] ((u64 *)prog_ctx)[-1]\n+\t * func_meta_off [ args count ] ((u64 *)prog_ctx)[-1]\n \t * ip_off [ traced function ] ((u64 *)prog_ctx)[-2]\n+\t * [ stack cookieN ]\n \t * [ ... ]\n+\t * cookie_off [ stack cookie1 ]\n \t * run_ctx_off [ bpf_tramp_run_ctx ]\n \t * [ reg argN ]\n \t * [ ... ]\n@@ -887,16 +898,21 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im\n \trun_ctx_off = bpf_frame_size;\n \tbpf_frame_size += round_up(sizeof(struct bpf_tramp_run_ctx), SZL);\n \n+\t/* room for session cookies */\n+\tcookie_off = bpf_frame_size;\n+\tcookie_cnt = bpf_fsession_cookie_cnt(tlinks);\n+\tbpf_frame_size += cookie_cnt * 8;\n+\n \t/* Room for IP address argument */\n \tip_off = bpf_frame_size;\n \tif (flags & BPF_TRAMP_F_IP_ARG)\n \t\tbpf_frame_size += SZL;\n \n-\t/* Room for args count */\n-\tnregs_off = bpf_frame_size;\n+\t/* Room for function metadata, arg regs count */\n+\tfunc_meta_off = bpf_frame_size;\n \tbpf_frame_size += SZL;\n \n-\t/* Room for args */\n+\t/* Room for arg regs */\n \tregs_off = bpf_frame_size;\n \tbpf_frame_size += nr_regs * SZL;\n \n@@ -995,9 +1011,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im\n \t\tEMIT(PPC_RAW_STL(_R3, _R1, retaddr_off));\n \t}\n \n-\t/* Save function arg count -- see bpf_get_func_arg_cnt() */\n-\tEMIT(PPC_RAW_LI(_R3, nr_regs));\n-\tEMIT(PPC_RAW_STL(_R3, _R1, nregs_off));\n+\t/* Save function arg regs count -- see bpf_get_func_arg_cnt() */\n+\tfunc_meta = nr_regs;\n+\tstore_func_meta(image, ctx, func_meta, func_meta_off);\n \n \t/* Save nv regs */\n \tEMIT(PPC_RAW_STL(_R25, _R1, nvr_off));\n@@ -1011,10 +1027,28 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im\n \t\t\treturn ret;\n \t}\n \n-\tfor (i = 0; i < fentry->nr_links; i++)\n+\tif (fsession_cnt) {\n+\t\t/*\n+\t\t * Clear all the session cookies' values\n+\t\t * Clear the return value to make sure fentry always get 0\n+\t\t */\n+\t\tprepare_for_fsession_fentry(image, ctx, cookie_cnt, cookie_off, retval_off);\n+\t}\n+\n+\tcookie_ctx_off = (regs_off - cookie_off) / 8;\n+\n+\tfor (i = 0; i < fentry->nr_links; i++) {\n+\t\tif (bpf_prog_calls_session_cookie(fentry->links[i])) {\n+\t\t\tu64 meta = func_meta | (cookie_ctx_off << BPF_TRAMP_COOKIE_INDEX_SHIFT);\n+\n+\t\t\tstore_func_meta(image, ctx, meta, func_meta_off);\n+\t\t\tcookie_ctx_off--;\n+\t\t}\n+\n \t\tif (invoke_bpf_prog(image, ro_image, ctx, fentry->links[i], regs_off, retval_off,\n \t\t\t\t run_ctx_off, flags & BPF_TRAMP_F_RET_FENTRY_RET))\n \t\t\treturn -EINVAL;\n+\t}\n \n \tif (fmod_ret->nr_links) {\n \t\tbranches = kcalloc(fmod_ret->nr_links, sizeof(u32), GFP_KERNEL);\n@@ -1076,12 +1110,27 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im\n \t\timage[branches[i]] = ppc_inst_val(branch_insn);\n \t}\n \n-\tfor (i = 0; i < fexit->nr_links; i++)\n+\t/* set the \"is_return\" flag for fsession */\n+\tfunc_meta |= (1ULL << BPF_TRAMP_IS_RETURN_SHIFT);\n+\tif (fsession_cnt)\n+\t\tstore_func_meta(image, ctx, func_meta, func_meta_off);\n+\n+\tcookie_ctx_off = (regs_off - cookie_off) / 8;\n+\n+\tfor (i = 0; i < fexit->nr_links; i++) {\n+\t\tif (bpf_prog_calls_session_cookie(fexit->links[i])) {\n+\t\t\tu64 meta = func_meta | (cookie_ctx_off << BPF_TRAMP_COOKIE_INDEX_SHIFT);\n+\n+\t\t\tstore_func_meta(image, ctx, meta, func_meta_off);\n+\t\t\tcookie_ctx_off--;\n+\t\t}\n+\n \t\tif (invoke_bpf_prog(image, ro_image, ctx, fexit->links[i], regs_off, retval_off,\n \t\t\t\t run_ctx_off, false)) {\n \t\t\tret = -EINVAL;\n \t\t\tgoto cleanup;\n \t\t}\n+\t}\n \n \tif (flags & BPF_TRAMP_F_CALL_ORIG) {\n \t\tif (ro_image) /* image is NULL for dummy pass */\ndiff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c\nindex 6670d8c69ade..d9038c468af6 100644\n--- a/arch/powerpc/net/bpf_jit_comp64.c\n+++ b/arch/powerpc/net/bpf_jit_comp64.c\n@@ -179,6 +179,31 @@ static int bpf_jit_stack_offsetof(struct codegen_context *ctx, int reg)\n \tBUG();\n }\n \n+void prepare_for_fsession_fentry(u32 *image, struct codegen_context *ctx, int cookie_cnt,\n+\t\t\t\tint cookie_off, int retval_off)\n+{\n+\tEMIT(PPC_RAW_LI(bpf_to_ppc(TMP_REG_1), 0));\n+\n+\tfor (int i = 0; i < cookie_cnt; i++)\n+\t\tEMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, cookie_off + 8 * i));\n+\tEMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, retval_off));\n+}\n+\n+void store_func_meta(u32 *image, struct codegen_context *ctx,\n+\t\t\t\t\tu64 func_meta, int func_meta_off)\n+{\n+\t/*\n+\t * Store func_meta to stack at [R1 + func_meta_off] = func_meta\n+\t *\n+\t * func_meta :\n+\t *\tbit[63]: is_return flag\n+\t *\tbyte[1]: cookie offset from ctx\n+\t *\tbyte[0]: args count\n+\t */\n+\tPPC_LI64(bpf_to_ppc(TMP_REG_1), func_meta);\n+\tEMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, func_meta_off));\n+}\n+\n void bpf_jit_realloc_regs(struct codegen_context *ctx)\n {\n }\n", "prefixes": [ "v3", "1/2" ] }