Message ID | 20220531141307.253385-1-kda@semihalf.com (mailing list archive) |
---|---|
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8750DA0548; Tue, 31 May 2022 16:13:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 343CC40689; Tue, 31 May 2022 16:13:14 +0200 (CEST) Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) by mails.dpdk.org (Postfix) with ESMTP id 246C840143 for <dev@dpdk.org>; Tue, 31 May 2022 16:13:12 +0200 (CEST) Received: by mail-lf1-f49.google.com with SMTP id l30so16567893lfj.3 for <dev@dpdk.org>; Tue, 31 May 2022 07:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=TZocrF0YSHw0eK5xgmb9epiM9rJESfeJ/k+FaZyd4U4=; b=qBbEGldADGEapj23ZLpRQzSyS3v4OOq63H+okwp3g7e6/kpT6Hr4ZotrRyJC06Qv6F opGkBELSBQWZAU/sfqujAtDg2PSfDGc/OU7CBMiIzactO+nsJksjpTJ+kLeF4HCC/dYb 3erXlT6IAa1hHM34MNoxiMPiqK/Zdt3T7QrsZEKscqoNLBL3+38x9kY69JrFtcdwZfsO nrMBnXoJST1e+Cv1yusN/avZ9oPDd+PwrJZDuj8KWZzZlsJNZF8d50G+gEkyU6YxR3jU UQMfGBCNnuBOFOp2FK2djElXvYvresciAT/nqXfNMKJdluLDVZWCAmvjwnJEI5CnIjHP lKlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=TZocrF0YSHw0eK5xgmb9epiM9rJESfeJ/k+FaZyd4U4=; b=UNT/MQz0ht0+SQfkJ8ViiRoYiVVfC4SgBrexCmFQ3qYzt76liof6Kp3Yw677f+rHk4 3gfuL9JMvvub33eya31Qcdv4u64mEhN2Hyu4aAIVGFtGAz2+tUvv0It0MX57M9o4583n hDVAovDGuASe94WTsuLiQV42LdgFWidL5m0tsh1gqecFs8UCcr5ky2eUEAX9zC/7ee1I vQKYjmpBS80zFspj0A+lqnFfGHiLAPzzOWrV1QHavykRZqgl65if6VD7s0Ja3iOpQAT9 SfcEZVrb6fl6niYLQRk/MzAdGie6ZggQKMq3G4Uf/CZxK8IYrJ3uTN8heXW9p2A8bBSA SezQ== X-Gm-Message-State: AOAM532/jwmN0F8Wn9jsJv64v5NvagrUIz6OkTY0wFCq0N1W/gVSCGSE W6goyxDGCx7KQyjgM4rfGalVS7CMEeB4Dql8 X-Google-Smtp-Source: ABdhPJyFkfyouFxhdAVeobbPoN9HJft5V+fdgqOwU7Xm1/McdWQ1mAyOrvDrB9wV0CmJggN/a1CH7g== X-Received: by 2002:a05:6512:1090:b0:478:544a:66f3 with SMTP id j16-20020a056512109000b00478544a66f3mr39002508lfg.94.1654006391474; Tue, 31 May 2022 07:13:11 -0700 (PDT) Received: from toster.semihalf.net (89-73-146-138.dynamic.chello.pl. [89.73.146.138]) by smtp.gmail.com with ESMTPSA id k20-20020a2e6f14000000b002554f044e1asm1258311ljc.116.2022.05.31.07.13.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 May 2022 07:13:11 -0700 (PDT) From: Stanislaw Kardach <kda@semihalf.com> To: dev@dpdk.org Cc: Stanislaw Kardach <kda@semihalf.com>, Frank Zhao <Frank.Zhao@starfivetech.com>, Sam Grove <sam.grove@sifive.com>, mw@semihalf.com, upstream@semihalf.com Subject: [PATCH v4 0/8] Introduce support for RISC-V architecture Date: Tue, 31 May 2022 16:12:59 +0200 Message-Id: <20220531141307.253385-1-kda@semihalf.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org |
Series |
Introduce support for RISC-V architecture
|
|
Message
Stanislaw Kardach
May 31, 2022, 2:12 p.m. UTC
This patchset adds support for building and running DPDK on 64bit RISC-V architecture. The initial support targets rv64gc (rv64imafdc) ISA and was tested on SiFive Unmatched development board with the Freedom U740 SoC running Linux (freedom-u-sdk based kernel). I have tested this codebase using DPDK unit and perf tests as well as test-pmd, l2fwd and l3fwd examples. The NIC attached to the DUT was Intel X520-DA2 which uses ixgbe PMD. On the UIO side, since U740 does not have an IOMMU, I've used igb_uio, uio_pci_generic and vfio-pci noiommu drivers. Functional verification done using meson tests. fast-tests suite passing with the default config. PMD verification done using a Intel x520-DA2 NIC (ixgbe) and the test-pmd application. Packet transfer checked using all UIO drivers available for non-IOMMU platforms: uio_pci_generic, vfio-pci noiommu and igb_uio. The i40e PMD driver is disabled on RISC-V as the rv64gc ISA has no vector operations. RISCV support is currently limited to Linux as the time measurement frequency discovery is tied to reading a device-tree node via procfs. Clang compilation currently not supported due to issues with missing relocation relaxation. Commit 1 introduces EAL and build system support for RISC-V architecture as well as documentation updates. Commits 2-5 add missing defines and stubs to enable RISC-V operation in non-EAL parts. Commit 6 adds RISC-V specific cpuflags test. Commits 7-8 add RISC-V build testing to test-meson-builds.sh and github CI. I appreciate Your comments and feedback. Best Regards, Stanislaw Kardach v4: - Update RISC-V cross-compilation docs to remove vendor-specific instructions and better match the Ubuntu environment. - Remove optional "fence" removal in the CYCLE and TIME counter reads as those are irrelevant compared to the cost of a firmware call that allowed such removal. The per-platform build-configuration is left in meson files for setting '-mtune' and reference for future platforms. - Update cross-files to specify PKG_CONFIG_LIBDIR instead of relying on the riscv64-linux-gnu-pkg-config wrapper which was removed from Ubuntu anyway. Also use sys_root properly instead of using c_args directly. - Note: rte_rdtsc handling is left as it was in v3: TIME counter default, CYCLE via compile-time option. This is mostly due to CYCLE being core-local with values differing among cores which causes timer_autotest to run overly long if it so happens that CYCLE on core 0 is ahead of other cores' CYCLEs. This makes TIME counter more stable for general usage. Since CYCLE read in userspace can be disabled by the kernel-mode (it isn't currently), the compile-time approach is taken, same as with Aarch64. - Added details on --no-huge tests failing in the known_issues.rst. - Additional notes on tests: - link_bonding_mode4_autotest succeeds and then dpdk-test fails with segmentation fault randomly when run directly (via DPDK_TEST env variable) with MALLOC_PERTURB_. This was not noticed in any other test suggesting that there is a race condition somewhere in the link_bonding PMD that leads to use-after-free (since MALLOC_PERTURB_ causes free() to re-initialize freed memory to a given value). - ipsec_perf_autotest currently does not check whether there is any crypto device available (as ipsec_autotest does) and therefore fails. v3: - Limit test-meson-builds.sh testing to a generic rv64gc configuration. Previous version was missing this change by mistake. v2: - Separate bug-fixes into separate series. - Prevent RV64_CSRR leak to API users. - Limit test-meson-builds.sh testing to a generic rv64gc configuration. - Clean-up release notes and fix style issues. [1] http://lists.infradead.org/pipermail/opensbi/2021-June/001219.html Michal Mazurek (2): eal: add initial support for RISC-V architecture test/cpuflags: add test for RISC-V cpu flag Stanislaw Kardach (6): net/ixgbe: enable vector stubs for RISC-V net/memif: set memfd syscall ID on RISC-V net/tap: set BPF syscall ID for RISC-V examples/l3fwd: enable RISC-V operation devtools: add RISC-V to test-meson-builds.sh ci: add RISCV64 cross compilation job .ci/linux-build.sh | 4 + .github/workflows/build.yml | 11 +- MAINTAINERS | 6 + app/test/test_cpuflags.c | 81 +++++++++++ app/test/test_xmmt_ops.h | 16 +++ config/meson.build | 2 + config/riscv/meson.build | 131 ++++++++++++++++++ config/riscv/riscv64_linux_gcc | 17 +++ config/riscv/riscv64_sifive_u740_linux_gcc | 20 +++ devtools/test-meson-builds.sh | 4 + doc/guides/contributing/design.rst | 2 +- .../linux_gsg/cross_build_dpdk_for_riscv.rst | 115 +++++++++++++++ doc/guides/linux_gsg/index.rst | 1 + doc/guides/nics/features.rst | 5 + doc/guides/nics/features/default.ini | 1 + doc/guides/nics/features/ixgbe.ini | 1 + doc/guides/rel_notes/release_22_07.rst | 8 ++ drivers/net/i40e/meson.build | 6 + drivers/net/ixgbe/ixgbe_rxtx.c | 4 +- drivers/net/memif/rte_eth_memif.h | 2 + drivers/net/tap/tap_bpf.h | 2 + examples/l3fwd/l3fwd_em.c | 8 ++ examples/l3fwd/l3fwd_fib.c | 2 + lib/eal/riscv/include/meson.build | 23 +++ lib/eal/riscv/include/rte_atomic.h | 52 +++++++ lib/eal/riscv/include/rte_byteorder.h | 44 ++++++ lib/eal/riscv/include/rte_cpuflags.h | 55 ++++++++ lib/eal/riscv/include/rte_cycles.h | 101 ++++++++++++++ lib/eal/riscv/include/rte_io.h | 21 +++ lib/eal/riscv/include/rte_mcslock.h | 18 +++ lib/eal/riscv/include/rte_memcpy.h | 63 +++++++++ lib/eal/riscv/include/rte_pause.h | 31 +++++ lib/eal/riscv/include/rte_pflock.h | 17 +++ lib/eal/riscv/include/rte_power_intrinsics.h | 22 +++ lib/eal/riscv/include/rte_prefetch.h | 50 +++++++ lib/eal/riscv/include/rte_rwlock.h | 44 ++++++ lib/eal/riscv/include/rte_spinlock.h | 67 +++++++++ lib/eal/riscv/include/rte_ticketlock.h | 21 +++ lib/eal/riscv/include/rte_vect.h | 55 ++++++++ lib/eal/riscv/meson.build | 11 ++ lib/eal/riscv/rte_cpuflags.c | 122 ++++++++++++++++ lib/eal/riscv/rte_cycles.c | 77 ++++++++++ lib/eal/riscv/rte_hypervisor.c | 13 ++ lib/eal/riscv/rte_power_intrinsics.c | 56 ++++++++ meson.build | 2 + 45 files changed, 1410 insertions(+), 4 deletions(-) create mode 100644 config/riscv/meson.build create mode 100644 config/riscv/riscv64_linux_gcc create mode 100644 config/riscv/riscv64_sifive_u740_linux_gcc create mode 100644 doc/guides/linux_gsg/cross_build_dpdk_for_riscv.rst create mode 100644 lib/eal/riscv/include/meson.build create mode 100644 lib/eal/riscv/include/rte_atomic.h create mode 100644 lib/eal/riscv/include/rte_byteorder.h create mode 100644 lib/eal/riscv/include/rte_cpuflags.h create mode 100644 lib/eal/riscv/include/rte_cycles.h create mode 100644 lib/eal/riscv/include/rte_io.h create mode 100644 lib/eal/riscv/include/rte_mcslock.h create mode 100644 lib/eal/riscv/include/rte_memcpy.h create mode 100644 lib/eal/riscv/include/rte_pause.h create mode 100644 lib/eal/riscv/include/rte_pflock.h create mode 100644 lib/eal/riscv/include/rte_power_intrinsics.h create mode 100644 lib/eal/riscv/include/rte_prefetch.h create mode 100644 lib/eal/riscv/include/rte_rwlock.h create mode 100644 lib/eal/riscv/include/rte_spinlock.h create mode 100644 lib/eal/riscv/include/rte_ticketlock.h create mode 100644 lib/eal/riscv/include/rte_vect.h create mode 100644 lib/eal/riscv/meson.build create mode 100644 lib/eal/riscv/rte_cpuflags.c create mode 100644 lib/eal/riscv/rte_cycles.c create mode 100644 lib/eal/riscv/rte_hypervisor.c create mode 100644 lib/eal/riscv/rte_power_intrinsics.c
Comments
On Tue, May 31, 2022 at 4:14 PM Stanislaw Kardach <kda@semihalf.com> wrote: > > This patchset adds support for building and running DPDK on 64bit RISC-V > architecture. The initial support targets rv64gc (rv64imafdc) ISA and > was tested on SiFive Unmatched development board with the Freedom U740 > SoC running Linux (freedom-u-sdk based kernel). > I have tested this codebase using DPDK unit and perf tests as well as > test-pmd, l2fwd and l3fwd examples. > The NIC attached to the DUT was Intel X520-DA2 which uses ixgbe PMD. > On the UIO side, since U740 does not have an IOMMU, I've used igb_uio, > uio_pci_generic and vfio-pci noiommu drivers. > > Functional verification done using meson tests. fast-tests suite passing with > the default config. > > PMD verification done using a Intel x520-DA2 NIC (ixgbe) and the test-pmd > application. Packet transfer checked using all UIO drivers available for > non-IOMMU platforms: uio_pci_generic, vfio-pci noiommu and igb_uio. > > The i40e PMD driver is disabled on RISC-V as the rv64gc ISA has no vector > operations. > > RISCV support is currently limited to Linux as the time measurement frequency > discovery is tied to reading a device-tree node via procfs. > > Clang compilation currently not supported due to issues with missing relocation > relaxation. > > Commit 1 introduces EAL and build system support for RISC-V architecture > as well as documentation updates. > Commits 2-5 add missing defines and stubs to enable RISC-V operation in > non-EAL parts. > Commit 6 adds RISC-V specific cpuflags test. > Commits 7-8 add RISC-V build testing to test-meson-builds.sh and github CI. Overall, the series lgtm. It did not get much reviews, but the porting is straightforward and clean enough. I'm waiting for some compilation to finish and I will merge it for 22.07-rc1. Some comments that will probably require some followup patches for rc2: - I removed the known issue about --no-huge from the EAL patch. This seems to be a generic issue that does not block the RISC V port and can be re-submitted as a separate patch. - I had some trouble with finding a right toolchain for test-meson-builds.sh. The mentionned toolchains in the cross build guide don't work for me on FC36. I managed to cross compile with a Bootlin toolchain, though I had to adjust the cross compilation file. I'll probably end up compiling my own toolchain later unless you have a better idea. At least the compilation in GHA works. - The hardcoded pkg-config path in config/riscv/riscv64_linux_gcc does not seem generic. It is probably not a big issue, but I'd rather move it to a Ubuntu specific cross compile meson file. WDYT? - I adjusted some coding style in some asm and some indentation and wording in meson. - The cross compilation guide mentions using crossbuild-essential-riscv64 for Ubuntu. We should switch to it in GHA. Though after trying myself, there is an issue in the C++ headers check in GHA for some acl header including rte_vect.h. Can you have a look? - There was a patch from Heinrich about native compilation, can you review it?
On Wed, Jun 8, 2022 at 10:41 AM David Marchand <david.marchand@redhat.com> wrote: > On Tue, May 31, 2022 at 4:14 PM Stanislaw Kardach <kda@semihalf.com> wrote: > > > > This patchset adds support for building and running DPDK on 64bit RISC-V > > architecture. The initial support targets rv64gc (rv64imafdc) ISA and > > was tested on SiFive Unmatched development board with the Freedom U740 > > SoC running Linux (freedom-u-sdk based kernel). > > I have tested this codebase using DPDK unit and perf tests as well as > > test-pmd, l2fwd and l3fwd examples. > > The NIC attached to the DUT was Intel X520-DA2 which uses ixgbe PMD. > > On the UIO side, since U740 does not have an IOMMU, I've used igb_uio, > > uio_pci_generic and vfio-pci noiommu drivers. > > > > Functional verification done using meson tests. fast-tests suite passing with > > the default config. > > > > PMD verification done using a Intel x520-DA2 NIC (ixgbe) and the test-pmd > > application. Packet transfer checked using all UIO drivers available for > > non-IOMMU platforms: uio_pci_generic, vfio-pci noiommu and igb_uio. > > > > The i40e PMD driver is disabled on RISC-V as the rv64gc ISA has no vector > > operations. > > > > RISCV support is currently limited to Linux as the time measurement frequency > > discovery is tied to reading a device-tree node via procfs. > > > > Clang compilation currently not supported due to issues with missing relocation > > relaxation. > > > > Commit 1 introduces EAL and build system support for RISC-V architecture > > as well as documentation updates. > > Commits 2-5 add missing defines and stubs to enable RISC-V operation in > > non-EAL parts. > > Commit 6 adds RISC-V specific cpuflags test. > > Commits 7-8 add RISC-V build testing to test-meson-builds.sh and github CI. > > Overall, the series lgtm. > It did not get much reviews, but the porting is straightforward and > clean enough. > > I'm waiting for some compilation to finish and I will merge it for 22.07-rc1. Welcome to RISC-V in DPDK! Let's work out the last details in -rc2. Series applied, thanks.
On Wed, Jun 8, 2022 at 11:32 AM David Marchand <david.marchand@redhat.com> wrote: > > On Wed, Jun 8, 2022 at 10:41 AM David Marchand > <david.marchand@redhat.com> wrote: > > On Tue, May 31, 2022 at 4:14 PM Stanislaw Kardach <kda@semihalf.com> wrote: > > > > > > This patchset adds support for building and running DPDK on 64bit RISC-V > > > architecture. The initial support targets rv64gc (rv64imafdc) ISA and > > > was tested on SiFive Unmatched development board with the Freedom U740 > > > SoC running Linux (freedom-u-sdk based kernel). > > > I have tested this codebase using DPDK unit and perf tests as well as > > > test-pmd, l2fwd and l3fwd examples. > > > The NIC attached to the DUT was Intel X520-DA2 which uses ixgbe PMD. > > > On the UIO side, since U740 does not have an IOMMU, I've used igb_uio, > > > uio_pci_generic and vfio-pci noiommu drivers. > > > > > > Functional verification done using meson tests. fast-tests suite passing with > > > the default config. > > > > > > PMD verification done using a Intel x520-DA2 NIC (ixgbe) and the test-pmd > > > application. Packet transfer checked using all UIO drivers available for > > > non-IOMMU platforms: uio_pci_generic, vfio-pci noiommu and igb_uio. > > > > > > The i40e PMD driver is disabled on RISC-V as the rv64gc ISA has no vector > > > operations. > > > > > > RISCV support is currently limited to Linux as the time measurement frequency > > > discovery is tied to reading a device-tree node via procfs. > > > > > > Clang compilation currently not supported due to issues with missing relocation > > > relaxation. > > > > > > Commit 1 introduces EAL and build system support for RISC-V architecture > > > as well as documentation updates. > > > Commits 2-5 add missing defines and stubs to enable RISC-V operation in > > > non-EAL parts. > > > Commit 6 adds RISC-V specific cpuflags test. > > > Commits 7-8 add RISC-V build testing to test-meson-builds.sh and github CI. > > > > Overall, the series lgtm. > > It did not get much reviews, but the porting is straightforward and > > clean enough. > > > > I'm waiting for some compilation to finish and I will merge it for 22.07-rc1. > > Welcome to RISC-V in DPDK! > > Let's work out the last details in -rc2. > Series applied, thanks. Awesome, thanks! > > > -- > David Marchand >
On 6/8/22 10:41, David Marchand wrote: > On Tue, May 31, 2022 at 4:14 PM Stanislaw Kardach <kda@semihalf.com> wrote: >> >> This patchset adds support for building and running DPDK on 64bit RISC-V >> architecture. The initial support targets rv64gc (rv64imafdc) ISA and >> was tested on SiFive Unmatched development board with the Freedom U740 >> SoC running Linux (freedom-u-sdk based kernel). >> I have tested this codebase using DPDK unit and perf tests as well as >> test-pmd, l2fwd and l3fwd examples. >> The NIC attached to the DUT was Intel X520-DA2 which uses ixgbe PMD. >> On the UIO side, since U740 does not have an IOMMU, I've used igb_uio, >> uio_pci_generic and vfio-pci noiommu drivers. >> >> Functional verification done using meson tests. fast-tests suite passing with >> the default config. >> >> PMD verification done using a Intel x520-DA2 NIC (ixgbe) and the test-pmd >> application. Packet transfer checked using all UIO drivers available for >> non-IOMMU platforms: uio_pci_generic, vfio-pci noiommu and igb_uio. >> >> The i40e PMD driver is disabled on RISC-V as the rv64gc ISA has no vector >> operations. >> >> RISCV support is currently limited to Linux as the time measurement frequency >> discovery is tied to reading a device-tree node via procfs. >> >> Clang compilation currently not supported due to issues with missing relocation >> relaxation. >> >> Commit 1 introduces EAL and build system support for RISC-V architecture >> as well as documentation updates. >> Commits 2-5 add missing defines and stubs to enable RISC-V operation in >> non-EAL parts. >> Commit 6 adds RISC-V specific cpuflags test. >> Commits 7-8 add RISC-V build testing to test-meson-builds.sh and github CI. > > Overall, the series lgtm. > It did not get much reviews, but the porting is straightforward and > clean enough. > > I'm waiting for some compilation to finish and I will merge it for 22.07-rc1. > > > Some comments that will probably require some followup patches for rc2: > > - I removed the known issue about --no-huge from the EAL patch. > This seems to be a generic issue that does not block the RISC V port > and can be re-submitted as a separate patch. > > > - I had some trouble with finding a right toolchain for test-meson-builds.sh. > The mentionned toolchains in the cross build guide don't work for me on FC36. > I managed to cross compile with a Bootlin toolchain, though I had to > adjust the cross compilation file. > I'll probably end up compiling my own toolchain later unless you have > a better idea. Please, consider building natively too. https://wiki.ubuntu.com/RISC-V describes setting setting up a virtual machine. > > At least the compilation in GHA works. > > > - The hardcoded pkg-config path in config/riscv/riscv64_linux_gcc does > not seem generic. > It is probably not a big issue, but I'd rather move it to a Ubuntu > specific cross compile meson file. > WDYT? > > > - I adjusted some coding style in some asm and some indentation and > wording in meson. > > > - The cross compilation guide mentions using > crossbuild-essential-riscv64 for Ubuntu. > We should switch to it in GHA. > Though after trying myself, there is an issue in the C++ headers check > in GHA for some acl header including rte_vect.h. > Can you have a look? > > > - There was a patch from Heinrich about native compilation, can you review it? [PATCH] Fix RISC-V builds http://mails.dpdk.org/archives/dev/2022-May/242749.html relates to PktGen. Best regards Heinrich
On Wed, Jun 8, 2022 at 10:42 AM David Marchand <david.marchand@redhat.com> wrote: > > On Tue, May 31, 2022 at 4:14 PM Stanislaw Kardach <kda@semihalf.com> wrote: > > > > This patchset adds support for building and running DPDK on 64bit RISC-V > > architecture. The initial support targets rv64gc (rv64imafdc) ISA and > > was tested on SiFive Unmatched development board with the Freedom U740 > > SoC running Linux (freedom-u-sdk based kernel). > > I have tested this codebase using DPDK unit and perf tests as well as > > test-pmd, l2fwd and l3fwd examples. > > The NIC attached to the DUT was Intel X520-DA2 which uses ixgbe PMD. > > On the UIO side, since U740 does not have an IOMMU, I've used igb_uio, > > uio_pci_generic and vfio-pci noiommu drivers. > > > > Functional verification done using meson tests. fast-tests suite passing with > > the default config. > > > > PMD verification done using a Intel x520-DA2 NIC (ixgbe) and the test-pmd > > application. Packet transfer checked using all UIO drivers available for > > non-IOMMU platforms: uio_pci_generic, vfio-pci noiommu and igb_uio. > > > > The i40e PMD driver is disabled on RISC-V as the rv64gc ISA has no vector > > operations. > > > > RISCV support is currently limited to Linux as the time measurement frequency > > discovery is tied to reading a device-tree node via procfs. > > > > Clang compilation currently not supported due to issues with missing relocation > > relaxation. > > > > Commit 1 introduces EAL and build system support for RISC-V architecture > > as well as documentation updates. > > Commits 2-5 add missing defines and stubs to enable RISC-V operation in > > non-EAL parts. > > Commit 6 adds RISC-V specific cpuflags test. > > Commits 7-8 add RISC-V build testing to test-meson-builds.sh and github CI. > > Overall, the series lgtm. > It did not get much reviews, but the porting is straightforward and > clean enough. > > I'm waiting for some compilation to finish and I will merge it for 22.07-rc1. > > > Some comments that will probably require some followup patches for rc2: > > - I removed the known issue about --no-huge from the EAL patch. > This seems to be a generic issue that does not block the RISC V port > and can be re-submitted as a separate patch. If you mean the modified entry in the known_issues, I've added it at Heinrich's request, although I agree I should have placed it in a separate patch. > > > - I had some trouble with finding a right toolchain for test-meson-builds.sh. > The mentionned toolchains in the cross build guide don't work for me on FC36. > I managed to cross compile with a Bootlin toolchain, though I had to > adjust the cross compilation file. > I'll probably end up compiling my own toolchain later unless you have > a better idea. I have just checked with fedora/36 docker and it seems that only gcc and binutils packages are there but stdlib isn't. Hence meson fails at basic checks because it can't find "stdio.h". So that's a bug to post to Fedora I believe. What does work in terms of cross-compiling is using a riscv-gnu-toolchain tarball + modified cross-file (i.e. from here: https://github.com/riscv-collab/riscv-gnu-toolchain/releases/tag/2022.06.03). That most likely won't work for building RPMs but for static compilations it might be enough. Or you could use a Ubuntu docker and cross-compile there (though the same problem as before): docker run -v /path/to/dpdk:/opt/dpdk -it ubuntu:jammy /bin/bash Or a VM as Heinrich suggested. > > At least the compilation in GHA works. That's because I've used Ubuntu as a base, which has a proper toolchain setup. Also riscv-gnu-toolchain project targets Ubuntu, so that helps. > > > - The hardcoded pkg-config path in config/riscv/riscv64_linux_gcc does > not seem generic. > It is probably not a big issue, but I'd rather move it to a Ubuntu > specific cross compile meson file. > WDYT? I think I'll rename the config file. In theory, the man file of pkg-config (https://linux.die.net/man/1/pkg-config) mentions the default searching path as prefix/lib/pkgconfig. Prefix being /usr/riscv64-linux-gnu the generic location should be /usr/riscv64-linux-gnu/lib/pkgconfig but Ubuntu doesn't follow that. There are no RISC-V cross-libs offering pkg-config neither in Ubuntu or Fedora so I can't really tell what's the best path to use. Though that also means we won't hit this issue for some time. > > > - I adjusted some coding style in some asm and some indentation and > wording in meson. Thanks! > > > - The cross compilation guide mentions using > crossbuild-essential-riscv64 for Ubuntu. > We should switch to it in GHA. > Though after trying myself, there is an issue in the C++ headers check > in GHA for some acl header including rte_vect.h. > Can you have a look? I'm testing a fix for this. I have not taken C++ type conversion rules into account. > > > - There was a patch from Heinrich about native compilation, can you review it? I see it was merged but your question from that thread still stands. I'm compiling native now to check. > > > -- > David Marchand >