>From: Aaron Conole [mailto:[email protected]] >Sent: Wednesday, July 26, 2017 3:25 PM >To: Kavanagh, Mark B <[email protected]> >Cc: Weglicki, MichalX <[email protected]>; [email protected] >Subject: Re: [ovs-dev] [PATCH v4] Update relevant artifacts to add support for >DPDK 17.05.1. > >"Kavanagh, Mark B" <[email protected]> writes: > >>>From: Weglicki, MichalX >>>Sent: Wednesday, July 26, 2017 10:52 AM >>>To: Kavanagh, Mark B <[email protected]>; [email protected] >>>Subject: RE: [ovs-dev] [PATCH v4] Update relevant artifacts to add support >for >>>DPDK 17.05.1. >>> >>>Hey Mark, >>> >>>Sorry, I had some problems with rebase, and somehow I just simply forgot t >to >>>do so. Do you want me to re-apply this patch as v5? >> >> No need Michal - hopefully the maintainer will just roll it in when >> applying to master. > >If you reply with your Acked-by tag, the patchwork instance will >re-apply it and the maintainer will not have to remember.
Thanks for the tip Aaron - I wasn't aware of that! Acked-by: Mark Kavanagh <[email protected]> -Mark > >> Thanks, >> Mark >> >>> >>>> -----Original Message----- >>>> From: Kavanagh, Mark B >>>> Sent: Wednesday, July 26, 2017 10:04 AM >>>> To: Weglicki, MichalX <[email protected]>; [email protected] >>>> Subject: RE: [ovs-dev] [PATCH v4] Update relevant artifacts to add support >>>for DPDK 17.05.1. >>>> >>>> >>>> >>>> >-----Original Message----- >>>> >From: [email protected] [mailto:ovs-dev- >>>[email protected]] >>>> >On Behalf Of Michal Weglicki >>>> >Sent: Tuesday, July 25, 2017 1:35 PM >>>> >To: [email protected] >>>> >Subject: [ovs-dev] [PATCH v4] Update relevant artifacts to add support >for >>>> >DPDK 17.05.1. >>>> > >>>> >Upgrading to DPDK 17.05.1 stable release adds new >>>> >significant features relevant to OVS, including, >>>> >but not limited to: >>>> >- tun/tap PMD, >>>> >- VFIO hotplug support, >>>> >- Generic flow API. >>>> > >>>> >Following changes are applied: >>>> >- netdev-dpdk: Changes required by DPDK API modifications. >>>> >- doc: Because of DPDK API changes, backward compatibility >>>> > with previous DPDK releases will be broken, thus all >>>> > relevant documentation entries are updated. >>>> >- .travis: DPDK version change from 16.11.1 to 17.05.1. >>>> >- rhel/openvswitch-fedora.spec.in: DPDK version change >>>> > from 16.11 to 17.05.1 >>>> > >>>> >v1->v2: Patch rebase. >>>> >v2->v3: Fixed wrong formating after v2 patch rebase. >>>> >v3->v4: Minor documentation changes. >>>> > >>>> >Signed-off-by: Michal Weglicki <[email protected]> >>>> >Reviewed-by: Aaron Conole <[email protected]> >>>> >>>> >>>> Hi Michal, >>>> >>>> Is there a reason why you haven't added my acked-by to this latest patch? >>>https://mail.openvswitch.org/pipermail/ovs-dev/2017- >>>> July/334893.html >>>> >>>> Thanks, >>>> Mark >>>> >>>> >--- >>>> > .travis/linux-build.sh | 2 +- >>>> > Documentation/faq/releases.rst | 1 + >>>> > Documentation/howto/dpdk.rst | 6 +- >>>> > Documentation/intro/install/dpdk.rst | 14 +-- >>>> > Documentation/topics/dpdk/vhost-user.rst | 12 +-- >>>> > NEWS | 1 + >>>> > lib/netdev-dpdk.c | 144 +++++++++++++++++++------ >-- >>>--- >>>> >- >>>> > rhel/openvswitch-fedora.spec.in | 2 +- >>>> > tests/dpdk/ring_client.c | 6 +- >>>> > 9 files changed, 114 insertions(+), 74 deletions(-) >>>> > >>>> >diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh >>>> >index f66b534..efccdf1 100755 >>>> >--- a/.travis/linux-build.sh >>>> >+++ b/.travis/linux-build.sh >>>> >@@ -80,7 +80,7 @@ fi >>>> > >>>> > if [ "$DPDK" ]; then >>>> > if [ -z "$DPDK_VER" ]; then >>>> >- DPDK_VER="16.11.2" >>>> >+ DPDK_VER="17.05.1" >>>> > fi >>>> > install_dpdk $DPDK_VER >>>> > if [ "$CC" = "clang" ]; then >>>> >diff --git a/Documentation/faq/releases.rst >>>b/Documentation/faq/releases.rst >>>> >index 707834b..2ecc24c 100644 >>>> >--- a/Documentation/faq/releases.rst >>>> >+++ b/Documentation/faq/releases.rst >>>> >@@ -161,6 +161,7 @@ Q: What DPDK version does each Open vSwitch release >>>work >>>> >with? >>>> > 2.5.x 2.2 >>>> > 2.6.x 16.07.2 >>>> > 2.7.x 16.11.2 >>>> >+ 2.8.x 17.05.1 >>>> > ============ ======= >>>> > >>>> > Q: I get an error like this when I configure Open vSwitch: >>>> >diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst >>>> >index af01d3e..1756c8c 100644 >>>> >--- a/Documentation/howto/dpdk.rst >>>> >+++ b/Documentation/howto/dpdk.rst >>>> >@@ -528,15 +528,15 @@ described in :ref:`dpdk-testpmd`. Once compiled, >run >>>the >>>> >application:: >>>> > >>>> > When you finish testing, bind the vNICs back to kernel:: >>>> > >>>> >- $ $DPDK_DIR/tools/dpdk-devbind.py --bind=virtio-pci 0000:00:03.0 >>>> >- $ $DPDK_DIR/tools/dpdk-devbind.py --bind=virtio-pci 0000:00:04.0 >>>> >+ $ $DPDK_DIR/usertools/dpdk-devbind.py --bind=virtio-pci 0000:00:03.0 >>>> >+ $ $DPDK_DIR/usertools/dpdk-devbind.py --bind=virtio-pci 0000:00:04.0 >>>> > >>>> > .. note:: >>>> > >>>> > Valid PCI IDs must be passed in above example. The PCI IDs can be >>>retrieved >>>> > like so:: >>>> > >>>> >- $ $DPDK_DIR/tools/dpdk-devbind.py --status >>>> >+ $ $DPDK_DIR/usertools/dpdk-devbind.py --status >>>> > >>>> > More information on the dpdkvhostuser ports can be found in >>>> > :doc:`/topics/dpdk/vhost-user`. >>>> >diff --git a/Documentation/intro/install/dpdk.rst >>>> >b/Documentation/intro/install/dpdk.rst >>>> >index a05aa1a..20baa63 100644 >>>> >--- a/Documentation/intro/install/dpdk.rst >>>> >+++ b/Documentation/intro/install/dpdk.rst >>>> >@@ -40,7 +40,7 @@ Build requirements >>>> > In addition to the requirements described in :doc:`general`, building >Open >>>> > vSwitch with DPDK will require the following: >>>> > >>>> >-- DPDK 16.11 >>>> >+- DPDK 17.05.1 >>>> > >>>> > - A `DPDK supported NIC`_ >>>> > >>>> >@@ -69,9 +69,9 @@ Install DPDK >>>> > #. Download the `DPDK sources`_, extract the file and set ``DPDK_DIR``:: >>>> > >>>> > $ cd /usr/src/ >>>> >- $ wget http://fast.dpdk.org/rel/dpdk-16.11.2.tar.xz >>>> >- $ tar xf dpdk-16.11.2.tar.xz >>>> >- $ export DPDK_DIR=/usr/src/dpdk-stable-16.11.2 >>>> >+ $ wget http://fast.dpdk.org/rel/dpdk-17.05.1.tar.xz >>>> >+ $ tar xf dpdk-17.05.1.tar.xz >>>> >+ $ export DPDK_DIR=/usr/src/dpdk-stable-17.05.1 >>>> > $ cd $DPDK_DIR >>>> > >>>> > #. (Optional) Configure DPDK as a shared library >>>> >@@ -187,8 +187,8 @@ to the VFIO driver:: >>>> > $ modprobe vfio-pci >>>> > $ /usr/bin/chmod a+x /dev/vfio >>>> > $ /usr/bin/chmod 0666 /dev/vfio/* >>>> >- $ $DPDK_DIR/tools/dpdk-devbind.py --bind=vfio-pci eth1 >>>> >- $ $DPDK_DIR/tools/dpdk-devbind.py --status >>>> >+ $ $DPDK_DIR/usertools/dpdk-devbind.py --bind=vfio-pci eth1 >>>> >+ $ $DPDK_DIR/usertools/dpdk-devbind.py --status >>>> > >>>> > Setup OVS >>>> > ~~~~~~~~~ >>>> >@@ -569,7 +569,7 @@ Limitations >>>> > The latest list of validated firmware versions can be found in the >`DPDK >>>> > release notes`_. >>>> > >>>> >-.. _DPDK release notes: >>>> >http://dpdk.org/doc/guides/rel_notes/release_16_11.html >>>> >+.. _DPDK release notes: >>>> >http://dpdk.org/doc/guides/rel_notes/release_17_05.html >>>> > >>>> > Reporting Bugs >>>> > -------------- >>>> >diff --git a/Documentation/topics/dpdk/vhost-user.rst >>>> >b/Documentation/topics/dpdk/vhost-user.rst >>>> >index e76da5f..a3d5de3 100644 >>>> >--- a/Documentation/topics/dpdk/vhost-user.rst >>>> >+++ b/Documentation/topics/dpdk/vhost-user.rst >>>> >@@ -292,9 +292,9 @@ To begin, instantiate a guest as described in >>>:ref:`dpdk- >>>> >vhost-user` or >>>> > DPDK sources to VM and build DPDK:: >>>> > >>>> > $ cd /root/dpdk/ >>>> >- $ wget http://fast.dpdk.org/rel/dpdk-16.11.2.tar.xz >>>> >- $ tar xf dpdk-16.11.2.tar.xz >>>> >- $ export DPDK_DIR=/root/dpdk/dpdk-stable-16.11.2 >>>> >+ $ wget http://fast.dpdk.org/rel/dpdk-17.05.1.tar.xz >>>> >+ $ tar xf dpdk-17.05.1.tar.xz >>>> >+ $ export DPDK_DIR=/root/dpdk/dpdk-stable-17.05.1 >>>> > $ export DPDK_TARGET=x86_64-native-linuxapp-gcc >>>> > $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET >>>> > $ cd $DPDK_DIR >>>> >@@ -314,8 +314,8 @@ Setup huge pages and DPDK devices using UIO:: >>>> > $ mount -t hugetlbfs hugetlbfs /dev/hugepages # only if not already >>>> >mounted >>>> > $ modprobe uio >>>> > $ insmod $DPDK_BUILD/kmod/igb_uio.ko >>>> >- $ $DPDK_DIR/tools/dpdk-devbind.py --status >>>> >- $ $DPDK_DIR/tools/dpdk-devbind.py -b igb_uio 00:03.0 00:04.0 >>>> >+ $ $DPDK_DIR/usertools/dpdk-devbind.py --status >>>> >+ $ $DPDK_DIR/usertools/dpdk-devbind.py -b igb_uio 00:03.0 00:04.0 >>>> > >>>> > .. note:: >>>> > >>>> >@@ -378,7 +378,7 @@ Sample XML >>>> > </disk> >>>> > <disk type='dir' device='disk'> >>>> > <driver name='qemu' type='fat'/> >>>> >- <source dir='/usr/src/dpdk-stable-16.11.2'/> >>>> >+ <source dir='/usr/src/dpdk-stable-17.05.1'/> >>>> > <target dev='vdb' bus='virtio'/> >>>> > <readonly/> >>>> > </disk> >>>> >diff --git a/NEWS b/NEWS >>>> >index d61fc5f..3f58e8b 100644 >>>> >--- a/NEWS >>>> >+++ b/NEWS >>>> >@@ -21,6 +21,7 @@ Post-v2.7.0 >>>> > still can be configured via extra arguments for DPDK EAL. >>>> > * dpdkvhostuser ports are marked as deprecated. They will be >removed >>>> > in an upcoming release. >>>> >+ * Support for DPDK v17.05.1. >>>> > - IPFIX now provides additional counters: >>>> > * Total counters since metering process startup. >>>> > * Per-flow TCP flag counters. >>>> >diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c >>>> >index ea17b97..5e767e1 100644 >>>> >--- a/lib/netdev-dpdk.c >>>> >+++ b/lib/netdev-dpdk.c >>>> >@@ -22,6 +22,9 @@ >>>> > #include <stdlib.h> >>>> > #include <errno.h> >>>> > #include <unistd.h> >>>> >+#include <linux/virtio_net.h> >>>> >+#include <sys/socket.h> >>>> >+#include <linux/if.h> >>>> > >>>> > #include <rte_config.h> >>>> > #include <rte_cycles.h> >>>> >@@ -31,7 +34,7 @@ >>>> > #include <rte_malloc.h> >>>> > #include <rte_mbuf.h> >>>> > #include <rte_meter.h> >>>> >-#include <rte_virtio_net.h> >>>> >+#include <rte_vhost.h> >>>> > >>>> > #include "dirs.h" >>>> > #include "dp-packet.h" >>>> >@@ -56,6 +59,8 @@ >>>> > #include "timeval.h" >>>> > #include "unixctl.h" >>>> > >>>> >+enum {VIRTIO_RXQ, VIRTIO_TXQ, VIRTIO_QNUM}; >>>> >+ >>>> > VLOG_DEFINE_THIS_MODULE(netdev_dpdk); >>>> > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); >>>> > >>>> >@@ -171,6 +176,21 @@ static const struct rte_eth_conf port_conf = { >>>> > }, >>>> > }; >>>> > >>>> >+/* >>>> >+ * These callbacks allow virtio-net devices to be added to vhost ports >>>when >>>> >+ * configuration has been fully completed. >>>> >+ */ >>>> >+static int new_device(int vid); >>>> >+static void destroy_device(int vid); >>>> >+static int vring_state_changed(int vid, uint16_t queue_id, int enable); >>>> >+static const struct vhost_device_ops virtio_net_device_ops = >>>> >+{ >>>> >+ .new_device = new_device, >>>> >+ .destroy_device = destroy_device, >>>> >+ .vring_state_changed = vring_state_changed, >>>> >+ .features_changed = NULL >>>> >+}; >>>> >+ >>>> > enum { DPDK_RING_SIZE = 256 }; >>>> > BUILD_ASSERT_DECL(IS_POW2(DPDK_RING_SIZE)); >>>> > enum { DRAIN_TSC = 200000ULL }; >>>> >@@ -412,8 +432,8 @@ struct netdev_rxq_dpdk { >>>> > dpdk_port_t port_id; >>>> > }; >>>> > >>>> >-static int netdev_dpdk_class_init(void); >>>> >-static int netdev_dpdk_vhost_class_init(void); >>>> >+static void netdev_dpdk_destruct(struct netdev *netdev); >>>> >+static void netdev_dpdk_vhost_destruct(struct netdev *netdev); >>>> > >>>> > int netdev_dpdk_get_vid(const struct netdev_dpdk *dev); >>>> > >>>> >@@ -423,8 +443,8 @@ netdev_dpdk_get_ingress_policer(const struct >>>netdev_dpdk >>>> >*dev); >>>> > static bool >>>> > is_dpdk_class(const struct netdev_class *class) >>>> > { >>>> >- return class->init == netdev_dpdk_class_init >>>> >- || class->init == netdev_dpdk_vhost_class_init; >>>> >+ return class->destruct == netdev_dpdk_destruct >>>> >+ || class->destruct == netdev_dpdk_vhost_destruct; >>>> > } >>>> > >>>> > /* DPDK NIC drivers allocate RX buffers at a particular granularity, >>>> >typically >>>> >@@ -948,13 +968,45 @@ netdev_dpdk_vhost_construct(struct netdev *netdev) >>>> > if (err) { >>>> > VLOG_ERR("vhost-user socket device setup failure for socket >%s\n", >>>> > dev->vhost_id); >>>> >+ goto out; >>>> > } else { >>>> > fatal_signal_add_file_to_unlink(dev->vhost_id); >>>> > VLOG_INFO("Socket %s created for vhost-user port %s\n", >>>> > dev->vhost_id, name); >>>> > } >>>> >+ >>>> >+ err = rte_vhost_driver_callback_register(dev->vhost_id, >>>> >+ &virtio_net_device_ops); >>>> >+ if (err) { >>>> >+ VLOG_ERR("rte_vhost_driver_callback_register failed for vhost >user >>>" >>>> >+ "port: %s\n", name); >>>> >+ goto out; >>>> >+ } >>>> >+ >>>> >+ err = rte_vhost_driver_disable_features(dev->vhost_id, >>>> >+ 1ULL << VIRTIO_NET_F_HOST_TSO4 >>>> >+ | 1ULL << VIRTIO_NET_F_HOST_TSO6 >>>> >+ | 1ULL << VIRTIO_NET_F_CSUM); >>>> >+ if (err) { >>>> >+ VLOG_ERR("rte_vhost_driver_disable_features failed for vhost >user >>>" >>>> >+ "port: %s\n", name); >>>> >+ goto out; >>>> >+ } >>>> >+ >>>> >+ err = rte_vhost_driver_start(dev->vhost_id); >>>> >+ if (err) { >>>> >+ VLOG_ERR("rte_vhost_driver_start failed for vhost user " >>>> >+ "port: %s\n", name); >>>> >+ goto out; >>>> >+ } >>>> >+ >>>> > err = vhost_common_construct(netdev); >>>> >+ if (err) { >>>> >+ VLOG_ERR("vhost_common_construct failed for vhost user " >>>> >+ "port: %s\n", name); >>>> >+ } >>>> > >>>> >+out: >>>> > ovs_mutex_unlock(&dpdk_mutex); >>>> > VLOG_WARN_ONCE("dpdkvhostuser ports are considered deprecated; " >>>> > "please migrate to dpdkvhostuserclient ports."); >>>> >@@ -968,6 +1020,10 @@ netdev_dpdk_vhost_client_construct(struct netdev >>>> >*netdev) >>>> > >>>> > ovs_mutex_lock(&dpdk_mutex); >>>> > err = vhost_common_construct(netdev); >>>> >+ if (err) { >>>> >+ VLOG_ERR("vhost_common_construct failed for vhost user client" >>>> >+ "port: %s\n", netdev->name); >>>> >+ } >>>> > ovs_mutex_unlock(&dpdk_mutex); >>>> > return err; >>>> > } >>>> >@@ -2456,12 +2512,9 @@ static void >>>> > set_irq_status(int vid) >>>> > { >>>> > uint32_t i; >>>> >- uint64_t idx; >>>> > >>>> >- for (i = 0; i < rte_vhost_get_queue_num(vid); i++) { >>>> >- idx = i * VIRTIO_QNUM; >>>> >- rte_vhost_enable_guest_notification(vid, idx + VIRTIO_RXQ, 0); >>>> >- rte_vhost_enable_guest_notification(vid, idx + VIRTIO_TXQ, 0); >>>> >+ for (i = 0; i < rte_vhost_get_vring_num(vid); i++) { >>>> >+ rte_vhost_enable_guest_notification(vid, i, 0); >>>> > } >>>> > } >>>> > >>>> >@@ -2524,7 +2577,7 @@ new_device(int vid) >>>> > LIST_FOR_EACH(dev, list_node, &dpdk_list) { >>>> > ovs_mutex_lock(&dev->mutex); >>>> > if (strncmp(ifname, dev->vhost_id, IF_NAME_SZ) == 0) { >>>> >- uint32_t qp_num = rte_vhost_get_queue_num(vid); >>>> >+ uint32_t qp_num = rte_vhost_get_vring_num(vid)/VIRTIO_QNUM; >>>> > >>>> > /* Get NUMA information */ >>>> > newnode = rte_vhost_get_numa_node(vid); >>>> >@@ -2691,27 +2744,6 @@ netdev_dpdk_get_ingress_policer(const struct >>>> >netdev_dpdk *dev) >>>> > return ovsrcu_get(struct ingress_policer *, &dev->ingress_policer); >>>> > } >>>> > >>>> >-/* >>>> >- * These callbacks allow virtio-net devices to be added to vhost ports >>>when >>>> >- * configuration has been fully complete. >>>> >- */ >>>> >-static const struct virtio_net_device_ops virtio_net_device_ops = >>>> >-{ >>>> >- .new_device = new_device, >>>> >- .destroy_device = destroy_device, >>>> >- .vring_state_changed = vring_state_changed >>>> >-}; >>>> >- >>>> >-static void * >>>> >-start_vhost_loop(void *dummy OVS_UNUSED) >>>> >-{ >>>> >- pthread_detach(pthread_self()); >>>> >- /* Put the vhost thread into quiescent state. */ >>>> >- ovsrcu_quiesce_start(); >>>> >- rte_vhost_driver_session_start(); >>>> >- return NULL; >>>> >-} >>>> >- >>>> > static int >>>> > netdev_dpdk_class_init(void) >>>> > { >>>> >@@ -2731,25 +2763,6 @@ netdev_dpdk_class_init(void) >>>> > return 0; >>>> > } >>>> > >>>> >-static int >>>> >-netdev_dpdk_vhost_class_init(void) >>>> >-{ >>>> >- static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER; >>>> >- >>>> >- /* This function can be called for different classes. The >>>initialization >>>> >- * needs to be done only once */ >>>> >- if (ovsthread_once_start(&once)) { >>>> >- rte_vhost_driver_callback_register(&virtio_net_device_ops); >>>> >- rte_vhost_feature_disable(1ULL << VIRTIO_NET_F_HOST_TSO4 >>>> >- | 1ULL << VIRTIO_NET_F_HOST_TSO6 >>>> >- | 1ULL << VIRTIO_NET_F_CSUM); >>>> >- ovs_thread_create("vhost_thread", start_vhost_loop, NULL); >>>> >- >>>> >- ovsthread_once_done(&once); >>>> >- } >>>> >- >>>> >- return 0; >>>> >-} >>>> > >>>> > /* Client Rings */ >>>> > >>>> >@@ -3204,6 +3217,31 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev >>>> >*netdev) >>>> > "using client socket '%s'", >>>> > dev->up.name, dev->vhost_id); >>>> > } >>>> >+ >>>> >+ err = rte_vhost_driver_callback_register(dev->vhost_id, >>>> >+ >&virtio_net_device_ops); >>>> >+ if (err) { >>>> >+ VLOG_ERR("rte_vhost_driver_callback_register failed for " >>>> >+ "vhost user client port: %s\n", dev->up.name); >>>> >+ goto unlock; >>>> >+ } >>>> >+ >>>> >+ err = rte_vhost_driver_disable_features(dev->vhost_id, >>>> >+ 1ULL << VIRTIO_NET_F_HOST_TSO4 >>>> >+ | 1ULL << VIRTIO_NET_F_HOST_TSO6 >>>> >+ | 1ULL << VIRTIO_NET_F_CSUM); >>>> >+ if (err) { >>>> >+ VLOG_ERR("rte_vhost_driver_disable_features failed for vhost >>>user >>>> >" >>>> >+ "client port: %s\n", dev->up.name); >>>> >+ goto unlock; >>>> >+ } >>>> >+ >>>> >+ err = rte_vhost_driver_start(dev->vhost_id); >>>> >+ if (err) { >>>> >+ VLOG_ERR("rte_vhost_driver_start failed for vhost user " >>>> >+ "client port: %s\n", dev->up.name); >>>> >+ goto unlock; >>>> >+ } >>>> > } >>>> > >>>> > err = dpdk_vhost_reconfigure_helper(dev); >>>> >@@ -3324,7 +3362,7 @@ static const struct netdev_class dpdk_ring_class = >>>> > static const struct netdev_class dpdk_vhost_class = >>>> > NETDEV_DPDK_CLASS( >>>> > "dpdkvhostuser", >>>> >- netdev_dpdk_vhost_class_init, >>>> >+ NULL, >>>> > netdev_dpdk_vhost_construct, >>>> > netdev_dpdk_vhost_destruct, >>>> > NULL, >>>> >@@ -3339,7 +3377,7 @@ static const struct netdev_class dpdk_vhost_class = >>>> > static const struct netdev_class dpdk_vhost_client_class = >>>> > NETDEV_DPDK_CLASS( >>>> > "dpdkvhostuserclient", >>>> >- netdev_dpdk_vhost_class_init, >>>> >+ NULL, >>>> > netdev_dpdk_vhost_client_construct, >>>> > netdev_dpdk_vhost_destruct, >>>> > netdev_dpdk_vhost_client_set_config, >>>> >diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch- >>>fedora.spec.in >>>> >index 3a045d3..2bb7102 100644 >>>> >--- a/rhel/openvswitch-fedora.spec.in >>>> >+++ b/rhel/openvswitch-fedora.spec.in >>>> >@@ -84,7 +84,7 @@ BuildRequires: libcap-ng libcap-ng-devel >>>> > %endif >>>> > %if %{with dpdk} >>>> > BuildRequires: libpcap-devel numactl-devel >>>> >-BuildRequires: dpdk-devel >= 16.11 >>>> >+BuildRequires: dpdk-devel >= 17.05.1 >>>> > Provides: %{name}-dpdk = %{version}-%{release} >>>> > %endif >>>> > >>>> >diff --git a/tests/dpdk/ring_client.c b/tests/dpdk/ring_client.c >>>> >index b153713..8cc3fb5 100644 >>>> >--- a/tests/dpdk/ring_client.c >>>> >+++ b/tests/dpdk/ring_client.c >>>> >@@ -185,15 +185,15 @@ main(int argc, char *argv[]) >>>> > /* Try dequeuing max possible packets first, if that fails, get >>>the >>>> > * most we can. Loop body should only execute once, maximum. >>>> > */ >>>> >- while (unlikely(rte_ring_dequeue_bulk(rx_ring, pkts, rx_pkts) != >>>0) >>>> >&& >>>> >- rx_pkts > 0) { >>>> >+ while (unlikely(rte_ring_dequeue_bulk(rx_ring, pkts, >>>> >+ rx_pkts, NULL) != 0) && rx_pkts > 0) { >>>> > rx_pkts = (uint16_t)RTE_MIN(rte_ring_count(rx_ring), >>>> >PKT_READ_SIZE); >>>> > } >>>> > >>>> > if (rx_pkts > 0) { >>>> > /* blocking enqueue */ >>>> > do { >>>> >- rslt = rte_ring_enqueue_bulk(tx_ring, pkts, rx_pkts); >>>> >+ rslt = rte_ring_enqueue_bulk(tx_ring, pkts, rx_pkts, >>>NULL); >>>> > } while (rslt == -ENOBUFS); >>>> > } >>>> > } >>>> >-- >>>> >1.8.3.1 >>>> > >>>> >_______________________________________________ >>>> >dev mailing list >>>> >[email protected] >>>> >https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> _______________________________________________ >> dev mailing list >> [email protected] >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
