{"id":2222432,"url":"http://patchwork.ozlabs.org/api/1.1/covers/2222432/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/cover/20260411221413.44304-1-adubey@linux.ibm.com/","project":{"id":2,"url":"http://patchwork.ozlabs.org/api/1.1/projects/2/?format=json","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/"},"msgid":"<20260411221413.44304-1-adubey@linux.ibm.com>","date":"2026-04-11T22:14:08","name":"[v3,0/5] powerpc/bpf: Add support for verifier selftest","submitter":{"id":88541,"url":"http://patchwork.ozlabs.org/api/1.1/people/88541/?format=json","name":"adubey","email":"adubey@linux.ibm.com"},"mbox":"http://patchwork.ozlabs.org/project/linuxppc-dev/cover/20260411221413.44304-1-adubey@linux.ibm.com/mbox/","series":[{"id":499569,"url":"http://patchwork.ozlabs.org/api/1.1/series/499569/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=499569","date":"2026-04-11T22:14:08","name":"powerpc/bpf: Add support for verifier selftest","version":3,"mbox":"http://patchwork.ozlabs.org/series/499569/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/covers/2222432/comments/","headers":{"Return-Path":"\n <linuxppc-dev+bounces-19648-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=eLvft3lV;\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-19648-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=eLvft3lV;\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 4ftMJM5T0Hz1yGb\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 12 Apr 2026 04:14:27 +1000 (AEST)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4ftMJD6S7gz2yl2;\n\tSun, 12 Apr 2026 04:14:20 +1000 (AEST)","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 4ftMJC0p79z2yVB\n\tfor <linuxppc-dev@lists.ozlabs.org>; Sun, 12 Apr 2026 04:14:18 +1000 (AEST)","from pps.filterd (m0360072.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63BFPita3909595;\n\tSat, 11 Apr 2026 18:14:02 GMT","from ppma21.wdc07v.mail.ibm.com\n (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91])\n\tby mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4dfdxwsrmd-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n\tSat, 11 Apr 2026 18:14:02 +0000 (GMT)","from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1])\n\tby ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id\n 63BD2Prd030062;\n\tSat, 11 Apr 2026 18:14:01 GMT","from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227])\n\tby ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4dcme7w6yf-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n\tSat, 11 Apr 2026 18:14:01 +0000","from smtpav04.fra02v.mail.ibm.com (smtpav04.fra02v.mail.ibm.com\n [10.20.54.103])\n\tby smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 63BIDvqq47382960\n\t(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n\tSat, 11 Apr 2026 18:13:57 GMT","from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id E662620043;\n\tSat, 11 Apr 2026 18:13:56 +0000 (GMT)","from smtpav04.fra02v.mail.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id DDA1920040;\n\tSat, 11 Apr 2026 18:13:54 +0000 (GMT)","from ltcrain4-lp15.ltc.tadn.ibm.com (unknown [9.5.7.39])\n\tby smtpav04.fra02v.mail.ibm.com (Postfix) with ESMTP;\n\tSat, 11 Apr 2026 18:13:54 +0000 (GMT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1775931260;\n\tcv=none;\n b=aTGaX4QIUgZSG019ipY0yEceH0z8h5oBXccCut0vnUKAKGbijCOHlFLxnRrT4VPT5xl12imdbG8Gs3FpCgJmsnlxW0HQn0uugXA1xtzOqCdXo2fvRCgatP3Rfo4phKyJorixZpwUT5I3sWA3okSyKU0KR3dLlycteHDJmsdRiYto8yjhP9tu3BD6QgEZY11wv50Ge8G+banNK/vIidzyd97ReMl1VMFezaawI1fQS/Imy0WSLm96gLDeyGYK8guD+Cmx6m1wvoZJXTVY4KvxFxALyrDioSVisUkibiwYeKCbA3XA4P0dSvb3d7GXdGQYh3fiv35QXiOmF72VIRnl+Q==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1775931260; c=relaxed/relaxed;\n\tbh=sf5L2LHSp2gdD6RQtrFoA0HeuUB9dxabi9juCEOAJyI=;\n\th=From:To:Cc:Subject:Date:Message-ID:MIME-Version;\n b=aWrJm3rz0CGiM+ZC8PQg6a6GM/Xgl961AER/T3nDMRR3evhhQBEhdU1zt/5X0AfVsYA7+K/MC2p7gF1S7ylpF6guyvMi3+NQ7/qinH/BGOw22a5pNhyveE+3Zsn5ZOSAXp61RSHTMpmuAhS0B0/C+u+ni8iuPbLjSoX3cXNJPoPYwR9d0E1eZ2p6f0eRKeSAe/sxyeq0hCQpGfA2V1SEF3AsmKzYzpxtyuzjclMpN8x6S71wrP7nDaUn0UC+TXYMfHRzaNquxGssRAo6/RQDW3VG2OQSHeMpEGfsuHhdK4kh/pqlFn4GBtcIzO0DuyeSfBEa0fqXMNrBCVuFBIrkBA==","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=eLvft3lV; 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=sf5L2LHSp2gdD6RQtrFoA0HeuUB9dxabi9juCEOAJ\n\tyI=; b=eLvft3lVNoNaAo3DGaEpU+GXpGx/25PyGlReFF586Q6EEu0XuN47RnVaL\n\t7iLDqDT3/CRsTvT6o87Vq+jdfofrogMpiO7JMNep7/ego7YlsH4zLC25+vBVbyJs\n\tqCQZG9bF+JQiUhbhnpmqT24dmI56/aQGW8hr1MdUtXm4kIUZg3eO741WsAVlHnfo\n\tpO9zlujnV9Aq6cmFc4oSqVTEioGdjyASqpA4VRuq6N67dETvg9p0PWiRJqN3Uqfu\n\tpimF5/f2p69nRNlTz7EV/zfmij4S/mtRLg7rFUVCwnR1BOGOyVeVDE+iCcePuEEv\n\tj683BpAGDuvARsKnI78ayUmTqPYUQ==","From":"adubey@linux.ibm.com","To":"bpf@vger.kernel.org","Cc":"hbathini@linux.ibm.com, linuxppc-dev@lists.ozlabs.org,\n maddy@linux.ibm.com,\n        ast@kernel.org, andrii@kernel.org, daniel@iogearbox.net,\n        shuah@kernel.org, linux-kselftest@vger.kernel.org,\n        stable@vger.kernel.org, Abhishek Dubey <adubey@linux.ibm.com>","Subject":"[PATCH v3 0/5] powerpc/bpf: Add support for verifier selftest","Date":"Sat, 11 Apr 2026 18:14:08 -0400","Message-ID":"<20260411221413.44304-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-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDExMDE1NyBTYWx0ZWRfX8oVqAZ2IBF6k\n BADqp/Rn8mg+oBOjqgU9MBtHh9t5PwPKwkC9NHbLlU/m9z3p0KXOFBIQGkjil9BAy77tpODQYDE\n 8SYazMp6fIjKiY4AEnbYKysI1ygIMSw0tffp1lwdRnuzoabFOgPI3QdkezE/xhLW+SEpe8IQZtW\n i1hqEUOxdZeyW7+3SLkbrrR34xopEN/mTZVgmz5t4jqAG2sywoiHMOxMUmpeI8X5biSZAiaBc2y\n hGfQ03e1wXRJku9W1Saz3I0pLlsm4/WaEcGuE1nadAfKsRyXutprQlb+N+63a/iqflorxcbPI2w\n 2rVI9CL3e5RaY0OUyQMo1zM7YQSEReXV1pcFT/WpW9uiv1CmqaG5Ron8RaCqi9Ls9dM4pTExvuy\n 4WamcJXfT1wvfTTwz9RvpPigVQupxDfylgzY4gGRm1tczU+waKlm70HWXyUGayFdO/KKNwcmlO9\n YLgLHxi9IQLGHwGwQ3Q==","X-Proofpoint-ORIG-GUID":"4ORPvybNgQe8p3vbsIEhY1igoLFOtzbh","X-Authority-Analysis":"v=2.4 cv=TId1jVla c=1 sm=1 tr=0 ts=69da8f6a cx=c_pps\n a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17\n a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22\n a=RzCfie-kr_QcCd8fBx8p:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8\n a=UrLCjDVe54a93DmA31EA:9","X-Proofpoint-GUID":"4ORPvybNgQe8p3vbsIEhY1igoLFOtzbh","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-11_05,2026-04-09_02,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n bulkscore=0 malwarescore=0 spamscore=0 adultscore=0 phishscore=0\n suspectscore=0 priorityscore=1501 impostorscore=0 clxscore=1015\n lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000\n definitions=main-2604110157","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\nThe verifier selftest validates JITed instructions by matching expected\ndisassembly output. The first two patches fix issues in powerpc instruction\ndisassembly that were causing test flow failures. The fix is common for \n64-bit & 32-bit powerpc. Add support for the powerpc-specific \"__powerpc64\"\narchitecture tag in the third patch, enabling proper test filtering in\nverifier test files. Introduce verifier testcases for tailcalls on powerpc64\nin the final patch.\n\nThe first patch in series is fix patch, correcting memory alignment with\n8-byte boundary for long branch trampoline address. The subsequent\npatches enables verifier selftests on powerpc.\n\nIssue Details:\n--------------\n\n    The Long branch stub in the trampoline implementation[1] provides\n    flexibility to handles short as well as long branch distance to\n    actual trampoline. Whereas, the 8 bytes long dummy_tramp_addr field\n    sitting before long branch stub leads to failure when enabling\n    verifier based seltest for ppc64.\n    \n    The verifier selftests require disassembing the final jited image\n    to get native instructions. Later the disassembled instruction\n    sequence is matched against sequence of instructions provided in\n    test-file under __jited() wrapper. The final jited image contains\n    Out-of-line stub and Long branch stub as part of epilogue jitting\n    for a bpf program. The 8 bytes space for dummy_tramp is sandwiched\n    between both above mentioned stubs. These 8 bytes contain memory\n    address of dummy trampoline during trampoline invocation which don't\n    correspond to any powerpc instructions. So, disassembly fails\n    resulting in failure of verifier selftests.\n    \n    The following code snippet shows the problem with current arrangement\n    made for dummy_tramp_addr.\n    \n    /* Out-of-line stub */\n    mflr    r0  \n    [b|bl]  tramp\n    mtlr    r0 //only with OOL \n    b       bpf_func + 4 \n    /* Long branch stub */\n    .long   <dummy_tramp_addr>  <---Invalid bytes sequence, disassembly fails\n    mflr    r11 \n    bcl     20,31,$+4\n    mflr    r12 \n    ld      r12, -8-SZL(r12)\n    mtctr   r12 \n    mtlr    r11 //retain ftrace ABI \n    bctr\n\n    Consider test program binary of size 112 bytes:\n    0:  00000060 10004de8 00002039 f8ff21f9 81ff21f8 7000e1fb 3000e13b\n    28: 3000e13b 2a006038 f8ff7ff8 00000039 7000e1eb 80002138 7843037d\n    56: 2000804e a602087c 00000060 a603087c bcffff4b c0341d00 000000c0\n    84: a602687d 05009f42 a602887d f0ff8ce9 a603897d a603687d 2004804e\n\n    Disassembly output of above binary for ppc64le:\n    pc:0     left:112    00 00 00 60  :  nop\n    pc:4     left:108    10 00 4d e8  :  ld 2, 16(13)\n    pc:8     left:104    00 00 20 39  :  li 9, 0\n    pc:12    left:100    f8 ff 21 f9  :  std 9, -8(1)\n    pc:16    left:96     81 ff 21 f8  :  stdu 1, -128(1)\n    pc:20    left:92     70 00 e1 fb  :  std 31, 112(1)\n    pc:24    left:88     30 00 e1 3b  :  addi 31, 1, 48\n    pc:28    left:84     30 00 e1 3b  :  addi 31, 1, 48\n    pc:32    left:80     2a 00 60 38  :  li 3, 42\n    pc:36    left:76     f8 ff 7f f8  :  std 3, -8(31)\n    pc:40    left:72     00 00 00 39  :  li 8, 0\n    pc:44    left:68     70 00 e1 eb  :  ld 31, 112(1)\n    pc:48    left:64     80 00 21 38  :  addi 1, 1, 128\n    pc:52    left:60     78 43 03 7d  :  mr    3, 8\n    pc:56    left:56     20 00 80 4e  :  blr\n    pc:60    left:52     a6 02 08 7c  :  mflr 0\n    pc:64    left:48     00 00 00 60  :  nop\n    pc:68    left:44     a6 03 08 7c  :  mtlr 0\n    pc:72    left:40     bc ff ff 4b  :  b .-68\n    pc:76    left:36     c0 34 1d 00  :\n    ...\n\n    Failure log:\n    Can't disasm instruction at offset 76: c0 34 1d 00 00 00 00 c0 a6 02 68 7d 05 00 9f 42\n    --------------------------------------\n\n    Observation:\n    Can't disasm instruction at offset 76 as this address has\n    \".long <dummy_tramp_addr>\" (0xc0341d00000000c0)\n    But valid instructions follow at offset 84 onwards.\n\n    Move the long branch address space to the bottom of the long\n    branch stub. This allows uninterrupted disassembly until the\n    last 8 bytes. Exclude these last bytes from the overall\n    program length to prevent failure in assembly generation.\n\n    Following is disassembler output for same test program with moved down\n    dummy_tramp_addr field:\n    .....\n    .....\n    pc:68    left:44     a6 03 08 7c  :  mtlr 0\n    pc:72    left:40     bc ff ff 4b  :  b .-68\n    pc:76    left:36     a6 02 68 7d  :  mflr 11\n    pc:80    left:32     05 00 9f 42  :  bcl 20, 31, .+4\n    pc:84    left:28     a6 02 88 7d  :  mflr 12\n    pc:88    left:24     14 00 8c e9  :  ld 12, 20(12)\n    pc:92    left:20     a6 03 89 7d  :  mtctr 12\n    pc:96    left:16     a6 03 68 7d  :  mtlr 11\n    pc:100   left:12     20 04 80 4e  :  bctr\n    pc:104   left:8      c0 34 1d 00  :\n\n    Failure log:\n    Can't disasm instruction at offset 104: c0 34 1d 00 00 00 00 c0\n    ---------------------------------------\n    Disassembly logic can truncate at 104, ignoring last 8 bytes.\n\n    Update the dummy_tramp_addr field offset calculation from the end\n    of the program to reflect its new location, for bpf_arch_text_poke()\n    to update the actual trampoline's address in this field.\n\n    [1] https://lore.kernel.org/all/20241030070850.1361304-18-hbathini@linux.ibm.com\n\nv2->v3:\n  Removed fixed NOP from bottom of long branch stub\n  Rebased on top of bpf-next\n\nv1->v2:\n  Added fix-patch to correct memory alignment in-place\n  Moved the optional alignmnet NOP before OOL stub\n\n[v1]: https://lore.kernel.org/bpf/20260225013627.22098-1-adubey@linux.ibm.com\n[v2]: https://lore.kernel.org/bpf/20260403004011.44417-1-adubey@linux.ibm.com\n\nAbhishek Dubey (5):\n  powerpc/bpf: fix alignment of long branch trampoline  address\n  powerpc/bpf: Move out dummy_tramp_addr after Long branch stub\n  selftest/bpf: Fixing powerpc JIT disassembly failure\n  selftest/bpf: Enable verifier selftest for powerpc64\n  selftest/bpf: Add tailcall verifier selftest for powerpc64\n\n arch/powerpc/net/bpf_jit.h                    |  4 +-\n arch/powerpc/net/bpf_jit_comp.c               | 60 ++++++++++++----\n arch/powerpc/net/bpf_jit_comp64.c             |  4 +-\n .../selftests/bpf/jit_disasm_helpers.c        | 13 +++-\n tools/testing/selftests/bpf/progs/bpf_misc.h  |  1 +\n .../bpf/progs/verifier_tailcall_jit.c         | 69 +++++++++++++++++++\n tools/testing/selftests/bpf/test_loader.c     |  5 ++\n 7 files changed, 136 insertions(+), 20 deletions(-)"}