summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Smith <mgsmith@netgate.com>2020-11-18 13:40:31 -0600
committerBeno�t Ganne <bganne@cisco.com>2020-11-25 10:51:09 +0000
commit45d60492a425def70e2ee64de6c36327be429479 (patch)
tree7517c4e68cfebe82002c9ceaa87d33d2228e3f09
parent3ef653aa886e6a07afba106b4f03c40e392e1307 (diff)
dpdk: patch broken virtio macro
Type: fix In DPDK 20.08, the macro ASSIGN_UNLESS_EQUAL(), which is defined in the virtio PMD code, is broken. It does not actually set the variable that is passed in to the value that is passed in. It just assigns the value to a local variable that it declares. This results in virtqueue_clear_net_hdr() failing to clear the fields in the virtio net header. This can cause packets which were sent over an IPsec tunnel and are subsequently transmitted on a virtio interface to have garbage in the virtio net header. Apply a post-20.08 patch from upstream to fix it. Change-Id: Ic53e89d859db628e26a3c1988e53b626fede94d7 Signed-off-by: Matthew Smith <mgsmith@netgate.com>
-rw-r--r--build/external/patches/dpdk_20.08/0001-net-virtio-fix-variable-assignment-in-helper-macro.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/build/external/patches/dpdk_20.08/0001-net-virtio-fix-variable-assignment-in-helper-macro.patch b/build/external/patches/dpdk_20.08/0001-net-virtio-fix-variable-assignment-in-helper-macro.patch
new file mode 100644
index 00000000000..a4c00b9f9b1
--- /dev/null
+++ b/build/external/patches/dpdk_20.08/0001-net-virtio-fix-variable-assignment-in-helper-macro.patch
@@ -0,0 +1,42 @@
+From a1412e05caa2678757156d4de2755ab5140ecc24 Mon Sep 17 00:00:00 2001
+From: Vipul Ashri <vipul.ashri@oracle.com>
+Date: Fri, 18 Sep 2020 15:25:04 +0530
+Subject: [PATCH] net/virtio: fix variable assignment in helper macro
+
+Inside Macro ASSIGN_UNLESS_EQUAL(var, val), assignment to var is always
+failing as assignment done using var_ having local scope only.
+This leads to TX packets not going out and found broken due to cleanup
+malfunctioning. This patch fixes the wrong variable assignment.
+
+Fixes: 57f90f894588 ("net/virtio: reuse packed ring functions")
+Cc: stable@dpdk.org
+
+Signed-off-by: Vipul Ashri <vipul.ashri@oracle.com>
+Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
+Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
+---
+ drivers/net/virtio/virtqueue.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
+index 105a9c00c..6ed50648c 100644
+--- a/drivers/net/virtio/virtqueue.h
++++ b/drivers/net/virtio/virtqueue.h
+@@ -607,10 +607,10 @@ virtqueue_notify(struct virtqueue *vq)
+
+ /* avoid write operation when necessary, to lessen cache issues */
+ #define ASSIGN_UNLESS_EQUAL(var, val) do { \
+- typeof(var) var_ = (var); \
+- typeof(val) val_ = (val); \
+- if ((var_) != (val_)) \
+- (var_) = (val_); \
++ typeof(var) *const var_ = &(var); \
++ typeof(val) const val_ = (val); \
++ if (*var_ != val_) \
++ *var_ = val_; \
+ } while (0)
+
+ #define virtqueue_clear_net_hdr(hdr) do { \
+--
+2.18.4
+