> > -----Original Message----- > > From: dev <ovs-dev-boun...@openvswitch.org> On Behalf Of Ian Stokes > > Sent: Wednesday, December 2, 2020 1:02 PM > > To: d...@openvswitch.org > > Cc: el...@nvidia.com; i.maxim...@ovn.org; david.march...@redhat.com; > > bl...@debian.org > > Subject: [ovs-dev] [PATCH v2 1/1] dpdk: Update to use DPDK v20.11. > > > > This commit adds support for DPDK v20.11, it includes the following > > changes. > > > > 1. travis: Remove explicit DPDK kmods configuration. > > 2. sparse: Fix build with 20.05 DPDK tracepoints. > > 3. netdev-dpdk: Remove experimental API flag. > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=173216&state=* > > > > 4. sparse: Update to DPDK 20.05 trace point header. > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=179604&state=* > > > > 5. sparse: Fix build with DPDK 20.08. > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=200181&state=* > > > > 6. build: Add support for DPDK meson build. > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=199138&state=* > > > > 7. netdev-dpdk: Remove usage of RTE_ETH_DEV_CLOSE_REMOVE flag. > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=207850&state=* > > > > 8. netdev-dpdk: Fix build with 20.11-rc1. > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=209006&state=* > > > > 9. sparse: Fix __ATOMIC_* redefinition errors > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=209452&state=* > > > > 10. build: Remove DPDK make build references. > > > > > http://patchwork.ozlabs.org/project/openvswitch/list/?series=216682&state=* > > > > For credit all authors of the original commits to 'dpdk-latest' with the > > above changes have been added as co-authors for this commit. > > > > Signed-off-by: David Marchand <david.march...@redhat.com> > > Co-authored-by: David Marchand <david.march...@redhat.com> > > Signed-off-by: Sunil Pai G <sunil.pa...@intel.com> > > Co-authored-by: Sunil Pai G <sunil.pa...@intel.com> > > Signed-off-by: Eli Britstein <el...@nvidia.com> > > Co-authored-by: Eli Britstein <el...@nvidia.com> > > Signed-off-by: Ian Stokes <ian.sto...@intel.com> > > As part of the DPIF refactoring[1], we're rebasing to the latest DPDK 20.11 > enabling patch (aka, this v2 patch). > Using updated meson/ninja commands as described in the docs in this patch, all > compiled successfully. > > Thanks for the patch Ian, and wider OVS community can we merge this patch > ASAP? > There will be a dependencies on this DPDK 20.11 enabling patch in our DPIF > patch series. > > Tested-by: Harry van Haaren <harry.van.haa...@intel.com>
Thanks for the Tested-by tag Harry. Separate to your testing Hari Prasad has been testing 20.11 also with OVS. @Govindharajan, Hariprasad could you provide a summary of the testing you've completed with DPDK 20.11? Regards Ian > > [1] > https://patchwork.ozlabs.org/project/openvswitch/cover/20201203193747.807 > 120-1-harry.van.haa...@intel.com/ > > > > --- > > RFC v1 -> v2 > > * Removed RFC tag. > > * Rebased to head of master. > > * Modified GHA build scripts to install required python packages. > > * Modified URLs to use versioned 20.11 links. > > * Removed unrequired reformat in travis.yml. > > * Modified GHA worflow buil-and-test.yml to remove others write > > permission to $HOME in prepare step. > > --- > > .ci/linux-build.sh | 48 +++++++++++++------- > > .ci/linux-prepare.sh | 1 + > > .github/workflows/build-and-test.yml | 10 ++-- > > .travis.yml | 3 ++ > > Documentation/intro/install/afxdp.rst | 2 +- > > Documentation/intro/install/dpdk.rst | 64 ++++++++++++++------------ > > Documentation/topics/dpdk/phy.rst | 18 +++++--- > > Documentation/topics/dpdk/vhost-user.rst | 20 +------- > > Documentation/topics/testing.rst | 2 +- > > NEWS | 1 + > > acinclude.m4 | 78 > > +++++++++++++------------------- > > include/sparse/automake.mk | 2 + > > include/sparse/rte_mbuf.h | 29 ++++++++++++ > > include/sparse/rte_trace_point.h | 28 ++++++++++++ > > lib/dpdk.c | 2 +- > > lib/netdev-dpdk.c | 20 ++------ > > 16 files changed, 190 insertions(+), 138 deletions(-) > > create mode 100644 include/sparse/rte_mbuf.h > > create mode 100644 include/sparse/rte_trace_point.h > > > > diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh > > index 16102ac94..3e5136fd4 100755 > > --- a/.ci/linux-build.sh > > +++ b/.ci/linux-build.sh > > @@ -87,17 +87,29 @@ function install_dpdk() > > { > > local DPDK_VER=$1 > > local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version" > > + local DPDK_OPTS="" > > + local DPDK_LIB="" > > > > if [ -z "$TRAVIS_ARCH" ] || > > [ "$TRAVIS_ARCH" == "amd64" ]; then > > - TARGET="x86_64-native-linuxapp-gcc" > > + DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu > > elif [ "$TRAVIS_ARCH" == "aarch64" ]; then > > - TARGET="arm64-armv8a-linuxapp-gcc" > > + DPDK_LIB=$(pwd)/dpdk-dir/build/lib/aarch64-linux-gnu > > else > > echo "Target is unknown" > > exit 1 > > fi > > > > + if [ "$DPDK_SHARED" ]; then > > + EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared" > > + export LD_LIBRARY_PATH=$DPDK_LIB/:$LD_LIBRARY_PATH > > + else > > + EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=static" > > + fi > > + > > + # Export the following path for pkg-config to find the .pc file. > > + export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH > > + > > if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then > > # Avoid using cache for git tree build. > > rm -rf dpdk-dir > > @@ -110,7 +122,8 @@ function install_dpdk() > > if [ -f "${VERSION_FILE}" ]; then > > VER=$(cat ${VERSION_FILE}) > > if [ "${VER}" = "${DPDK_VER}" ]; then > > - EXTRA_OPTS="${EXTRA_OPTS} > > --with-dpdk=$(pwd)/dpdk-dir/build" > > + # Update the library paths. > > + sudo ldconfig > > echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-dir" > > return > > fi > > @@ -124,23 +137,24 @@ function install_dpdk() > > pushd dpdk-dir > > fi > > > > - make config CC=gcc T=$TARGET > > + # Switching to 'default' machine to make dpdk-dir cache usable on > > + # different CPUs. We can't be sure that all CI machines are exactly > > same. > > + DPDK_OPTS="$DPDK_OPTS -Dmachine=default" > > > > - if [ "$DPDK_SHARED" ]; then > > - sed -i '/CONFIG_RTE_BUILD_SHARED_LIB=n/s/=n/=y/' build/.config > > - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$TARGET/lib > > - fi > > + # Disable building DPDK unit tests. Not needed for OVS build or tests. > > + DPDK_OPTS="$DPDK_OPTS -Dtests=false" > > + > > + # Install DPDK using prefix. > > + DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build" > > + > > + CC=gcc meson $DPDK_OPTS build > > + ninja -C build > > + ninja -C build install > > > > - # Disable building DPDK kernel modules. Not needed for OVS build or > > tests. > > - sed -i '/CONFIG_RTE_EAL_IGB_UIO=y/s/=y/=n/' build/.config > > - sed -i '/CONFIG_RTE_KNI_KMOD=y/s/=y/=n/' build/.config > > + # Update the library paths. > > + sudo ldconfig > > > > - # Switching to 'default' machine to make dpdk-dir cache usable on > > different > > - # CPUs. We can't be sure that all CI machines are exactly same. > > - sed -i '/CONFIG_RTE_MACHINE="native"/s/="native"/="default"/' > build/.config > > > > - make -j4 CC=gcc EXTRA_CFLAGS='-fPIC' > > - EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/build" > > echo "Installed DPDK source in $(pwd)" > > popd > > echo "${DPDK_VER}" > ${VERSION_FILE} > > @@ -187,7 +201,7 @@ fi > > > > if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then > > if [ -z "$DPDK_VER" ]; then > > - DPDK_VER="19.11.2" > > + DPDK_VER="20.11" > > fi > > install_dpdk $DPDK_VER > > if [ "$CC" = "clang" ]; then > > diff --git a/.ci/linux-prepare.sh b/.ci/linux-prepare.sh > > index fea905a83..69a40011f 100755 > > --- a/.ci/linux-prepare.sh > > +++ b/.ci/linux-prepare.sh > > @@ -22,6 +22,7 @@ cd .. > > > > pip3 install --disable-pip-version-check --user flake8 hacking > > pip3 install --user --upgrade docutils > > +pip3 install --user 'meson==0.47.1' > > > > if [ "$M32" ]; then > > # Installing 32-bit libraries. > > diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build- > and- > > test.yml > > index 847fd3150..d33e6a0b5 100644 > > --- a/.github/workflows/build-and-test.yml > > +++ b/.github/workflows/build-and-test.yml > > @@ -8,7 +8,8 @@ jobs: > > dependencies: | > > automake libtool gcc bc libjemalloc1 libjemalloc-dev \ > > libssl-dev llvm-dev libelf-dev libnuma-dev libpcap-dev \ > > - python3-openssl python3-pip python3-sphinx \ > > + ninja-build python3-openssl python3-pip \ > > + python3-setuptools python3-sphinx python3-wheel \ > > selinux-policy-dev > > deb_dependencies: | > > linux-headers-$(uname -r) build-essential fakeroot devscripts > > equivs > > @@ -143,10 +144,13 @@ jobs: > > run: sudo apt install -y libunbound-dev libunwind-dev > > > > - name: prepare > > - run: ./.ci/linux-prepare.sh > > + run: | > > + ./.ci/linux-prepare.sh > > + # Workaround on $HOME permissions as EAL checks them for plugin > loading > > + chmod o-w $HOME > > > > - name: build > > - run: PATH="$PATH:$HOME/bin" ./.ci/linux-build.sh > > + run: PATH="$PATH:$HOME/bin:$HOME/.local/bin" ./.ci/linux-build.sh > > > > - name: upload deb packages > > if: matrix.deb_package != '' > > diff --git a/.travis.yml b/.travis.yml > > index acf3c10fb..51d051108 100644 > > --- a/.travis.yml > > +++ b/.travis.yml > > @@ -24,6 +24,9 @@ addons: > > - selinux-policy-dev > > - libunbound-dev > > - libunwind-dev > > + - python3-setuptools > > + - python3-wheel > > + - ninja-build > > > > before_install: ./.ci/${TRAVIS_OS_NAME}-prepare.sh > > > > diff --git a/Documentation/intro/install/afxdp.rst > > b/Documentation/intro/install/afxdp.rst > > index 3c8f78825..aad0aeebe 100644 > > --- a/Documentation/intro/install/afxdp.rst > > +++ b/Documentation/intro/install/afxdp.rst > > @@ -396,7 +396,7 @@ PVP using vhostuser device > > -------------------------- > > First, build OVS with DPDK and AFXDP:: > > > > - ./configure --enable-afxdp --with-dpdk=<dpdk path> > > + ./configure --enable-afxdp --with-dpdk=shared|static > > make -j4 && make install > > > > Create a vhost-user port from OVS:: > > diff --git a/Documentation/intro/install/dpdk.rst > > b/Documentation/intro/install/dpdk.rst > > index fe11571d2..4f0c10082 100644 > > --- a/Documentation/intro/install/dpdk.rst > > +++ b/Documentation/intro/install/dpdk.rst > > @@ -42,7 +42,7 @@ Build requirements > > In addition to the requirements described in :doc:`general`, building Open > > vSwitch with DPDK will require the following: > > > > -- DPDK 19.11.2 > > +- DPDK 20.11 > > > > - A `DPDK supported NIC`_ > > > > @@ -62,6 +62,8 @@ Detailed system requirements can be found at `DPDK > > requirements`_. > > .. _DPDK supported NIC: http://dpdk.org/doc/nics > > .. _DPDK requirements: http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html > > > > +.. _dpdk-install: > > + > > Installing > > ---------- > > > > @@ -71,38 +73,44 @@ Install DPDK > > #. Download the `DPDK sources`_, extract the file and set ``DPDK_DIR``:: > > > > $ cd /usr/src/ > > - $ wget https://fast.dpdk.org/rel/dpdk-19.11.2.tar.xz > > - $ tar xf dpdk-19.11.2.tar.xz > > - $ export DPDK_DIR=/usr/src/dpdk-stable-19.11.2 > > + $ wget https://fast.dpdk.org/rel/dpdk-20.11.tar.xz > > + $ tar xf dpdk-20.11.tar.xz > > + $ export DPDK_DIR=/usr/src/dpdk-20.11 > > $ cd $DPDK_DIR > > > > -#. (Optional) Configure DPDK as a shared library > > +#. Configure and install DPDK using Meson > > > > - DPDK can be built as either a static library or a shared library. By > > - default, it is configured for the former. If you wish to use the > > latter, set > > - ``CONFIG_RTE_BUILD_SHARED_LIB=y`` in > ``$DPDK_DIR/config/common_base``. > > + Build and install the DPDK library:: > > > > - .. note:: > > + $ export DPDK_BUILD=$DPDK_DIR/build > > + $ meson build > > + $ ninja -C build > > + $ sudo ninja -C build install > > + $ sudo ldconfig > > > > - Minor performance loss is expected when using OVS with a shared DPDK > > - library compared to a static DPDK library. > > + Detailed information can be found at `DPDK documentation`_. > > > > -#. Configure and install DPDK > > +#. (Optional) Configure and export the DPDK shared library location > > > > - Build and install the DPDK library:: > > + Since DPDK is built both as static and shared library by default, no > > extra > > + configuration is required for the build. > > > > - $ export DPDK_TARGET=x86_64-native-linuxapp-gcc > > - $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET > > - $ make install T=$DPDK_TARGET DESTDIR=install > > + Exporting the path to library is not necessary if the DPDK libraries are > > + system installed. For libraries installed using a prefix, export the > > path > > + to this library and also update the $PKG_CONFIG_PATH for use > > + before building OVS:: > > > > -#. (Optional) Export the DPDK shared library location > > + $ export LD_LIBRARY_PATH=/path/to/installed/DPDK/libraries > > + $ export PKG_CONFIG_PATH=/path/to/installed/".pc" file/for/DPDK > > > > - If DPDK was built as a shared library, export the path to this library > > for > > - use when building OVS:: > > + .. note:: > > > > - $ export LD_LIBRARY_PATH=$DPDK_DIR/x86_64-native-linuxapp-gcc/lib > > + Minor performance loss is expected when using OVS with a shared DPDK > > + library compared to a static DPDK library. > > > > .. _DPDK sources: http://dpdk.org/rel > > +.. _DPDK documentation: > > + https://doc.dpdk.org/guides-20.08/linux_gsg/build_dpdk.html > > > > Install OVS > > ~~~~~~~~~~~ > > @@ -121,16 +129,16 @@ has to be configured to build against the DPDK > library (``-- > > with-dpdk``). > > > > #. Bootstrap, if required, as described in :ref:`general-bootstrapping` > > > > -#. Configure the package using the ``--with-dpdk`` flag:: > > +#. Configure the package using the ``--with-dpdk`` flag: > > + > > + If OVS must consume DPDK static libraries > > + (also equivalent to ``--with-dpdk=yes`` ):: > > > > - $ ./configure --with-dpdk=$DPDK_BUILD > > + $ ./configure --with-dpdk=static > > > > - where ``DPDK_BUILD`` is the path to the built DPDK library. This can be > > - skipped if DPDK library is installed in its default location. > > + If OVS must consume DPDK shared libraries:: > > > > - If no path is provided to ``--with-dpdk``, but a pkg-config > > configuration > > - for libdpdk is available the include paths will be generated via an > > - equivalent ``pkg-config --cflags libdpdk``. > > + $ ./configure --with-dpdk=shared > > > > .. note:: > > While ``--with-dpdk`` is required, you can pass any other > > configuration > > @@ -703,7 +711,7 @@ Limitations > > release notes`_. > > > > .. _DPDK release notes: > > - https://doc.dpdk.org/guides-19.11/rel_notes/release_19_11.html > > + https://doc.dpdk.org/guides-20.11/rel_notes/release_20_11.html > > > > - Upper bound MTU: DPDK device drivers differ in how the L2 frame for a > > given MTU value is calculated e.g. i40e driver includes 2 x vlan headers > > in > > diff --git a/Documentation/topics/dpdk/phy.rst > > b/Documentation/topics/dpdk/phy.rst > > index 7ee3eacff..d21ecc915 100644 > > --- a/Documentation/topics/dpdk/phy.rst > > +++ b/Documentation/topics/dpdk/phy.rst > > @@ -218,18 +218,24 @@ If the log is not seen then the port can be detached > like > > so:: > > Hotplugging with IGB_UIO > > ~~~~~~~~~~~~~~~~~~~~~~~~ > > > > -As of DPDK 19.11, default igb_uio hotplugging behavior changes from > > +.. important:: > > + > > + As of DPDK v20.11 IGB_UIO has been deprecated and is no longer built as > > + part of the default DPDK library. Below is intended for those who wish > > + to use IGB_UIO outside of the standard DPDK build from v20.11 onwards. > > + > > +As of DPDK v19.11, default igb_uio hotplugging behavior changed from > > previous DPDK versions. > > > > -With DPDK 19.11, if no device is bound to igb_uio when OVS is launched then > > -the IOVA mode may be set to virtual addressing for DPDK. This is > > incompatible > > -for hotplugging with igb_uio. > > +From DPDK v19.11 onwards, if no device is bound to igb_uio when OVS is > > +launched then the IOVA mode may be set to virtual addressing for DPDK. > > +This is incompatible for hotplugging with igb_uio. > > > > To hotplug a port with igb_uio in this case, DPDK must be configured to use > > physical addressing for IOVA mode. For more information regarding IOVA > modes > > in DPDK please refer to the `DPDK IOVA Mode Detection`__. > > > > -__ https://doc.dpdk.org/guides- > > 19.11/prog_guide/env_abstraction_layer.html#iova-mode-detection > > +__ https://doc.dpdk.org/guides- > > 20.11/prog_guide/env_abstraction_layer.html#iova-mode-detection > > > > To configure OVS DPDK to use physical addressing for IOVA:: > > > > @@ -261,7 +267,7 @@ Representors are multi devices created on top of one > PF. > > > > For more information, refer to the `DPDK documentation`__. > > > > -__ https://doc.dpdk.org/guides- > 19.11/prog_guide/switch_representation.html > > +__ https://doc.dpdk.org/guides- > 20.11/prog_guide/switch_representation.html > > > > Prior to port representors there was a one-to-one relationship between the > > PF > > and the eth device. With port representors the relationship becomes one PF > > to > > diff --git a/Documentation/topics/dpdk/vhost-user.rst > > b/Documentation/topics/dpdk/vhost-user.rst > > index 75d3fc958..bcd51e65c 100644 > > --- a/Documentation/topics/dpdk/vhost-user.rst > > +++ b/Documentation/topics/dpdk/vhost-user.rst > > @@ -389,23 +389,7 @@ application in the VM. > > > > To begin, instantiate a guest as described in :ref:`dpdk-vhost-user` or > > :ref:`dpdk-vhost-user-client`. Once started, connect to the VM, download > > the > > -DPDK sources to VM and build DPDK:: > > - > > - $ cd /root/dpdk/ > > - $ wget https://fast.dpdk.org/rel/dpdk-19.11.2.tar.xz > > - $ tar xf dpdk-19.11.2.tar.xz > > - $ export DPDK_DIR=/root/dpdk/dpdk-stable-19.11.2 > > - $ export DPDK_TARGET=x86_64-native-linuxapp-gcc > > - $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET > > - $ cd $DPDK_DIR > > - $ make install T=$DPDK_TARGET DESTDIR=install > > - > > -Build the test-pmd application:: > > - > > - $ cd app/test-pmd > > - $ export RTE_SDK=$DPDK_DIR > > - $ export RTE_TARGET=$DPDK_TARGET > > - $ make > > +DPDK sources to VM and build DPDK as described in :ref:`dpdk-install`. > > > > Setup huge pages and DPDK devices using UIO:: > > > > @@ -555,4 +539,4 @@ shown with:: > > > > Further information can be found in the > > `DPDK documentation > > -<https://doc.dpdk.org/guides-19.11/prog_guide/vhost_lib.html>`__ > > +<https://doc.dpdk.org/guides-20.11/prog_guide/vhost_lib.html>`__ > > diff --git a/Documentation/topics/testing.rst > b/Documentation/topics/testing.rst > > index b9fa94dda..951fe9e85 100644 > > --- a/Documentation/topics/testing.rst > > +++ b/Documentation/topics/testing.rst > > @@ -353,7 +353,7 @@ All tests are skipped if no hugepages are configured. > User > > must look into the DP > > manual to figure out how to `Configure hugepages`_. > > The phy test will skip if no compatible physical device is available. > > > > -.. _Configure hugepages: https://doc.dpdk.org/guides- > > 19.11/linux_gsg/sys_reqs.html > > +.. _Configure hugepages: https://doc.dpdk.org/guides- > > 20.11/linux_gsg/sys_reqs.html > > > > All the features documented under `Unit Tests`_ are available for the DPDK > > datapath testsuite. > > diff --git a/NEWS b/NEWS > > index 7e291a180..1a39cc661 100644 > > --- a/NEWS > > +++ b/NEWS > > @@ -11,6 +11,7 @@ Post-v2.14.0 > > Use the 'cluster/set-backlog-threshold' command to change limits. > > - DPDK: > > * Removed support for vhost-user dequeue zero-copy. > > + * Add support for DPDK 20.11. > > - Userspace datapath: > > * Add the 'pmd' option to "ovs-appctl dpctl/dump-flows", which > > restricts a flow dump to a single PMD thread if set. > > diff --git a/acinclude.m4 b/acinclude.m4 > > index ddf4b71e1..2fd9aa255 100644 > > --- a/acinclude.m4 > > +++ b/acinclude.m4 > > @@ -334,8 +334,9 @@ dnl > > dnl Configure DPDK source tree > > AC_DEFUN([OVS_CHECK_DPDK], [ > > AC_ARG_WITH([dpdk], > > - [AC_HELP_STRING([--with-dpdk=/path/to/dpdk], > > - [Specify the DPDK build directory])], > > + [AC_HELP_STRING([--with-dpdk=static|shared|yes], > > + [Specify "static" or "shared" depending on > > the > > + DPDK libraries to use])], > > [have_dpdk=true]) > > > > AC_MSG_CHECKING([whether dpdk is enabled]) > > @@ -345,35 +346,25 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > > else > > AC_MSG_RESULT([yes]) > > case "$with_dpdk" in > > - yes) > > - DPDK_AUTO_DISCOVER="true" > > - PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [ > > - DPDK_INCLUDE="$DPDK_CFLAGS" > > - DPDK_LIB="$DPDK_LIBS"], [ > > - DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk" > > - DPDK_LIB="-ldpdk"]) > > - ;; > > - *) > > - DPDK_AUTO_DISCOVER="false" > > - DPDK_INCLUDE_PATH="$with_dpdk/include" > > - # If 'with_dpdk' is passed install directory, point to headers > > - # installed in $DESTDIR/$prefix/include/dpdk > > - if test -e "$DPDK_INCLUDE_PATH/rte_config.h"; then > > - DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH" > > - elif test -e "$DPDK_INCLUDE_PATH/dpdk/rte_config.h"; then > > - DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH/dpdk" > > - fi > > - DPDK_LIB_DIR="$with_dpdk/lib" > > - DPDK_LIB="-ldpdk" > > - ;; > > + "shared") > > + PKG_CHECK_MODULES([DPDK], [libdpdk], [ > > + DPDK_INCLUDE="$DPDK_CFLAGS" > > + DPDK_LIB="$DPDK_LIBS"], [ > > + DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk" > > + DPDK_LIB="-ldpdk"]) > > + ;; > > + "static" | "yes") > > + PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [ > > + DPDK_INCLUDE="$DPDK_CFLAGS" > > + DPDK_LIB="$DPDK_LIBS"], [ > > + DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk" > > + DPDK_LIB="-ldpdk"]) > > + ;; > > esac > > > > ovs_save_CFLAGS="$CFLAGS" > > ovs_save_LDFLAGS="$LDFLAGS" > > CFLAGS="$CFLAGS $DPDK_INCLUDE" > > - if test "$DPDK_AUTO_DISCOVER" = "false"; then > > - LDFLAGS="$LDFLAGS -L${DPDK_LIB_DIR}" > > - fi > > > > AC_CHECK_HEADERS([rte_config.h], [], [ > > AC_MSG_ERROR([unable to find rte_config.h in $with_dpdk]) > > @@ -422,20 +413,14 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > > [AC_MSG_RESULT([yes]) > > DPDKLIB_FOUND=true], > > [AC_MSG_RESULT([no]) > > - if test "$DPDK_AUTO_DISCOVER" = "true"; then > > - AC_MSG_ERROR(m4_normalize([ > > - Could not find DPDK library in default search path, Use > > --with-dpdk > > - to specify the DPDK library installed in non-standard > > location])) > > - else > > - AC_MSG_ERROR([Could not find DPDK libraries in $DPDK_LIB_DIR]) > > - fi > > + AC_MSG_ERROR(m4_normalize([ > > + Could not find DPDK library in default search path, update > > + PKG_CONFIG_PATH for pkg-config to find the .pc file in > > + non-standard location])) > > ]) > > > > CFLAGS="$ovs_save_CFLAGS" > > LDFLAGS="$ovs_save_LDFLAGS" > > - if test "$DPDK_AUTO_DISCOVER" = "false"; then > > - OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR" > > - fi > > OVS_CFLAGS="$OVS_CFLAGS $DPDK_INCLUDE" > > OVS_ENABLE_OPTION([-mssse3]) > > > > @@ -444,17 +429,16 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > > # This happens because the rest of the DPDK code doesn't use any > > symbol in > > # the pmd driver objects, and the drivers register themselves using an > > # __attribute__((constructor)) function. > > - # > > - # These options are specified inside a single -Wl directive to prevent > > - # autotools from reordering them. > > - # > > - # OTOH newer versions of dpdk pkg-config (generated with Meson) > > - # will already have flagged just the right set of libs with > > - # --whole-archive - in those cases do not wrap it once more. > > - case "$DPDK_LIB" in > > - *whole-archive*) DPDK_vswitchd_LDFLAGS=$DPDK_LIB;; > > - *) DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole- > > archive > > - esac > > + > > + # Wrap the DPDK libraries inside a single -Wl directive > > + # after comma separation to prevent autotools from reordering them. > > + DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_LIB"| tr -s ' ' ',' | sed > > 's/-Wl,//g') > > + # Replace -pthread with -lpthread for LD and remove the last extra > > comma. > > + DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_vswitchd_LDFLAGS"| sed 's/,$//' > | \ > > + sed 's/-pthread/-lpthread/g') > > + # Prepend "-Wl,". > > + DPDK_vswitchd_LDFLAGS="-Wl,$DPDK_vswitchd_LDFLAGS" > > + > > AC_SUBST([DPDK_vswitchd_LDFLAGS]) > > AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.]) > > fi > > diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk > > index 974ad3fe5..e96637119 100644 > > --- a/include/sparse/automake.mk > > +++ b/include/sparse/automake.mk > > @@ -11,7 +11,9 @@ noinst_HEADERS += \ > > include/sparse/netpacket/packet.h \ > > include/sparse/pthread.h \ > > include/sparse/rte_atomic.h \ > > + include/sparse/rte_mbuf.h \ > > include/sparse/rte_memcpy.h \ > > + include/sparse/rte_trace_point.h \ > > include/sparse/sys/socket.h \ > > include/sparse/sys/sysmacros.h \ > > include/sparse/sys/types.h \ > > diff --git a/include/sparse/rte_mbuf.h b/include/sparse/rte_mbuf.h > > new file mode 100644 > > index 000000000..981cdb441 > > --- /dev/null > > +++ b/include/sparse/rte_mbuf.h > > @@ -0,0 +1,29 @@ > > +/* Copyright (c) 2020 Intel, Inc. > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at: > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > > implied. > > + * See the License for the specific language governing permissions and > > + * limitations under the License. > > + */ > > + > > +#ifndef __CHECKER__ > > +#error "Use this header only with sparse. It is not a correct > > implementation." > > +#endif > > + > > +/* sparse doesn't know about gcc atomic builtins. */ > > +#ifndef __ATOMIC_ACQ_REL > > +#define __ATOMIC_ACQ_REL 0 > > +#define __ATOMIC_RELAXED 1 > > +#define __atomic_add_fetch(p, val, memorder) (*(p) = *(p) + (val)) > > +#define __atomic_store_n(p, val, memorder) (*(p) = (val)) > > +#endif > > + > > +/* Get actual <rte_mbuf.h> definitions for us to annotate and build on. */ > > +#include_next <rte_mbuf.h> > > diff --git a/include/sparse/rte_trace_point.h > b/include/sparse/rte_trace_point.h > > new file mode 100644 > > index 000000000..803923275 > > --- /dev/null > > +++ b/include/sparse/rte_trace_point.h > > @@ -0,0 +1,28 @@ > > +/* Copyright 2020, Red Hat, Inc. > > + * > > + * Licensed under the Apache License, Version 2.0 (the "License"); > > + * you may not use this file except in compliance with the License. > > + * You may obtain a copy of the License at: > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, software > > + * distributed under the License is distributed on an "AS IS" BASIS, > > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > > implied. > > + * See the License for the specific language governing permissions and > > + * limitations under the License. > > + */ > > + > > +#ifndef __CHECKER__ > > +#error "Use this header only with sparse. It is not a correct > > implementation." > > +#endif > > + > > +/* sparse doesn't know about gcc atomic builtins. */ > > +#ifndef __ATOMIC_ACQUIRE > > +#define __ATOMIC_ACQUIRE 0 > > +#define __atomic_load_n(p, memorder) *(p) > > +#endif > > + > > +/* Get actual <rte_trace_point.h> definitions for us to annotate and > > + * build on. */ > > +#include_next <rte_trace_point.h> > > diff --git a/lib/dpdk.c b/lib/dpdk.c > > index 2f235a742..319540394 100644 > > --- a/lib/dpdk.c > > +++ b/lib/dpdk.c > > @@ -443,7 +443,7 @@ dpdk_init__(const struct smap *ovs_other_config) > > > > /** > > * NOTE: This is an unsophisticated mechanism for determining the DPDK > > - * lcore for the DPDK Master. > > + * main core. > > */ > > if (auto_determine) { > > const struct ovs_numa_info_core *core; > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > > index 75dffefb8..2640a421a 100644 > > --- a/lib/netdev-dpdk.c > > +++ b/lib/netdev-dpdk.c > > @@ -26,12 +26,6 @@ > > #include <sys/socket.h> > > #include <linux/if.h> > > > > -/* Include rte_compat.h first to allow experimental API's needed for the > > - * rte_meter.h rfc4115 functions. Once they are no longer marked as > > - * experimental the #define and rte_compat.h include can be removed. > > - */ > > -#define ALLOW_EXPERIMENTAL_API > > -#include <rte_compat.h> > > #include <rte_bus_pci.h> > > #include <rte_config.h> > > #include <rte_cycles.h> > > @@ -1312,7 +1306,7 @@ static int > > vhost_common_construct(struct netdev *netdev) > > OVS_REQUIRES(dpdk_mutex) > > { > > - int socket_id = rte_lcore_to_socket_id(rte_get_master_lcore()); > > + int socket_id = rte_lcore_to_socket_id(rte_get_main_lcore()); > > struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); > > > > dev->vhost_rxq_enabled = > dpdk_rte_mzalloc(OVS_VHOST_MAX_QUEUE_NUM * > > @@ -1463,7 +1457,6 @@ netdev_dpdk_destruct(struct netdev *netdev) > > struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); > > struct rte_device *rte_dev; > > struct rte_eth_dev *eth_dev; > > - bool remove_on_close; > > > > ovs_mutex_lock(&dpdk_mutex); > > > > @@ -1475,20 +1468,15 @@ netdev_dpdk_destruct(struct netdev *netdev) > > * FIXME: avoid direct access to DPDK internal array > > rte_eth_devices. > > */ > > eth_dev = &rte_eth_devices[dev->port_id]; > > - remove_on_close = > > - eth_dev->data && > > - (eth_dev->data->dev_flags & RTE_ETH_DEV_CLOSE_REMOVE); > > rte_dev = eth_dev->device; > > > > /* Remove the eth device. */ > > rte_eth_dev_close(dev->port_id); > > > > - /* Remove this rte device and all its eth devices if flag > > - * RTE_ETH_DEV_CLOSE_REMOVE is not supported (which means > representors > > - * are not supported), or if all the eth devices belonging to the > > rte > > - * device are closed. > > + /* Remove this rte device and all its eth devices if all the eth > > + * devices belonging to the rte device are closed. > > */ > > - if (!remove_on_close || !netdev_dpdk_get_num_ports(rte_dev)) { > > + if (!netdev_dpdk_get_num_ports(rte_dev)) { > > int ret = rte_dev_remove(rte_dev); > > > > if (ret < 0) { > > -- > > 2.13.6 > > > > _______________________________________________ > > dev mailing list > > d...@openvswitch.org > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev