> -----Original Message----- > From: [email protected] [mailto:ovs-dev- > [email protected]] On Behalf Of Kavanagh, Mark B > Sent: Wednesday, July 26, 2017 4:03 PM > To: Aaron Conole <[email protected]> > Cc: [email protected] > Subject: Re: [ovs-dev] [PATCH v4] Update relevant artifacts to add support > for DPDK 17.05.1. > > >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
Adding tested by tag. Tested-by: Ian Stokes <[email protected]> > > > > >> 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 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
