[dpdk-stable] patch 'net/virtio: fix packed ring indirect descricptors setup' has been queued to stable release 19.11.6

luca.boccassi at gmail.com luca.boccassi at gmail.com
Wed Oct 28 11:44:17 CET 2020


Hi,

FYI, your patch has been queued to stable release 19.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/30/20. 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 c39ba61a44ed25a899b5a1d68029b2d2bb830345 Mon Sep 17 00:00:00 2001
From: Marvin Liu <yong.liu at intel.com>
Date: Mon, 28 Sep 2020 16:20:51 +0800
Subject: [PATCH] net/virtio: fix packed ring indirect descricptors setup

[ upstream commit 381f39ebb78a35d8dcc2d4500419644c7de5400f ]

Add packed indirect descriptors format into virtio Tx
region. When initializing vring, packed indirect
descriptors will be initialized if ring type is packed.

Fixes: bc80357cd677 ("net/virtio: drop unused field in Tx region structure")

Signed-off-by: Marvin Liu <yong.liu at intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
---
 drivers/net/virtio/virtio_ethdev.c | 13 +++++++++++--
 drivers/net/virtio/virtqueue.h     | 17 +++++++++++++++--
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 35203940a7..8a107ebf9e 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -610,10 +610,9 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
 		txr = hdr_mz->addr;
 		memset(txr, 0, vq_size * sizeof(*txr));
 		for (i = 0; i < vq_size; i++) {
-			struct vring_desc *start_dp = txr[i].tx_indir;
-
 			/* first indirect descriptor is always the tx header */
 			if (!vtpci_packed_queue(hw)) {
+				struct vring_desc *start_dp = txr[i].tx_indir;
 				vring_desc_init_split(start_dp,
 						      RTE_DIM(txr[i].tx_indir));
 				start_dp->addr = txvq->virtio_net_hdr_mem
@@ -622,6 +621,16 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
 						   tx_hdr);
 				start_dp->len = hw->vtnet_hdr_size;
 				start_dp->flags = VRING_DESC_F_NEXT;
+			} else {
+				struct vring_packed_desc *start_dp =
+					txr[i].tx_packed_indir;
+				vring_desc_init_indirect_packed(start_dp,
+				      RTE_DIM(txr[i].tx_packed_indir));
+				start_dp->addr = txvq->virtio_net_hdr_mem
+					+ i * sizeof(*txr)
+					+ offsetof(struct virtio_tx_region,
+						   tx_hdr);
+				start_dp->len = hw->vtnet_hdr_size;
 			}
 		}
 	}
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
index 58ad7309ae..e901249601 100644
--- a/drivers/net/virtio/virtqueue.h
+++ b/drivers/net/virtio/virtqueue.h
@@ -324,8 +324,11 @@ struct virtio_net_hdr_mrg_rxbuf {
 #define VIRTIO_MAX_TX_INDIRECT 8
 struct virtio_tx_region {
 	struct virtio_net_hdr_mrg_rxbuf tx_hdr;
-	struct vring_desc tx_indir[VIRTIO_MAX_TX_INDIRECT]
-		__attribute__((__aligned__(16)));
+	union {
+		struct vring_desc tx_indir[VIRTIO_MAX_TX_INDIRECT];
+		struct vring_packed_desc
+			tx_packed_indir[VIRTIO_MAX_TX_INDIRECT];
+	} __attribute__((__aligned__(16)));
 };
 
 static inline int
@@ -363,6 +366,16 @@ vring_desc_init_split(struct vring_desc *dp, uint16_t n)
 	dp[i].next = VQ_RING_DESC_CHAIN_END;
 }
 
+static inline void
+vring_desc_init_indirect_packed(struct vring_packed_desc *dp, int n)
+{
+	int i;
+	for (i = 0; i < n; i++) {
+		dp[i].id = (uint16_t)i;
+		dp[i].flags = VRING_DESC_F_WRITE;
+	}
+}
+
 /**
  * Tell the backend not to interrupt us. Implementation for packed virtqueues.
  */
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-10-28 10:35:14.827590704 +0000
+++ 0098-net-virtio-fix-packed-ring-indirect-descricptors-set.patch	2020-10-28 10:35:11.652832202 +0000
@@ -1,14 +1,15 @@
-From 381f39ebb78a35d8dcc2d4500419644c7de5400f Mon Sep 17 00:00:00 2001
+From c39ba61a44ed25a899b5a1d68029b2d2bb830345 Mon Sep 17 00:00:00 2001
 From: Marvin Liu <yong.liu at intel.com>
 Date: Mon, 28 Sep 2020 16:20:51 +0800
 Subject: [PATCH] net/virtio: fix packed ring indirect descricptors setup
 
+[ upstream commit 381f39ebb78a35d8dcc2d4500419644c7de5400f ]
+
 Add packed indirect descriptors format into virtio Tx
 region. When initializing vring, packed indirect
 descriptors will be initialized if ring type is packed.
 
 Fixes: bc80357cd677 ("net/virtio: drop unused field in Tx region structure")
-Cc: stable at dpdk.org
 
 Signed-off-by: Marvin Liu <yong.liu at intel.com>
 Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
@@ -18,10 +19,10 @@
  2 files changed, 26 insertions(+), 4 deletions(-)
 
 diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
-index 1eb3240d89..0236c756dc 100644
+index 35203940a7..8a107ebf9e 100644
 --- a/drivers/net/virtio/virtio_ethdev.c
 +++ b/drivers/net/virtio/virtio_ethdev.c
-@@ -609,10 +609,9 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
+@@ -610,10 +610,9 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
  		txr = hdr_mz->addr;
  		memset(txr, 0, vq_size * sizeof(*txr));
  		for (i = 0; i < vq_size; i++) {
@@ -33,7 +34,7 @@
  				vring_desc_init_split(start_dp,
  						      RTE_DIM(txr[i].tx_indir));
  				start_dp->addr = txvq->virtio_net_hdr_mem
-@@ -621,6 +620,16 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
+@@ -622,6 +621,16 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
  						   tx_hdr);
  				start_dp->len = hw->vtnet_hdr_size;
  				start_dp->flags = VRING_DESC_F_NEXT;
@@ -51,24 +52,24 @@
  		}
  	}
 diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
-index 738b1a519c..a41363219d 100644
+index 58ad7309ae..e901249601 100644
 --- a/drivers/net/virtio/virtqueue.h
 +++ b/drivers/net/virtio/virtqueue.h
-@@ -329,8 +329,11 @@ struct virtio_net_hdr_mrg_rxbuf {
+@@ -324,8 +324,11 @@ struct virtio_net_hdr_mrg_rxbuf {
  #define VIRTIO_MAX_TX_INDIRECT 8
  struct virtio_tx_region {
  	struct virtio_net_hdr_mrg_rxbuf tx_hdr;
 -	struct vring_desc tx_indir[VIRTIO_MAX_TX_INDIRECT]
--		__rte_aligned(16);
+-		__attribute__((__aligned__(16)));
 +	union {
 +		struct vring_desc tx_indir[VIRTIO_MAX_TX_INDIRECT];
 +		struct vring_packed_desc
 +			tx_packed_indir[VIRTIO_MAX_TX_INDIRECT];
-+	} __rte_aligned(16);
++	} __attribute__((__aligned__(16)));
  };
  
  static inline int
-@@ -368,6 +371,16 @@ vring_desc_init_split(struct vring_desc *dp, uint16_t n)
+@@ -363,6 +366,16 @@ vring_desc_init_split(struct vring_desc *dp, uint16_t n)
  	dp[i].next = VQ_RING_DESC_CHAIN_END;
  }
  


More information about the stable mailing list