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 <[email protected]> --- .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; -- 2.19.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
