The macro ASSIGN_UNLESS_EQUAL doesn't assign value to the
variable, so the virtio_net_hdr may not be cleared correctly and the
tx packet may be droped due to wrong virtio_net_hdr.

Fixes: 57f90f894588 ("net/virtio: reuse packed ring functions")
Cc: yong....@intel.com
Signed-off-by: javin <javin...@163.com>
---
 drivers/net/virtio/virtqueue.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
index 105a9c00c..e94d78ae5 100644
--- a/drivers/net/virtio/virtqueue.h
+++ b/drivers/net/virtio/virtqueue.h
@@ -610,7 +610,7 @@ virtqueue_notify(struct virtqueue *vq)
        typeof(var) var_ = (var);               \
        typeof(val) val_ = (val);               \
        if ((var_) != (val_))                   \
-               (var_) = (val_);                \
+               (var) = (val_);         \
 } while (0)
 
 #define virtqueue_clear_net_hdr(hdr) do {              \
-- 
2.17.1

Reply via email to