<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in Makefile</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2015</copyright>
    <generator>Java</generator><item>
        <title>f122668d - ARC: Add eBPF JIT support</title>
        <link>http://172.16.0.5:8080/history/linux-6.15/arch/arc/net/Makefile#f122668d</link>
        <description>ARC: Add eBPF JIT supportThis will add eBPF JIT support to the 32-bit ARCv2 processors. Theimplementation is qualified by running the BPF tests on a Synopsys HSDKboard with &quot;ARC HS38 v2.1c at 500 MHz&quot; as the 4-core CPU.The test_bpf.ko reports 2-10 fold improvements in execution time of itstests. For instance:test_bpf: #33 tcpdump port 22 jited:0 704 1766 2104 PASStest_bpf: #33 tcpdump port 22 jited:1 120  224  260 PASStest_bpf: #141 ALU_DIV_X: 4294967295 / 4294967295 = 1 jited:0 238 PASStest_bpf: #141 ALU_DIV_X: 4294967295 / 4294967295 = 1 jited:1  23 PASStest_bpf: #776 JMP32_JGE_K: all ... magnitudes jited:0 2034681 PASStest_bpf: #776 JMP32_JGE_K: all ... magnitudes jited:1 1020022 PASSDeployment and structure------------------------The related codes are added to &quot;arch/arc/net&quot;:- bpf_jit.h       -- The interface that a back-end translator must provide- bpf_jit_core.c  -- Knows how to handle the input eBPF byte stream- bpf_jit_arcv2.c -- The back-end code that knows the translation logicThe bpf_int_jit_compile() at the end of bpf_jit_core.c is the entranceto the whole process. Normally, the translation is done in one pass,namely the &quot;normal pass&quot;. In case some relocations are not known duringthis pass, some data (arc_jit_data) is allocated for the next pass tocome. This possible next (and last) pass is called the &quot;extra pass&quot;.1. Normal pass       # The necessary pass     1a. Dry run       # Get the whole JIT length, epilogue offset, etc.     1b. Emit phase    # Allocate memory and start emitting instructions2. Extra pass        # Only needed if there are relocations to be fixed     2a. Patch relocationsSupport status--------------The JIT compiler supports BPF instructions up to &quot;cpu=v4&quot;. However, itdoes not yet provide support for:- Tail calls- Atomic operations- 64-bit division/remainder- BPF_PROBE_MEM* (exception table)The result of &quot;test_bpf&quot; test suite on an HSDK board is:hsdk-lnx# insmod test_bpf.ko test_suite=test_bpf  test_bpf: Summary: 863 PASSED, 186 FAILED, [851/851 JIT&apos;ed]All the failing test cases are due to the ones that were not JIT&apos;ed.Categorically, they can be represented as:  .-----------.------------.-------------.  | test type |   opcodes  | # of cases  |  |-----------+------------+-------------|  | atomic    | 0xC3, 0xDB |         149 |  | div64     | 0x37, 0x3F |          22 |  | mod64     | 0x97, 0x9F |          15 |  `-----------^------------+-------------|                           | (total) 186 |                           `-------------&apos;Setup: build config-------------------The following configs must be set to have a working JIT test:  CONFIG_BPF_JIT=y  CONFIG_BPF_JIT_ALWAYS_ON=y  CONFIG_TEST_BPF=mThe following options are not necessary for the tests module,but are good to have:  CONFIG_DEBUG_INFO=y             # prerequisite for below  CONFIG_DEBUG_INFO_BTF=y         # so bpftool can generate vmlinux.h  CONFIG_FTRACE=y                 #  CONFIG_BPF_SYSCALL=y            # all these options lead to  CONFIG_KPROBE_EVENTS=y          # having CONFIG_BPF_EVENTS=y  CONFIG_PERF_EVENTS=y            #Some BPF programs provide data through /sys/kernel/debug:  CONFIG_DEBUG_FS=yarc# mount -t debugfs debugfs /sys/kernel/debugSetup: elfutils---------------The libdw.{so,a} library that is used by pahole for processingthe final binary must come from elfutils 0.189 or newer. Thesupport for ARCv2 [1] has been added since that version.[1]https://sourceware.org/git/?p=elfutils.git;a=commit;h=de3d46b3e7Setup: pahole-------------The line below in linux/scripts/Makefile.btf must be commented out:pahole-flags-$(call test-ge, $(pahole-ver), 121) += --btf_gen_floatsOr else, the build will fail:$ make V=1  ...  BTF     .btf.vmlinux.bin.opahole -J --btf_gen_floats                    \       -j --lang_exclude=rust                 \       --skip_encoding_btf_inconsistent_proto \       --btf_gen_optimized .tmp_vmlinux.btfComplex, interval and imaginary float types are not supportedEncountered error while encoding BTF.  ...  BTFIDS  vmlinux./tools/bpf/resolve_btfids/resolve_btfids vmlinuxlibbpf: failed to find &apos;.BTF&apos; ELF section in vmlinuxFAILED: load BTF from vmlinux: No data availableThis is due to the fact that the ARC toolchains generate&quot;complex float&quot; DIE entries in libgcc and at the moment, paholecan&apos;t handle such entries.Running the tests-----------------host$ scp /bld/linux/lib/test_bpf.ko arc:arc # sysctl net.core.bpf_jit_enable=1arc # insmod test_bpf.ko test_suite=test_bpf      ...      test_bpf: #1048 Staggered jumps: JMP32_JSLE_X jited:1 697811 PASS      test_bpf: Summary: 863 PASSED, 186 FAILED, [851/851 JIT&apos;ed]Acknowledgments---------------- Claudiu Zissulescu for his unwavering support- Yuriy Kolerov for testing and troubleshooting- Vladimir Isaev for the pahole workaround- Sergey Matyukevich for paving the road by adding the interpreter supportSigned-off-by: Shahab Vahedi &lt;shahab@synopsys.com&gt;Link: https://lore.kernel.org/r/20240430145604.38592-1-list+bpf@vahedi.orgSigned-off-by: Alexei Starovoitov &lt;ast@kernel.org&gt;

            List of files:
            /linux-6.15/arch/arc/net/Makefile</description>
        <pubDate>Tue, 30 Apr 2024 14:56:04 +0000</pubDate>
        <dc:creator>Shahab Vahedi &lt;shahab@synopsys.com&gt;</dc:creator>
    </item>
</channel>
</rss>
