>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

Reply via email to