diff mbox series

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

Message ID 20181129163745.29817-2-ktraynor@redhat.com
State Accepted
Delegated to: Ian Stokes
Headers show
Series [ovs-dev,v7,dpdk-latest,1/1] dpdk: Update to use DPDK 18.11. | expand

Commit Message

Kevin Traynor Nov. 29, 2018, 4:37 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       |  3 ++-
 Documentation/topics/dpdk/vhost-user.rst |  8 ++++----
 NEWS                                     |  1 +
 lib/netdev-dpdk.c                        | 24 +++++++++++++-----------
 6 files changed, 30 insertions(+), 25 deletions(-)

Comments

Ilya Maximets Nov. 30, 2018, 2:01 p.m. UTC | #1
On 29.11.2018 19:37, Kevin Traynor wrote:
> 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>
> ---

Works fine for me.

Acked-by: Ilya Maximets <i.maximets@samsung.com>

>  .travis/linux-build.sh                   |  8 ++++----
>  Documentation/intro/install/dpdk.rst     | 11 ++++++-----
>  Documentation/topics/dpdk/ring.rst       |  3 ++-
>  Documentation/topics/dpdk/vhost-user.rst |  8 ++++----
>  NEWS                                     |  1 +
>  lib/netdev-dpdk.c                        | 24 +++++++++++++-----------
>  6 files changed, 30 insertions(+), 25 deletions(-)
> 
> 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..e48b44ce8 100644
> --- a/Documentation/topics/dpdk/ring.rst
> +++ b/Documentation/topics/dpdk/ring.rst
> @@ -83,3 +83,4 @@ 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-18.11/prog_guide/ring_lib.html
> diff --git a/Documentation/topics/dpdk/vhost-user.rst b/Documentation/topics/dpdk/vhost-user.rst
> index 062605ced..993797de5 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-18.11/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;
>
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..e48b44ce8 100644
--- a/Documentation/topics/dpdk/ring.rst
+++ b/Documentation/topics/dpdk/ring.rst
@@ -83,3 +83,4 @@  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-18.11/prog_guide/ring_lib.html
diff --git a/Documentation/topics/dpdk/vhost-user.rst b/Documentation/topics/dpdk/vhost-user.rst
index 062605ced..993797de5 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-18.11/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;