diff mbox series

[ovs-dev,v6,dpdk-latest,1/1] dpdk: Update to use DPDK 18.11.

Message ID 20181129160848.28710-2-ktraynor@redhat.com
State Superseded
Delegated to: Ian Stokes
Headers show
Series Update to DPDK 18.11. | expand

Commit Message

Kevin Traynor Nov. 29, 2018, 4:08 p.m. UTC
DEV_RX_OFFLOAD_CRC_STRIP has been removed from
DPDK 18.11. DEV_RX_OFFLOAD_KEEP_CRC can now be
used to keep the CRC. Use the correct flag and
check it is supported.

rte_eth_dev_attach/detach have been removed from
DPDK 18.11. Replace them with rte_dev_probe/remove.

Update docs and travis to use DPDK18.11.

Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
---
 .travis/linux-build.sh                   |  8 ++++----
 Documentation/intro/install/dpdk.rst     | 11 ++++++-----
 Documentation/topics/dpdk/ring.rst       |  2 +-
 Documentation/topics/dpdk/vhost-user.rst |  8 ++++----
 NEWS                                     |  1 +
 lib/netdev-dpdk.c                        | 24 +++++++++++++-----------
 6 files changed, 29 insertions(+), 25 deletions(-)
diff mbox series

Patch

diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
index 4c9e95201..5f4d838a9 100755
--- a/.travis/linux-build.sh
+++ b/.travis/linux-build.sh
@@ -57,7 +57,7 @@  function install_dpdk()
         git checkout tags/v$1
     else
-        wget http://fast.dpdk.org/rel/dpdk-$1.tar.gz
-        tar xzvf dpdk-$1.tar.gz > /dev/null
-        DIR_NAME=$(tar -tf dpdk-$1.tar.gz | head -1 | cut -f1 -d"/")
+        wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
+        tar xvf dpdk-$1.tar.xz > /dev/null
+        DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
         if [ $DIR_NAME != "dpdk-$1"  ]; then mv $DIR_NAME dpdk-$1; fi
         cd dpdk-$1
@@ -84,5 +84,5 @@  fi
 if [ "$DPDK" ]; then
     if [ -z "$DPDK_VER" ]; then
-        DPDK_VER="18.08"
+        DPDK_VER="18.11"
     fi
     install_dpdk $DPDK_VER
diff --git a/Documentation/intro/install/dpdk.rst b/Documentation/intro/install/dpdk.rst
index bab3560e7..61307cb7c 100644
--- a/Documentation/intro/install/dpdk.rst
+++ b/Documentation/intro/install/dpdk.rst
@@ -43,5 +43,5 @@  In addition to the requirements described in :doc:`general`, building Open
 vSwitch with DPDK will require the following:
 
-- DPDK 18.08.0
+- DPDK 18.11
 
 - A `DPDK supported NIC`_
@@ -72,7 +72,7 @@  Install DPDK
 
        $ cd /usr/src/
-       $ wget http://fast.dpdk.org/rel/dpdk-18.08.tar.xz
-       $ tar xf dpdk-18.08.tar.xz
-       $ export DPDK_DIR=/usr/src/dpdk-stable-18.08
+       $ wget http://fast.dpdk.org/rel/dpdk-18.11.tar.xz
+       $ tar xf dpdk-18.11.tar.xz
+       $ export DPDK_DIR=/usr/src/dpdk-18.11
        $ cd $DPDK_DIR
 
@@ -673,5 +673,6 @@  Limitations
   release notes`_.
 
-.. _DPDK release notes: http://dpdk.org/doc/guides/rel_notes/release_18_08.html
+.. _DPDK release notes:
+   https://doc.dpdk.org/guides/rel_notes/release_18_11.html
 
 - Upper bound MTU: DPDK device drivers differ in how the L2 frame for a
diff --git a/Documentation/topics/dpdk/ring.rst b/Documentation/topics/dpdk/ring.rst
index 9ef1dc3a5..5e8c2a7ba 100644
--- a/Documentation/topics/dpdk/ring.rst
+++ b/Documentation/topics/dpdk/ring.rst
@@ -83,3 +83,3 @@  DPDK. However, this functionality was removed because:
   guests
 
-.. _DPDK documentation: https://dpdk.readthedocs.io/en/v17.11/prog_guide/ring_lib.html
+.. _DPDK documentation: https://doc.dpdk.org/guides/prog_guide/ring_lib.html
diff --git a/Documentation/topics/dpdk/vhost-user.rst b/Documentation/topics/dpdk/vhost-user.rst
index 062605ced..6067583bf 100644
--- a/Documentation/topics/dpdk/vhost-user.rst
+++ b/Documentation/topics/dpdk/vhost-user.rst
@@ -321,7 +321,7 @@  DPDK sources to VM and build DPDK::
 
     $ cd /root/dpdk/
-    $ wget http://fast.dpdk.org/rel/dpdk-18.08.tar.xz
-    $ tar xf dpdk-18.08.tar.xz
-    $ export DPDK_DIR=/root/dpdk/dpdk-stable-18.08
+    $ wget http://fast.dpdk.org/rel/dpdk-18.11.tar.xz
+    $ tar xf dpdk-18.11.tar.xz
+    $ export DPDK_DIR=/root/dpdk/dpdk-18.11
     $ export DPDK_TARGET=x86_64-native-linuxapp-gcc
     $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
@@ -503,3 +503,3 @@  Because of this limitation, this feature is considered 'experimental'.
 Further information can be found in the
 `DPDK documentation
-<http://dpdk.readthedocs.io/en/v17.11/prog_guide/vhost_lib.html>`__
+<https://doc.dpdk.org/guides/prog_guide/vhost_lib.html>`__
diff --git a/NEWS b/NEWS
index 02402d1a4..358c9b97e 100644
--- a/NEWS
+++ b/NEWS
@@ -13,4 +13,5 @@  Post-v2.10.0
      * Add option for simple round-robin based Rxq to PMD assignment.
        It can be set with pmd-rxq-assign.
+     * Add support for DPDK 18.11
    - Add 'symmetric_l3' hash function.
    - OVS now honors 'updelay' and 'downdelay' for bonds with LACP configured.
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index db803ea5c..6b8e05e4f 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -930,6 +930,7 @@  dpdk_eth_dev_port_config(struct netdev_dpdk *dev, int n_rxq, int n_txq)
     }
 
-    if (dev->hw_ol_features & NETDEV_RX_HW_CRC_STRIP) {
-        conf.rxmode.offloads |= DEV_RX_OFFLOAD_CRC_STRIP;
+    if (!(dev->hw_ol_features & NETDEV_RX_HW_CRC_STRIP)
+        && info.rx_offload_capa & DEV_RX_OFFLOAD_KEEP_CRC) {
+        conf.rxmode.offloads |= DEV_RX_OFFLOAD_KEEP_CRC;
     }
 
@@ -1351,5 +1352,5 @@  netdev_dpdk_destruct(struct netdev *netdev)
 {
     struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
-    char devname[RTE_ETH_NAME_MAX_LEN];
+    struct rte_eth_dev_info dev_info;
 
     ovs_mutex_lock(&dpdk_mutex);
@@ -1360,8 +1361,9 @@  netdev_dpdk_destruct(struct netdev *netdev)
     if (dev->attached) {
         rte_eth_dev_close(dev->port_id);
-        if (rte_eth_dev_detach(dev->port_id, devname) < 0) {
+        rte_eth_dev_info_get(dev->port_id, &dev_info);
+        if (dev_info.device && !rte_dev_remove(dev_info.device)) {
+            VLOG_INFO("Device '%s' has been detached", dev->devargs);
+        } else {
             VLOG_ERR("Device '%s' can not be detached", dev->devargs);
-        } else {
-            VLOG_INFO("Device '%s' has been detached", devname);
         }
     }
@@ -1653,5 +1655,6 @@  netdev_dpdk_process_devargs(struct netdev_dpdk *dev,
                 || !rte_eth_dev_is_valid_port(new_port_id)) {
             /* Device not found in DPDK, attempt to attach it */
-            if (!rte_eth_dev_attach(devargs, &new_port_id)) {
+            if (!rte_dev_probe(devargs)
+                && !rte_eth_dev_get_port_by_name(name, &new_port_id)) {
                 /* Attach successful */
                 dev->attached = true;
@@ -3229,9 +3232,8 @@  netdev_dpdk_detach(struct unixctl_conn *conn, int argc OVS_UNUSED,
                    const char *argv[], void *aux OVS_UNUSED)
 {
-    int ret;
     char *response;
     dpdk_port_t port_id;
-    char devname[RTE_ETH_NAME_MAX_LEN];
     struct netdev_dpdk *dev;
+    struct rte_eth_dev_info dev_info;
 
     ovs_mutex_lock(&dpdk_mutex);
@@ -3252,6 +3254,6 @@  netdev_dpdk_detach(struct unixctl_conn *conn, int argc OVS_UNUSED,
     rte_eth_dev_close(port_id);
 
-    ret = rte_eth_dev_detach(port_id, devname);
-    if (ret < 0) {
+    rte_eth_dev_info_get(port_id, &dev_info);
+    if (!dev_info.device || rte_dev_remove(dev_info.device)) {
         response = xasprintf("Device '%s' can not be detached", argv[1]);
         goto error;