vhost: fix net header settings in vhost datapath
Checks
Commit Message
In vhost sync batch enqueue, the "num_buffers" of
virtio net header is not be set, but it should be
set to 1 if the mrg_rxbuf feature is turned on,
This patch fix the issue.
Fixes: ef861692c398 ("vhost: add packed ring batch enqueue")
Cc: stable@dpdk.org
Signed-off-by: Wenwu Ma <wenwux.ma@intel.com>
---
lib/vhost/virtio_net.c | 6 ++++++
1 file changed, 6 insertions(+)
Comments
> -----Original Message-----
> From: Wenwu Ma <wenwux.ma@intel.com>
> Sent: Wednesday, January 4, 2023 10:40 AM
> To: dev@dpdk.org
> Cc: Ma, WenwuX <wenwux.ma@intel.com>; stable@dpdk.org
> Subject: [PATCH] vhost: fix net header settings in vhost datapath
>
> In vhost sync batch enqueue, the "num_buffers" of virtio net header is not
> be set, but it should be set to 1 if the mrg_rxbuf feature is turned on, This
> patch fix the issue.
>
> Fixes: ef861692c398 ("vhost: add packed ring batch enqueue")
> Cc: stable@dpdk.org
>
> Signed-off-by: Wenwu Ma <wenwux.ma@intel.com>
> ---
Tested-by: Wei Ling <weix.ling@intel.com>
Hi Wenwu,
> -----Original Message-----
> From: Wenwu Ma <wenwux.ma@intel.com>
> Sent: Wednesday, January 4, 2023 10:40 AM
> To: dev@dpdk.org
> Cc: Ma, WenwuX <wenwux.ma@intel.com>; stable@dpdk.org
> Subject: [PATCH] vhost: fix net header settings in vhost datapath
>
> In vhost sync batch enqueue, the "num_buffers" of virtio net header is not
> be set, but it should be set to 1 if the mrg_rxbuf feature is turned on, This
> patch fix the issue.
>
> Fixes: ef861692c398 ("vhost: add packed ring batch enqueue")
> Cc: stable@dpdk.org
>
> Signed-off-by: Wenwu Ma <wenwux.ma@intel.com>
> ---
> lib/vhost/virtio_net.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c index
> cf796183a0..61d9052a57 100644
> --- a/lib/vhost/virtio_net.c
> +++ b/lib/vhost/virtio_net.c
> @@ -1493,6 +1493,12 @@ virtio_dev_rx_batch_packed_copy(struct
> virtio_net *dev,
> sizeof(struct virtio_net_hdr_mrg_rxbuf);
> }
>
> + if (rxvq_is_mergeable(dev)) {
> + vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
> + ASSIGN_UNLESS_EQUAL(hdrs[i]->num_buffers, 1);
> + }
> + }
> +
> vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE)
> virtio_enqueue_offload(pkts[i], &hdrs[i]->hdr);
>
> --
> 2.25.1
Acked-by: Cheng Jiang <cheng1.jiang@intel.com>
Thanks,
Cheng
On 1/4/23 03:39, Wenwu Ma wrote:
> In vhost sync batch enqueue, the "num_buffers" of
> virtio net header is not be set, but it should be
> set to 1 if the mrg_rxbuf feature is turned on,
> This patch fix the issue.
>
> Fixes: ef861692c398 ("vhost: add packed ring batch enqueue")
> Cc: stable@dpdk.org
>
> Signed-off-by: Wenwu Ma <wenwux.ma@intel.com>
> ---
> lib/vhost/virtio_net.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c
> index cf796183a0..61d9052a57 100644
> --- a/lib/vhost/virtio_net.c
> +++ b/lib/vhost/virtio_net.c
> @@ -1493,6 +1493,12 @@ virtio_dev_rx_batch_packed_copy(struct virtio_net *dev,
> sizeof(struct virtio_net_hdr_mrg_rxbuf);
> }
>
> + if (rxvq_is_mergeable(dev)) {
> + vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
> + ASSIGN_UNLESS_EQUAL(hdrs[i]->num_buffers, 1);
> + }
> + }
> +
> vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE)
> virtio_enqueue_offload(pkts[i], &hdrs[i]->hdr);
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
On 1/4/23 03:39, Wenwu Ma wrote:
> In vhost sync batch enqueue, the "num_buffers" of
> virtio net header is not be set, but it should be
> set to 1 if the mrg_rxbuf feature is turned on,
> This patch fix the issue.
>
> Fixes: ef861692c398 ("vhost: add packed ring batch enqueue")
> Cc: stable@dpdk.org
>
> Signed-off-by: Wenwu Ma <wenwux.ma@intel.com>
> ---
> lib/vhost/virtio_net.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c
> index cf796183a0..61d9052a57 100644
> --- a/lib/vhost/virtio_net.c
> +++ b/lib/vhost/virtio_net.c
> @@ -1493,6 +1493,12 @@ virtio_dev_rx_batch_packed_copy(struct virtio_net *dev,
> sizeof(struct virtio_net_hdr_mrg_rxbuf);
> }
>
> + if (rxvq_is_mergeable(dev)) {
> + vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
> + ASSIGN_UNLESS_EQUAL(hdrs[i]->num_buffers, 1);
> + }
> + }
> +
> vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE)
> virtio_enqueue_offload(pkts[i], &hdrs[i]->hdr);
>
Applied to dpdk-next-virtio/main.
Thanks,
Maxime
@@ -1493,6 +1493,12 @@ virtio_dev_rx_batch_packed_copy(struct virtio_net *dev,
sizeof(struct virtio_net_hdr_mrg_rxbuf);
}
+ if (rxvq_is_mergeable(dev)) {
+ vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
+ ASSIGN_UNLESS_EQUAL(hdrs[i]->num_buffers, 1);
+ }
+ }
+
vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE)
virtio_enqueue_offload(pkts[i], &hdrs[i]->hdr);