[dpdk-stable] patch 'net/virtio: fix Tx checksum offloads' has been queued to LTS release 17.11.10
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Thu Dec 19 15:33:58 CET 2019
Hi,
FYI, your patch has been queued to LTS release 17.11.10
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/21/19. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Thanks.
Luca Boccassi
---
>From 204911c5871177ab7f8148dcd26557af0450a41b Mon Sep 17 00:00:00 2001
From: Andrew Rybchenko <arybchenko at solarflare.com>
Date: Thu, 24 Oct 2019 18:46:09 +0100
Subject: [PATCH] net/virtio: fix Tx checksum offloads
[ upstream commit 1526dd05328a97ebe77cf86cbf05edfa5ff17963 ]
Missing parenthesis around expression before type cast to struct
virtio_net_hdr pointer makes the arithmetic to be in
sizeof(struct virtio_net_hdr) units.
Use rte_pktmbuf_mtod_offset() to fix the problem.
Type of head_size is changed to signed since some compilers bark
on unary minus applied to unsigned.
Fixes: 1ae55ad38e5e ("net/virtio: fix mbuf data and packet length mismatch")
Signed-off-by: Andrew Rybchenko <arybchenko at solarflare.com>
Reviewed-by: Tiwei Bie <tiwei.bie at intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
---
drivers/net/virtio/virtio_rxtx.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index 2d00a9444e..cea097a9db 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -283,7 +283,7 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
struct vring_desc *start_dp;
uint16_t seg_num = cookie->nb_segs;
uint16_t head_idx, idx;
- uint16_t head_size = vq->hw->vtnet_hdr_size;
+ int16_t head_size = vq->hw->vtnet_hdr_size;
struct virtio_net_hdr *hdr;
int offload;
bool prepend_header = false;
@@ -299,8 +299,8 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
if (can_push) {
/* prepend cannot fail, checked by caller */
- hdr = (struct virtio_net_hdr *)(char *)cookie->buf_addr +
- cookie->data_off - head_size;
+ hdr = rte_pktmbuf_mtod_offset(cookie, struct virtio_net_hdr *,
+ -head_size);
prepend_header = true;
/* if offload disabled, it is not zeroed below, do it now */
if (offload == 0) {
--
2.20.1
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2019-12-19 14:32:29.966229385 +0000
+++ 0091-net-virtio-fix-Tx-checksum-offloads.patch 2019-12-19 14:32:26.217300046 +0000
@@ -1,8 +1,10 @@
-From 1526dd05328a97ebe77cf86cbf05edfa5ff17963 Mon Sep 17 00:00:00 2001
+From 204911c5871177ab7f8148dcd26557af0450a41b Mon Sep 17 00:00:00 2001
From: Andrew Rybchenko <arybchenko at solarflare.com>
Date: Thu, 24 Oct 2019 18:46:09 +0100
Subject: [PATCH] net/virtio: fix Tx checksum offloads
+[ upstream commit 1526dd05328a97ebe77cf86cbf05edfa5ff17963 ]
+
Missing parenthesis around expression before type cast to struct
virtio_net_hdr pointer makes the arithmetic to be in
sizeof(struct virtio_net_hdr) units.
@@ -13,99 +15,38 @@
on unary minus applied to unsigned.
Fixes: 1ae55ad38e5e ("net/virtio: fix mbuf data and packet length mismatch")
-Cc: stable at dpdk.org
Signed-off-by: Andrew Rybchenko <arybchenko at solarflare.com>
Reviewed-by: Tiwei Bie <tiwei.bie at intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
---
- drivers/net/virtio/virtio_rxtx.c | 24 ++++++++++++------------
- 1 file changed, 12 insertions(+), 12 deletions(-)
+ drivers/net/virtio/virtio_rxtx.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
-index 0959250a33..752faa0f6e 100644
+index 2d00a9444e..cea097a9db 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
-@@ -635,7 +635,7 @@ virtqueue_enqueue_xmit_inorder(struct virtnet_tx *txvq,
- struct vring_desc *start_dp;
- struct virtio_net_hdr *hdr;
- uint16_t idx;
-- uint16_t head_size = vq->hw->vtnet_hdr_size;
-+ int16_t head_size = vq->hw->vtnet_hdr_size;
- uint16_t i = 0;
-
- idx = vq->vq_desc_head_idx;
-@@ -648,8 +648,8 @@ virtqueue_enqueue_xmit_inorder(struct virtnet_tx *txvq,
- dxp->ndescs = 1;
- virtio_update_packet_stats(&txvq->stats, cookies[i]);
-
-- hdr = (struct virtio_net_hdr *)(char *)cookies[i]->buf_addr +
-- cookies[i]->data_off - head_size;
-+ hdr = rte_pktmbuf_mtod_offset(cookies[i],
-+ struct virtio_net_hdr *, -head_size);
-
- /* if offload disabled, hdr is not zeroed yet, do it now */
- if (!vq->hw->has_tx_offload)
-@@ -682,7 +682,7 @@ virtqueue_enqueue_xmit_packed_fast(struct virtnet_tx *txvq,
- struct vring_packed_desc *dp;
- struct vq_desc_extra *dxp;
- uint16_t idx, id, flags;
-- uint16_t head_size = vq->hw->vtnet_hdr_size;
-+ int16_t head_size = vq->hw->vtnet_hdr_size;
- struct virtio_net_hdr *hdr;
-
- id = in_order ? vq->vq_avail_idx : vq->vq_desc_head_idx;
-@@ -696,8 +696,8 @@ virtqueue_enqueue_xmit_packed_fast(struct virtnet_tx *txvq,
- flags = vq->vq_packed.cached_flags;
-
- /* prepend cannot fail, checked by caller */
-- hdr = (struct virtio_net_hdr *)(char *)cookie->buf_addr +
-- cookie->data_off - head_size;
-+ hdr = rte_pktmbuf_mtod_offset(cookie, struct virtio_net_hdr *,
-+ -head_size);
-
- /* if offload disabled, hdr is not zeroed yet, do it now */
- if (!vq->hw->has_tx_offload)
-@@ -734,7 +734,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
- struct virtqueue *vq = txvq->vq;
- struct vring_packed_desc *start_dp, *head_dp;
- uint16_t idx, id, head_idx, head_flags;
-- uint16_t head_size = vq->hw->vtnet_hdr_size;
-+ int16_t head_size = vq->hw->vtnet_hdr_size;
- struct virtio_net_hdr *hdr;
- uint16_t prev;
- bool prepend_header = false;
-@@ -756,8 +756,8 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
-
- if (can_push) {
- /* prepend cannot fail, checked by caller */
-- hdr = (struct virtio_net_hdr *)(char *)cookie->buf_addr +
-- cookie->data_off - head_size;
-+ hdr = rte_pktmbuf_mtod_offset(cookie, struct virtio_net_hdr *,
-+ -head_size);
- prepend_header = true;
-
- /* if offload disabled, it is not zeroed below, do it now */
-@@ -832,7 +832,7 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
+@@ -283,7 +283,7 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
struct vring_desc *start_dp;
uint16_t seg_num = cookie->nb_segs;
uint16_t head_idx, idx;
- uint16_t head_size = vq->hw->vtnet_hdr_size;
+ int16_t head_size = vq->hw->vtnet_hdr_size;
- bool prepend_header = false;
struct virtio_net_hdr *hdr;
-
-@@ -849,8 +849,8 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
+ int offload;
+ bool prepend_header = false;
+@@ -299,8 +299,8 @@ virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
if (can_push) {
/* prepend cannot fail, checked by caller */
- hdr = (struct virtio_net_hdr *)(char *)cookie->buf_addr +
- cookie->data_off - head_size;
+ hdr = rte_pktmbuf_mtod_offset(cookie, struct virtio_net_hdr *,
-+ -head_size);
++ -head_size);
prepend_header = true;
-
/* if offload disabled, it is not zeroed below, do it now */
+ if (offload == 0) {
--
2.20.1
More information about the stable
mailing list