On 2/10/20 8:18 PM, Flavio Leitner wrote:
> Disable ECN and UFO since this is not supported yet. Also, disable
> all other features when userspace_tso is not enabled.
Disabling UFO saves us from receiving of a big unfragmented
UDP packets, but UDP packets will still have bad checksums
and will be dropped by the kernel on receive side.
So, this is only part of a fix.
>
> Fixes: 29cf9c1b3b9c ("userspace: Add TCP Segmentation Offload support")
> Signed-off-by: Flavio Leitner <[email protected]>
> ---
> lib/netdev-dpdk.c | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
>
> This should go to branch-2.13 if passes the review.
>
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 6187129c0..b3983b312 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -5186,6 +5186,7 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev
> *netdev)
> struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
> int err;
> uint64_t vhost_flags = 0;
> + uint64_t vhost_unsup_flags;
> bool zc_enabled;
>
> ovs_mutex_lock(&dev->mutex);
> @@ -5252,16 +5253,22 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev
> *netdev)
> netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_TSO;
> netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_CKSUM;
> netdev->ol_flags |= NETDEV_TX_OFFLOAD_IPV4_CKSUM;
> + vhost_unsup_flags = 1ULL << VIRTIO_NET_F_HOST_ECN
> + | 1ULL << VIRTIO_NET_F_HOST_UFO;
> } else {
> - 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;
> - }
> + vhost_unsup_flags = 1ULL << VIRTIO_NET_F_CSUM
> + | 1ULL << VIRTIO_NET_F_HOST_UFO
> + | 1ULL << VIRTIO_NET_F_HOST_TSO4
> + | 1ULL << VIRTIO_NET_F_HOST_TSO6
> + | 1ULL << VIRTIO_NET_F_HOST_ECN;
All above features depends on VIRTIO_NET_F_CSUM, so, I think, we only
need to disable this one.
> + }
> +
> + err = rte_vhost_driver_disable_features(dev->vhost_id,
> + vhost_unsup_flags);
> + 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);
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev