- if (vsocket->dequeue_zero_copy) {
- if (vsocket->extbuf) {
- RTE_LOG(ERR, VHOST_CONFIG,
- "error: zero copy is incompatible with external buffers\n");
- ret = -1;
- goto out_mutex;
- }
- if (vsocket->linearbuf) {
- RTE_LOG(ERR, VHOST_CONFIG,
- "error: zero copy is incompatible with linear buffers\n");
- ret = -1;
- goto out_mutex;
- }
- vsocket->supported_features &= ~(1ULL << VIRTIO_F_IN_ORDER);
- vsocket->features &= ~(1ULL << VIRTIO_F_IN_ORDER);
-
- RTE_LOG(INFO, VHOST_CONFIG,
- "Dequeue zero copy requested, disabling postcopy support\n");
- vsocket->protocol_features &=
- ~(1ULL << VHOST_USER_PROTOCOL_F_PAGEFAULT);
+ if (vsocket->linearbuf && !vsocket->extbuf) {
+ uint64_t seg_offload_features =
+ (1ULL << VIRTIO_NET_F_HOST_TSO4) |
+ (1ULL << VIRTIO_NET_F_HOST_TSO6) |
+ (1ULL << VIRTIO_NET_F_HOST_UFO);
+
+ VHOST_LOG_CONFIG(INFO,
+ "Linear buffers requested without external buffers, "
+ "disabling host segmentation offloading support\n");
+ vsocket->supported_features &= ~seg_offload_features;
+ vsocket->features &= ~seg_offload_features;