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 |
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 --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;
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(-)