import dpdk-19.11-4.el8
This commit is contained in:
parent
2c0d7bdaea
commit
36880af702
@ -1 +1 @@
|
||||
6e04c3e3a82f91ebe0360b8067df59e2b774924d SOURCES/dpdk-18.11.2.tar.xz
|
||||
435b0b3a5da6d7417d318050e5b50ac400354c60 SOURCES/dpdk-19.11.tar.xz
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/dpdk-18.11.2.tar.xz
|
||||
SOURCES/dpdk-19.11.tar.xz
|
||||
|
@ -1,102 +0,0 @@
|
||||
From 93f21370ca38ae61dc2d938adf569f6668381c32 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:30 +0100
|
||||
Subject: [PATCH 01/18] net/virtio: add packed virtqueue defines
|
||||
|
||||
[ upstream commit 4c3f5822eb21476fbbd807a7c40584c1090695e5 ]
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 4c3f5822eb21476fbbd807a7c40584c1090695e5)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_pci.h | 1 +
|
||||
drivers/net/virtio/virtio_ring.h | 30 ++++++++++++++++++++++++++++++
|
||||
drivers/net/virtio/virtqueue.h | 6 ++++++
|
||||
3 files changed, 37 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h
|
||||
index e961a58ca..4c975a531 100644
|
||||
--- a/drivers/net/virtio/virtio_pci.h
|
||||
+++ b/drivers/net/virtio/virtio_pci.h
|
||||
@@ -113,6 +113,7 @@ struct virtnet_ctl;
|
||||
|
||||
#define VIRTIO_F_VERSION_1 32
|
||||
#define VIRTIO_F_IOMMU_PLATFORM 33
|
||||
+#define VIRTIO_F_RING_PACKED 34
|
||||
|
||||
/*
|
||||
* Some VirtIO feature bits (currently bits 28 through 31) are
|
||||
diff --git a/drivers/net/virtio/virtio_ring.h b/drivers/net/virtio/virtio_ring.h
|
||||
index 9e3c2a015..464449074 100644
|
||||
--- a/drivers/net/virtio/virtio_ring.h
|
||||
+++ b/drivers/net/virtio/virtio_ring.h
|
||||
@@ -15,6 +15,10 @@
|
||||
#define VRING_DESC_F_WRITE 2
|
||||
/* This means the buffer contains a list of buffer descriptors. */
|
||||
#define VRING_DESC_F_INDIRECT 4
|
||||
+/* This flag means the descriptor was made available by the driver */
|
||||
+#define VRING_DESC_F_AVAIL(b) ((uint16_t)(b) << 7)
|
||||
+/* This flag means the descriptor was used by the device */
|
||||
+#define VRING_DESC_F_USED(b) ((uint16_t)(b) << 15)
|
||||
|
||||
/* The Host uses this in used->flags to advise the Guest: don't kick me
|
||||
* when you add a buffer. It's unreliable, so it's simply an
|
||||
@@ -54,6 +58,32 @@ struct vring_used {
|
||||
struct vring_used_elem ring[0];
|
||||
};
|
||||
|
||||
+/* For support of packed virtqueues in Virtio 1.1 the format of descriptors
|
||||
+ * looks like this.
|
||||
+ */
|
||||
+struct vring_packed_desc {
|
||||
+ uint64_t addr;
|
||||
+ uint32_t len;
|
||||
+ uint16_t id;
|
||||
+ uint16_t flags;
|
||||
+};
|
||||
+
|
||||
+#define RING_EVENT_FLAGS_ENABLE 0x0
|
||||
+#define RING_EVENT_FLAGS_DISABLE 0x1
|
||||
+#define RING_EVENT_FLAGS_DESC 0x2
|
||||
+struct vring_packed_desc_event {
|
||||
+ uint16_t desc_event_off_wrap;
|
||||
+ uint16_t desc_event_flags;
|
||||
+};
|
||||
+
|
||||
+struct vring_packed {
|
||||
+ unsigned int num;
|
||||
+ struct vring_packed_desc *desc_packed;
|
||||
+ struct vring_packed_desc_event *driver_event;
|
||||
+ struct vring_packed_desc_event *device_event;
|
||||
+
|
||||
+};
|
||||
+
|
||||
struct vring {
|
||||
unsigned int num;
|
||||
struct vring_desc *desc;
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index 2e2abf15b..1525c7d10 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -161,11 +161,17 @@ struct virtio_pmd_ctrl {
|
||||
struct vq_desc_extra {
|
||||
void *cookie;
|
||||
uint16_t ndescs;
|
||||
+ uint16_t next;
|
||||
};
|
||||
|
||||
struct virtqueue {
|
||||
struct virtio_hw *hw; /**< virtio_hw structure pointer. */
|
||||
struct vring vq_ring; /**< vring keeping desc, used and avail */
|
||||
+ struct vring_packed ring_packed; /**< vring keeping descs */
|
||||
+ bool avail_wrap_counter;
|
||||
+ bool used_wrap_counter;
|
||||
+ uint16_t event_flags_shadow;
|
||||
+ uint16_t avail_used_flags;
|
||||
/**
|
||||
* Last consumed descriptor in the used table,
|
||||
* trails vq_ring.used->idx.
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,78 +0,0 @@
|
||||
From 8093f82b3e52efe012e46c429b7af4e82492f71c Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
Date: Tue, 27 Nov 2018 11:54:27 +0100
|
||||
Subject: [PATCH] net/virtio: allocate vrings on device NUMA node
|
||||
|
||||
[ upstream commit 4a5140ab17d29e77eefa47b5cb514238e8e0c132 ]
|
||||
|
||||
When a guest is spanned on multiple NUMA nodes and
|
||||
multiple Virtio devices are spanned onto these nodes,
|
||||
we expect that their ring memory is allocated in the
|
||||
right memory node.
|
||||
|
||||
Otherwise, vCPUs from node A may be polling Virtio rings
|
||||
allocated on node B, which would increase QPI bandwidth
|
||||
and impact performance.
|
||||
|
||||
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
Reviewed-by: David Marchand <david.marchand@redhat.com>
|
||||
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index 2ba66d291..cb2b2e0bf 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -335,8 +335,10 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
void *sw_ring = NULL;
|
||||
int queue_type = virtio_get_queue_type(hw, vtpci_queue_idx);
|
||||
int ret;
|
||||
+ int numa_node = dev->device->numa_node;
|
||||
|
||||
- PMD_INIT_LOG(DEBUG, "setting up queue: %u", vtpci_queue_idx);
|
||||
+ PMD_INIT_LOG(INFO, "setting up queue: %u on NUMA node %d",
|
||||
+ vtpci_queue_idx, numa_node);
|
||||
|
||||
/*
|
||||
* Read the virtqueue size from the Queue Size field
|
||||
@@ -372,7 +374,7 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
}
|
||||
|
||||
vq = rte_zmalloc_socket(vq_name, size, RTE_CACHE_LINE_SIZE,
|
||||
- SOCKET_ID_ANY);
|
||||
+ numa_node);
|
||||
if (vq == NULL) {
|
||||
PMD_INIT_LOG(ERR, "can not allocate vq");
|
||||
return -ENOMEM;
|
||||
@@ -392,7 +394,7 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
size, vq->vq_ring_size);
|
||||
|
||||
mz = rte_memzone_reserve_aligned(vq_name, vq->vq_ring_size,
|
||||
- SOCKET_ID_ANY, RTE_MEMZONE_IOVA_CONTIG,
|
||||
+ numa_node, RTE_MEMZONE_IOVA_CONTIG,
|
||||
VIRTIO_PCI_VRING_ALIGN);
|
||||
if (mz == NULL) {
|
||||
if (rte_errno == EEXIST)
|
||||
@@ -418,7 +420,7 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
snprintf(vq_hdr_name, sizeof(vq_hdr_name), "port%d_vq%d_hdr",
|
||||
dev->data->port_id, vtpci_queue_idx);
|
||||
hdr_mz = rte_memzone_reserve_aligned(vq_hdr_name, sz_hdr_mz,
|
||||
- SOCKET_ID_ANY, RTE_MEMZONE_IOVA_CONTIG,
|
||||
+ numa_node, RTE_MEMZONE_IOVA_CONTIG,
|
||||
RTE_CACHE_LINE_SIZE);
|
||||
if (hdr_mz == NULL) {
|
||||
if (rte_errno == EEXIST)
|
||||
@@ -435,7 +437,7 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
sizeof(vq->sw_ring[0]);
|
||||
|
||||
sw_ring = rte_zmalloc_socket("sw_ring", sz_sw,
|
||||
- RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);
|
||||
+ RTE_CACHE_LINE_SIZE, numa_node);
|
||||
if (!sw_ring) {
|
||||
PMD_INIT_LOG(ERR, "can not allocate RX soft ring");
|
||||
ret = -ENOMEM;
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,141 +0,0 @@
|
||||
From 652a2e3a1ba0db81ae1814e8c3cb989e9e89c4e0 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:31 +0100
|
||||
Subject: [PATCH 02/18] net/virtio: add packed virtqueue helpers
|
||||
|
||||
[ upstream commit e9f4feb7e6225f671b59375aff44b9d576121577 ]
|
||||
|
||||
Add helper functions to set/clear and check descriptor flags.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit e9f4feb7e6225f671b59375aff44b9d576121577)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_pci.h | 6 +++
|
||||
drivers/net/virtio/virtqueue.h | 72 ++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 76 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h
|
||||
index 4c975a531..b22b62dad 100644
|
||||
--- a/drivers/net/virtio/virtio_pci.h
|
||||
+++ b/drivers/net/virtio/virtio_pci.h
|
||||
@@ -315,6 +315,12 @@ vtpci_with_feature(struct virtio_hw *hw, uint64_t bit)
|
||||
return (hw->guest_features & (1ULL << bit)) != 0;
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+vtpci_packed_queue(struct virtio_hw *hw)
|
||||
+{
|
||||
+ return vtpci_with_feature(hw, VIRTIO_F_RING_PACKED);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Function declaration from virtio_pci.c
|
||||
*/
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index 1525c7d10..c32812427 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -251,6 +251,31 @@ struct virtio_tx_region {
|
||||
__attribute__((__aligned__(16)));
|
||||
};
|
||||
|
||||
+static inline int
|
||||
+desc_is_used(struct vring_packed_desc *desc, struct virtqueue *vq)
|
||||
+{
|
||||
+ uint16_t used, avail, flags;
|
||||
+
|
||||
+ flags = desc->flags;
|
||||
+ used = !!(flags & VRING_DESC_F_USED(1));
|
||||
+ avail = !!(flags & VRING_DESC_F_AVAIL(1));
|
||||
+
|
||||
+ return avail == used && used == vq->used_wrap_counter;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static inline void
|
||||
+vring_desc_init_packed(struct virtqueue *vq, int n)
|
||||
+{
|
||||
+ int i;
|
||||
+ for (i = 0; i < n - 1; i++) {
|
||||
+ vq->ring_packed.desc_packed[i].id = i;
|
||||
+ vq->vq_descx[i].next = i + 1;
|
||||
+ }
|
||||
+ vq->ring_packed.desc_packed[i].id = i;
|
||||
+ vq->vq_descx[i].next = VQ_RING_DESC_CHAIN_END;
|
||||
+}
|
||||
+
|
||||
/* Chain all the descriptors in the ring with an END */
|
||||
static inline void
|
||||
vring_desc_init(struct vring_desc *dp, uint16_t n)
|
||||
@@ -262,13 +287,53 @@ vring_desc_init(struct vring_desc *dp, uint16_t n)
|
||||
dp[i].next = VQ_RING_DESC_CHAIN_END;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Tell the backend not to interrupt us.
|
||||
+ */
|
||||
+static inline void
|
||||
+virtqueue_disable_intr_packed(struct virtqueue *vq)
|
||||
+{
|
||||
+ uint16_t *event_flags = &vq->ring_packed.driver_event->desc_event_flags;
|
||||
+
|
||||
+ *event_flags = RING_EVENT_FLAGS_DISABLE;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* Tell the backend not to interrupt us.
|
||||
*/
|
||||
static inline void
|
||||
virtqueue_disable_intr(struct virtqueue *vq)
|
||||
{
|
||||
- vq->vq_ring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
|
||||
+ if (vtpci_packed_queue(vq->hw))
|
||||
+ virtqueue_disable_intr_packed(vq);
|
||||
+ else
|
||||
+ vq->vq_ring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * Tell the backend to interrupt. Implementation for packed virtqueues.
|
||||
+ */
|
||||
+static inline void
|
||||
+virtqueue_enable_intr_packed(struct virtqueue *vq)
|
||||
+{
|
||||
+ uint16_t *event_flags = &vq->ring_packed.driver_event->desc_event_flags;
|
||||
+
|
||||
+
|
||||
+ if (vq->event_flags_shadow == RING_EVENT_FLAGS_DISABLE) {
|
||||
+ virtio_wmb();
|
||||
+ vq->event_flags_shadow = RING_EVENT_FLAGS_ENABLE;
|
||||
+ *event_flags = vq->event_flags_shadow;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * Tell the backend to interrupt. Implementation for split virtqueues.
|
||||
+ */
|
||||
+static inline void
|
||||
+virtqueue_enable_intr_split(struct virtqueue *vq)
|
||||
+{
|
||||
+ vq->vq_ring.avail->flags &= (~VRING_AVAIL_F_NO_INTERRUPT);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -277,7 +342,10 @@ virtqueue_disable_intr(struct virtqueue *vq)
|
||||
static inline void
|
||||
virtqueue_enable_intr(struct virtqueue *vq)
|
||||
{
|
||||
- vq->vq_ring.avail->flags &= (~VRING_AVAIL_F_NO_INTERRUPT);
|
||||
+ if (vtpci_packed_queue(vq->hw))
|
||||
+ virtqueue_enable_intr_packed(vq);
|
||||
+ else
|
||||
+ virtqueue_enable_intr_split(vq);
|
||||
}
|
||||
|
||||
/**
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,175 +0,0 @@
|
||||
From 4e832cad1879f87a694e2f78b8718f986f7c76e2 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:32 +0100
|
||||
Subject: [PATCH 03/18] net/virtio: vring init for packed queues
|
||||
|
||||
[ upstream commit f803734b0f2e6c556d9bf7fe8f11638429e3a00f ]
|
||||
|
||||
Add and initialize descriptor data structures.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit f803734b0f2e6c556d9bf7fe8f11638429e3a00f)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 32 ++++++++++++++++++++----------
|
||||
drivers/net/virtio/virtio_ring.h | 28 ++++++++++++++++++++++----
|
||||
drivers/net/virtio/virtqueue.h | 2 +-
|
||||
3 files changed, 46 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index 2ba66d291..ee52e3cdb 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -299,20 +299,22 @@ virtio_init_vring(struct virtqueue *vq)
|
||||
|
||||
PMD_INIT_FUNC_TRACE();
|
||||
|
||||
- /*
|
||||
- * Reinitialise since virtio port might have been stopped and restarted
|
||||
- */
|
||||
memset(ring_mem, 0, vq->vq_ring_size);
|
||||
- vring_init(vr, size, ring_mem, VIRTIO_PCI_VRING_ALIGN);
|
||||
+
|
||||
vq->vq_used_cons_idx = 0;
|
||||
vq->vq_desc_head_idx = 0;
|
||||
vq->vq_avail_idx = 0;
|
||||
vq->vq_desc_tail_idx = (uint16_t)(vq->vq_nentries - 1);
|
||||
vq->vq_free_cnt = vq->vq_nentries;
|
||||
memset(vq->vq_descx, 0, sizeof(struct vq_desc_extra) * vq->vq_nentries);
|
||||
-
|
||||
- vring_desc_init(vr->desc, size);
|
||||
-
|
||||
+ if (vtpci_packed_queue(vq->hw)) {
|
||||
+ vring_init_packed(&vq->ring_packed, ring_mem,
|
||||
+ VIRTIO_PCI_VRING_ALIGN, size);
|
||||
+ vring_desc_init_packed(vq, size);
|
||||
+ } else {
|
||||
+ vring_init_split(vr, ring_mem, VIRTIO_PCI_VRING_ALIGN, size);
|
||||
+ vring_desc_init_split(vr->desc, size);
|
||||
+ }
|
||||
/*
|
||||
* Disable device(host) interrupting guest
|
||||
*/
|
||||
@@ -382,11 +384,16 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
vq->hw = hw;
|
||||
vq->vq_queue_index = vtpci_queue_idx;
|
||||
vq->vq_nentries = vq_size;
|
||||
+ vq->event_flags_shadow = 0;
|
||||
+ if (vtpci_packed_queue(hw)) {
|
||||
+ vq->avail_wrap_counter = 1;
|
||||
+ vq->used_wrap_counter = 1;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Reserve a memzone for vring elements
|
||||
*/
|
||||
- size = vring_size(vq_size, VIRTIO_PCI_VRING_ALIGN);
|
||||
+ size = vring_size(hw, vq_size, VIRTIO_PCI_VRING_ALIGN);
|
||||
vq->vq_ring_size = RTE_ALIGN_CEIL(size, VIRTIO_PCI_VRING_ALIGN);
|
||||
PMD_INIT_LOG(DEBUG, "vring_size: %d, rounded_vring_size: %d",
|
||||
size, vq->vq_ring_size);
|
||||
@@ -489,7 +496,8 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
for (i = 0; i < vq_size; i++) {
|
||||
struct vring_desc *start_dp = txr[i].tx_indir;
|
||||
|
||||
- vring_desc_init(start_dp, RTE_DIM(txr[i].tx_indir));
|
||||
+ vring_desc_init_split(start_dp,
|
||||
+ RTE_DIM(txr[i].tx_indir));
|
||||
|
||||
/* first indirect descriptor is always the tx header */
|
||||
start_dp->addr = txvq->virtio_net_hdr_mem
|
||||
@@ -1486,7 +1494,8 @@ virtio_init_device(struct rte_eth_dev *eth_dev, uint64_t req_features)
|
||||
|
||||
/* Setting up rx_header size for the device */
|
||||
if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF) ||
|
||||
- vtpci_with_feature(hw, VIRTIO_F_VERSION_1))
|
||||
+ vtpci_with_feature(hw, VIRTIO_F_VERSION_1) ||
|
||||
+ vtpci_with_feature(hw, VIRTIO_F_RING_PACKED))
|
||||
hw->vtnet_hdr_size = sizeof(struct virtio_net_hdr_mrg_rxbuf);
|
||||
else
|
||||
hw->vtnet_hdr_size = sizeof(struct virtio_net_hdr);
|
||||
@@ -1906,7 +1915,8 @@ virtio_dev_configure(struct rte_eth_dev *dev)
|
||||
|
||||
if (vtpci_with_feature(hw, VIRTIO_F_IN_ORDER)) {
|
||||
hw->use_inorder_tx = 1;
|
||||
- if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) {
|
||||
+ if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF) &&
|
||||
+ !vtpci_packed_queue(hw)) {
|
||||
hw->use_inorder_rx = 1;
|
||||
hw->use_simple_rx = 0;
|
||||
} else {
|
||||
diff --git a/drivers/net/virtio/virtio_ring.h b/drivers/net/virtio/virtio_ring.h
|
||||
index 464449074..1760823c6 100644
|
||||
--- a/drivers/net/virtio/virtio_ring.h
|
||||
+++ b/drivers/net/virtio/virtio_ring.h
|
||||
@@ -125,10 +125,18 @@ struct vring {
|
||||
#define vring_avail_event(vr) (*(uint16_t *)&(vr)->used->ring[(vr)->num])
|
||||
|
||||
static inline size_t
|
||||
-vring_size(unsigned int num, unsigned long align)
|
||||
+vring_size(struct virtio_hw *hw, unsigned int num, unsigned long align)
|
||||
{
|
||||
size_t size;
|
||||
|
||||
+ if (vtpci_packed_queue(hw)) {
|
||||
+ size = num * sizeof(struct vring_packed_desc);
|
||||
+ size += sizeof(struct vring_packed_desc_event);
|
||||
+ size = RTE_ALIGN_CEIL(size, align);
|
||||
+ size += sizeof(struct vring_packed_desc_event);
|
||||
+ return size;
|
||||
+ }
|
||||
+
|
||||
size = num * sizeof(struct vring_desc);
|
||||
size += sizeof(struct vring_avail) + (num * sizeof(uint16_t));
|
||||
size = RTE_ALIGN_CEIL(size, align);
|
||||
@@ -136,10 +144,9 @@ vring_size(unsigned int num, unsigned long align)
|
||||
(num * sizeof(struct vring_used_elem));
|
||||
return size;
|
||||
}
|
||||
-
|
||||
static inline void
|
||||
-vring_init(struct vring *vr, unsigned int num, uint8_t *p,
|
||||
- unsigned long align)
|
||||
+vring_init_split(struct vring *vr, uint8_t *p, unsigned long align,
|
||||
+ unsigned int num)
|
||||
{
|
||||
vr->num = num;
|
||||
vr->desc = (struct vring_desc *) p;
|
||||
@@ -149,6 +156,19 @@ vring_init(struct vring *vr, unsigned int num, uint8_t *p,
|
||||
RTE_ALIGN_CEIL((uintptr_t)(&vr->avail->ring[num]), align);
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+vring_init_packed(struct vring_packed *vr, uint8_t *p, unsigned long align,
|
||||
+ unsigned int num)
|
||||
+{
|
||||
+ vr->num = num;
|
||||
+ vr->desc_packed = (struct vring_packed_desc *)p;
|
||||
+ vr->driver_event = (struct vring_packed_desc_event *)(p +
|
||||
+ vr->num * sizeof(struct vring_packed_desc));
|
||||
+ vr->device_event = (struct vring_packed_desc_event *)
|
||||
+ RTE_ALIGN_CEIL((uintptr_t)(vr->driver_event +
|
||||
+ sizeof(struct vring_packed_desc_event)), align);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* The following is used with VIRTIO_RING_F_EVENT_IDX.
|
||||
* Assuming a given event_idx value from the other size, if we have
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index c32812427..d08ef9112 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -278,7 +278,7 @@ vring_desc_init_packed(struct virtqueue *vq, int n)
|
||||
|
||||
/* Chain all the descriptors in the ring with an END */
|
||||
static inline void
|
||||
-vring_desc_init(struct vring_desc *dp, uint16_t n)
|
||||
+vring_desc_init_split(struct vring_desc *dp, uint16_t n)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 2dc70f1db67091cc3a9131d2093da464738b31d8 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:33 +0100
|
||||
Subject: [PATCH 04/18] net/virtio: dump packed virtqueue data
|
||||
|
||||
[ upstream commit 56785a2d6fad987c025278909307db776df59bd9 ]
|
||||
|
||||
Add support to dump packed virtqueue data to the
|
||||
VIRTQUEUE_DUMP() macro.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 56785a2d6fad987c025278909307db776df59bd9)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtqueue.h | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index d08ef9112..e9c35a553 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -434,6 +434,15 @@ virtqueue_notify(struct virtqueue *vq)
|
||||
uint16_t used_idx, nused; \
|
||||
used_idx = (vq)->vq_ring.used->idx; \
|
||||
nused = (uint16_t)(used_idx - (vq)->vq_used_cons_idx); \
|
||||
+ if (vtpci_packed_queue((vq)->hw)) { \
|
||||
+ PMD_INIT_LOG(DEBUG, \
|
||||
+ "VQ: - size=%d; free=%d; used_cons_idx=%d; avail_idx=%d;" \
|
||||
+ "VQ: - avail_wrap_counter=%d; used_wrap_counter=%d", \
|
||||
+ (vq)->vq_nentries, (vq)->vq_free_cnt, (vq)->vq_used_cons_idx, \
|
||||
+ (vq)->vq_avail_idx, (vq)->avail_wrap_counter, \
|
||||
+ (vq)->used_wrap_counter); \
|
||||
+ break; \
|
||||
+ } \
|
||||
PMD_INIT_LOG(DEBUG, \
|
||||
"VQ: - size=%d; free=%d; used=%d; desc_head_idx=%d;" \
|
||||
" avail.idx=%d; used_cons_idx=%d; used.idx=%d;" \
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,448 +0,0 @@
|
||||
From 97ee69c836bfb08e674fd0f28d1fc7a14f2d4de0 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:34 +0100
|
||||
Subject: [PATCH 05/18] net/virtio: implement Tx path for packed queues
|
||||
|
||||
[ upstream commit 892dc798fa9c24e6172b8bcecc9586f2f9a7a49e ]
|
||||
|
||||
This implements the transmit path for devices with
|
||||
support for packed virtqueues.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 892dc798fa9c24e6172b8bcecc9586f2f9a7a49e)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 56 ++++---
|
||||
drivers/net/virtio/virtio_ethdev.h | 2 +
|
||||
drivers/net/virtio/virtio_rxtx.c | 236 ++++++++++++++++++++++++++++-
|
||||
drivers/net/virtio/virtqueue.h | 20 ++-
|
||||
4 files changed, 292 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index ee52e3cdb..6023d6f2c 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -388,6 +388,9 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
if (vtpci_packed_queue(hw)) {
|
||||
vq->avail_wrap_counter = 1;
|
||||
vq->used_wrap_counter = 1;
|
||||
+ vq->avail_used_flags =
|
||||
+ VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -495,17 +498,26 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
|
||||
memset(txr, 0, vq_size * sizeof(*txr));
|
||||
for (i = 0; i < vq_size; i++) {
|
||||
struct vring_desc *start_dp = txr[i].tx_indir;
|
||||
-
|
||||
- vring_desc_init_split(start_dp,
|
||||
- RTE_DIM(txr[i].tx_indir));
|
||||
+ struct vring_packed_desc *start_dp_packed =
|
||||
+ txr[i].tx_indir_pq;
|
||||
|
||||
/* first indirect descriptor is always the tx header */
|
||||
- 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;
|
||||
- start_dp->flags = VRING_DESC_F_NEXT;
|
||||
+ if (vtpci_packed_queue(hw)) {
|
||||
+ start_dp_packed->addr = txvq->virtio_net_hdr_mem
|
||||
+ + i * sizeof(*txr)
|
||||
+ + offsetof(struct virtio_tx_region,
|
||||
+ tx_hdr);
|
||||
+ start_dp_packed->len = hw->vtnet_hdr_size;
|
||||
+ } else {
|
||||
+ vring_desc_init_split(start_dp,
|
||||
+ RTE_DIM(txr[i].tx_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;
|
||||
+ start_dp->flags = VRING_DESC_F_NEXT;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1334,6 +1346,23 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct virtio_hw *hw = eth_dev->data->dev_private;
|
||||
|
||||
+ if (vtpci_packed_queue(hw)) {
|
||||
+ PMD_INIT_LOG(INFO,
|
||||
+ "virtio: using packed ring standard Tx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->tx_pkt_burst = virtio_xmit_pkts_packed;
|
||||
+ } else {
|
||||
+ if (hw->use_inorder_tx) {
|
||||
+ PMD_INIT_LOG(INFO, "virtio: using inorder Tx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->tx_pkt_burst = virtio_xmit_pkts_inorder;
|
||||
+ } else {
|
||||
+ PMD_INIT_LOG(INFO, "virtio: using standard Tx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->tx_pkt_burst = virtio_xmit_pkts;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (hw->use_simple_rx) {
|
||||
PMD_INIT_LOG(INFO, "virtio: using simple Rx path on port %u",
|
||||
eth_dev->data->port_id);
|
||||
@@ -1354,15 +1383,6 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev)
|
||||
eth_dev->rx_pkt_burst = &virtio_recv_pkts;
|
||||
}
|
||||
|
||||
- if (hw->use_inorder_tx) {
|
||||
- PMD_INIT_LOG(INFO, "virtio: using inorder Tx path on port %u",
|
||||
- eth_dev->data->port_id);
|
||||
- eth_dev->tx_pkt_burst = virtio_xmit_pkts_inorder;
|
||||
- } else {
|
||||
- PMD_INIT_LOG(INFO, "virtio: using standard Tx path on port %u",
|
||||
- eth_dev->data->port_id);
|
||||
- eth_dev->tx_pkt_burst = virtio_xmit_pkts;
|
||||
- }
|
||||
}
|
||||
|
||||
/* Only support 1:1 queue/interrupt mapping so far.
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h
|
||||
index e0f80e5a4..05d355180 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.h
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.h
|
||||
@@ -82,6 +82,8 @@ uint16_t virtio_recv_mergeable_pkts_inorder(void *rx_queue,
|
||||
|
||||
uint16_t virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
uint16_t nb_pkts);
|
||||
+uint16_t virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
+ uint16_t nb_pkts);
|
||||
|
||||
uint16_t virtio_xmit_pkts_inorder(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
uint16_t nb_pkts);
|
||||
diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
|
||||
index eb891433e..ab74917a8 100644
|
||||
--- a/drivers/net/virtio/virtio_rxtx.c
|
||||
+++ b/drivers/net/virtio/virtio_rxtx.c
|
||||
@@ -88,6 +88,23 @@ vq_ring_free_chain(struct virtqueue *vq, uint16_t desc_idx)
|
||||
dp->next = VQ_RING_DESC_CHAIN_END;
|
||||
}
|
||||
|
||||
+static void
|
||||
+vq_ring_free_id_packed(struct virtqueue *vq, uint16_t id)
|
||||
+{
|
||||
+ struct vq_desc_extra *dxp;
|
||||
+
|
||||
+ dxp = &vq->vq_descx[id];
|
||||
+ vq->vq_free_cnt += dxp->ndescs;
|
||||
+
|
||||
+ if (vq->vq_desc_tail_idx == VQ_RING_DESC_CHAIN_END)
|
||||
+ vq->vq_desc_head_idx = id;
|
||||
+ else
|
||||
+ vq->vq_descx[vq->vq_desc_tail_idx].next = id;
|
||||
+
|
||||
+ vq->vq_desc_tail_idx = id;
|
||||
+ dxp->next = VQ_RING_DESC_CHAIN_END;
|
||||
+}
|
||||
+
|
||||
static uint16_t
|
||||
virtqueue_dequeue_burst_rx(struct virtqueue *vq, struct rte_mbuf **rx_pkts,
|
||||
uint32_t *len, uint16_t num)
|
||||
@@ -165,6 +182,33 @@ virtqueue_dequeue_rx_inorder(struct virtqueue *vq,
|
||||
#endif
|
||||
|
||||
/* Cleanup from completed transmits. */
|
||||
+static void
|
||||
+virtio_xmit_cleanup_packed(struct virtqueue *vq, int num)
|
||||
+{
|
||||
+ uint16_t used_idx, id;
|
||||
+ uint16_t size = vq->vq_nentries;
|
||||
+ struct vring_packed_desc *desc = vq->ring_packed.desc_packed;
|
||||
+ struct vq_desc_extra *dxp;
|
||||
+
|
||||
+ used_idx = vq->vq_used_cons_idx;
|
||||
+ while (num-- && desc_is_used(&desc[used_idx], vq)) {
|
||||
+ used_idx = vq->vq_used_cons_idx;
|
||||
+ id = desc[used_idx].id;
|
||||
+ dxp = &vq->vq_descx[id];
|
||||
+ vq->vq_used_cons_idx += dxp->ndescs;
|
||||
+ if (vq->vq_used_cons_idx >= size) {
|
||||
+ vq->vq_used_cons_idx -= size;
|
||||
+ vq->used_wrap_counter ^= 1;
|
||||
+ }
|
||||
+ vq_ring_free_id_packed(vq, id);
|
||||
+ if (dxp->cookie != NULL) {
|
||||
+ rte_pktmbuf_free(dxp->cookie);
|
||||
+ dxp->cookie = NULL;
|
||||
+ }
|
||||
+ used_idx = vq->vq_used_cons_idx;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void
|
||||
virtio_xmit_cleanup(struct virtqueue *vq, uint16_t num)
|
||||
{
|
||||
@@ -456,6 +500,107 @@ virtqueue_enqueue_xmit_inorder(struct virtnet_tx *txvq,
|
||||
vq->vq_desc_head_idx = idx & (vq->vq_nentries - 1);
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
|
||||
+ uint16_t needed, int can_push)
|
||||
+{
|
||||
+ struct virtio_tx_region *txr = txvq->virtio_net_hdr_mz->addr;
|
||||
+ struct vq_desc_extra *dxp;
|
||||
+ 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;
|
||||
+ struct virtio_net_hdr *hdr;
|
||||
+ uint16_t prev;
|
||||
+
|
||||
+ id = vq->vq_desc_head_idx;
|
||||
+
|
||||
+ dxp = &vq->vq_descx[id];
|
||||
+ dxp->ndescs = needed;
|
||||
+ dxp->cookie = cookie;
|
||||
+
|
||||
+ head_idx = vq->vq_avail_idx;
|
||||
+ idx = head_idx;
|
||||
+ prev = head_idx;
|
||||
+ start_dp = vq->ring_packed.desc_packed;
|
||||
+
|
||||
+ head_dp = &vq->ring_packed.desc_packed[idx];
|
||||
+ head_flags = cookie->next ? VRING_DESC_F_NEXT : 0;
|
||||
+ head_flags |= vq->avail_used_flags;
|
||||
+
|
||||
+ if (can_push) {
|
||||
+ /* prepend cannot fail, checked by caller */
|
||||
+ hdr = (struct virtio_net_hdr *)
|
||||
+ rte_pktmbuf_prepend(cookie, head_size);
|
||||
+ /* rte_pktmbuf_prepend() counts the hdr size to the pkt length,
|
||||
+ * which is wrong. Below subtract restores correct pkt size.
|
||||
+ */
|
||||
+ cookie->pkt_len -= head_size;
|
||||
+
|
||||
+ /* if offload disabled, it is not zeroed below, do it now */
|
||||
+ if (!vq->hw->has_tx_offload) {
|
||||
+ ASSIGN_UNLESS_EQUAL(hdr->csum_start, 0);
|
||||
+ ASSIGN_UNLESS_EQUAL(hdr->csum_offset, 0);
|
||||
+ ASSIGN_UNLESS_EQUAL(hdr->flags, 0);
|
||||
+ ASSIGN_UNLESS_EQUAL(hdr->gso_type, 0);
|
||||
+ ASSIGN_UNLESS_EQUAL(hdr->gso_size, 0);
|
||||
+ ASSIGN_UNLESS_EQUAL(hdr->hdr_len, 0);
|
||||
+ }
|
||||
+ } else {
|
||||
+ /* setup first tx ring slot to point to header
|
||||
+ * stored in reserved region.
|
||||
+ */
|
||||
+ start_dp[idx].addr = txvq->virtio_net_hdr_mem +
|
||||
+ RTE_PTR_DIFF(&txr[idx].tx_hdr, txr);
|
||||
+ start_dp[idx].len = vq->hw->vtnet_hdr_size;
|
||||
+ hdr = (struct virtio_net_hdr *)&txr[idx].tx_hdr;
|
||||
+ idx++;
|
||||
+ if (idx >= vq->vq_nentries) {
|
||||
+ idx -= vq->vq_nentries;
|
||||
+ vq->avail_wrap_counter ^= 1;
|
||||
+ vq->avail_used_flags =
|
||||
+ VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ virtqueue_xmit_offload(hdr, cookie, vq->hw->has_tx_offload);
|
||||
+
|
||||
+ do {
|
||||
+ uint16_t flags;
|
||||
+
|
||||
+ start_dp[idx].addr = VIRTIO_MBUF_DATA_DMA_ADDR(cookie, vq);
|
||||
+ start_dp[idx].len = cookie->data_len;
|
||||
+ if (likely(idx != head_idx)) {
|
||||
+ flags = cookie->next ? VRING_DESC_F_NEXT : 0;
|
||||
+ flags |= vq->avail_used_flags;
|
||||
+ start_dp[idx].flags = flags;
|
||||
+ }
|
||||
+ prev = idx;
|
||||
+ idx++;
|
||||
+ if (idx >= vq->vq_nentries) {
|
||||
+ idx -= vq->vq_nentries;
|
||||
+ vq->avail_wrap_counter ^= 1;
|
||||
+ vq->avail_used_flags =
|
||||
+ VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
+ }
|
||||
+ } while ((cookie = cookie->next) != NULL);
|
||||
+
|
||||
+ start_dp[prev].id = id;
|
||||
+
|
||||
+ vq->vq_free_cnt = (uint16_t)(vq->vq_free_cnt - needed);
|
||||
+
|
||||
+ vq->vq_desc_head_idx = dxp->next;
|
||||
+ if (vq->vq_desc_head_idx == VQ_RING_DESC_CHAIN_END)
|
||||
+ vq->vq_desc_tail_idx = VQ_RING_DESC_CHAIN_END;
|
||||
+
|
||||
+ vq->vq_avail_idx = idx;
|
||||
+
|
||||
+ rte_smp_wmb();
|
||||
+ head_dp->flags = head_flags;
|
||||
+}
|
||||
+
|
||||
static inline void
|
||||
virtqueue_enqueue_xmit(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
|
||||
uint16_t needed, int use_indirect, int can_push,
|
||||
@@ -733,8 +878,10 @@ virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev,
|
||||
|
||||
PMD_INIT_FUNC_TRACE();
|
||||
|
||||
- if (hw->use_inorder_tx)
|
||||
- vq->vq_ring.desc[vq->vq_nentries - 1].next = 0;
|
||||
+ if (!vtpci_packed_queue(hw)) {
|
||||
+ if (hw->use_inorder_tx)
|
||||
+ vq->vq_ring.desc[vq->vq_nentries - 1].next = 0;
|
||||
+ }
|
||||
|
||||
VIRTQUEUE_DUMP(vq);
|
||||
|
||||
@@ -1346,6 +1493,91 @@ virtio_recv_mergeable_pkts(void *rx_queue,
|
||||
return nb_rx;
|
||||
}
|
||||
|
||||
+uint16_t
|
||||
+virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
+ uint16_t nb_pkts)
|
||||
+{
|
||||
+ struct virtnet_tx *txvq = tx_queue;
|
||||
+ struct virtqueue *vq = txvq->vq;
|
||||
+ struct virtio_hw *hw = vq->hw;
|
||||
+ uint16_t hdr_size = hw->vtnet_hdr_size;
|
||||
+ uint16_t nb_tx = 0;
|
||||
+ int error;
|
||||
+
|
||||
+ if (unlikely(hw->started == 0 && tx_pkts != hw->inject_pkts))
|
||||
+ return nb_tx;
|
||||
+
|
||||
+ if (unlikely(nb_pkts < 1))
|
||||
+ return nb_pkts;
|
||||
+
|
||||
+ PMD_TX_LOG(DEBUG, "%d packets to xmit", nb_pkts);
|
||||
+
|
||||
+ if (nb_pkts > vq->vq_free_cnt)
|
||||
+ virtio_xmit_cleanup_packed(vq, nb_pkts - vq->vq_free_cnt);
|
||||
+
|
||||
+ for (nb_tx = 0; nb_tx < nb_pkts; nb_tx++) {
|
||||
+ struct rte_mbuf *txm = tx_pkts[nb_tx];
|
||||
+ int can_push = 0, slots, need;
|
||||
+
|
||||
+ /* Do VLAN tag insertion */
|
||||
+ if (unlikely(txm->ol_flags & PKT_TX_VLAN_PKT)) {
|
||||
+ error = rte_vlan_insert(&txm);
|
||||
+ if (unlikely(error)) {
|
||||
+ rte_pktmbuf_free(txm);
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* optimize ring usage */
|
||||
+ if ((vtpci_with_feature(hw, VIRTIO_F_ANY_LAYOUT) ||
|
||||
+ vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) &&
|
||||
+ rte_mbuf_refcnt_read(txm) == 1 &&
|
||||
+ RTE_MBUF_DIRECT(txm) &&
|
||||
+ txm->nb_segs == 1 &&
|
||||
+ rte_pktmbuf_headroom(txm) >= hdr_size &&
|
||||
+ rte_is_aligned(rte_pktmbuf_mtod(txm, char *),
|
||||
+ __alignof__(struct virtio_net_hdr_mrg_rxbuf)))
|
||||
+ can_push = 1;
|
||||
+
|
||||
+ /* How many main ring entries are needed to this Tx?
|
||||
+ * any_layout => number of segments
|
||||
+ * default => number of segments + 1
|
||||
+ */
|
||||
+ slots = txm->nb_segs + !can_push;
|
||||
+ need = slots - vq->vq_free_cnt;
|
||||
+
|
||||
+ /* Positive value indicates it need free vring descriptors */
|
||||
+ if (unlikely(need > 0)) {
|
||||
+ virtio_rmb();
|
||||
+ need = RTE_MIN(need, (int)nb_pkts);
|
||||
+ virtio_xmit_cleanup_packed(vq, need);
|
||||
+ need = slots - vq->vq_free_cnt;
|
||||
+ if (unlikely(need > 0)) {
|
||||
+ PMD_TX_LOG(ERR,
|
||||
+ "No free tx descriptors to transmit");
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Enqueue Packet buffers */
|
||||
+ virtqueue_enqueue_xmit_packed(txvq, txm, slots, can_push);
|
||||
+
|
||||
+ txvq->stats.bytes += txm->pkt_len;
|
||||
+ virtio_update_packet_stats(&txvq->stats, txm);
|
||||
+ }
|
||||
+
|
||||
+ txvq->stats.packets += nb_tx;
|
||||
+
|
||||
+ if (likely(nb_tx)) {
|
||||
+ if (unlikely(virtqueue_kick_prepare_packed(vq))) {
|
||||
+ virtqueue_notify(vq);
|
||||
+ PMD_TX_LOG(DEBUG, "Notified backend after xmit");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return nb_tx;
|
||||
+}
|
||||
+
|
||||
uint16_t
|
||||
virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
|
||||
{
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index e9c35a553..b142fd488 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -247,8 +247,12 @@ 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]
|
||||
+ __attribute__((__aligned__(16)));
|
||||
+ struct vring_packed_desc tx_indir_pq[VIRTIO_MAX_TX_INDIRECT]
|
||||
+ __attribute__((__aligned__(16)));
|
||||
+ };
|
||||
};
|
||||
|
||||
static inline int
|
||||
@@ -380,6 +384,7 @@ virtio_get_queue_type(struct virtio_hw *hw, uint16_t vtpci_queue_idx)
|
||||
#define VIRTQUEUE_NUSED(vq) ((uint16_t)((vq)->vq_ring.used->idx - (vq)->vq_used_cons_idx))
|
||||
|
||||
void vq_ring_free_chain(struct virtqueue *vq, uint16_t desc_idx);
|
||||
+void vq_ring_free_chain_packed(struct virtqueue *vq, uint16_t used_idx);
|
||||
void vq_ring_free_inorder(struct virtqueue *vq, uint16_t desc_idx,
|
||||
uint16_t num);
|
||||
|
||||
@@ -418,6 +423,17 @@ virtqueue_kick_prepare(struct virtqueue *vq)
|
||||
return !(vq->vq_ring.used->flags & VRING_USED_F_NO_NOTIFY);
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+virtqueue_kick_prepare_packed(struct virtqueue *vq)
|
||||
+{
|
||||
+ uint16_t flags;
|
||||
+
|
||||
+ virtio_mb();
|
||||
+ flags = vq->ring_packed.device_event->desc_event_flags;
|
||||
+
|
||||
+ return flags != RING_EVENT_FLAGS_DISABLE;
|
||||
+}
|
||||
+
|
||||
static inline void
|
||||
virtqueue_notify(struct virtqueue *vq)
|
||||
{
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,613 +0,0 @@
|
||||
From a1168f29a051eba2344407d72267b5d5f648d80c Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:35 +0100
|
||||
Subject: [PATCH 06/18] net/virtio: implement Rx path for packed queues
|
||||
|
||||
[ upstream commit a76290c8f1cf9c4774c23592921302a04a90bded ]
|
||||
|
||||
Implement the receive part.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit a76290c8f1cf9c4774c23592921302a04a90bded)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 56 +++--
|
||||
drivers/net/virtio/virtio_ethdev.h | 5 +
|
||||
drivers/net/virtio/virtio_rxtx.c | 375 ++++++++++++++++++++++++++++-
|
||||
drivers/net/virtio/virtqueue.c | 43 +++-
|
||||
4 files changed, 457 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index 6023d6f2c..4ef1da393 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -1363,24 +1363,40 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev)
|
||||
}
|
||||
}
|
||||
|
||||
- if (hw->use_simple_rx) {
|
||||
- PMD_INIT_LOG(INFO, "virtio: using simple Rx path on port %u",
|
||||
- eth_dev->data->port_id);
|
||||
- eth_dev->rx_pkt_burst = virtio_recv_pkts_vec;
|
||||
- } else if (hw->use_inorder_rx) {
|
||||
- PMD_INIT_LOG(INFO,
|
||||
- "virtio: using inorder mergeable buffer Rx path on port %u",
|
||||
- eth_dev->data->port_id);
|
||||
- eth_dev->rx_pkt_burst = &virtio_recv_mergeable_pkts_inorder;
|
||||
- } else if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) {
|
||||
- PMD_INIT_LOG(INFO,
|
||||
- "virtio: using mergeable buffer Rx path on port %u",
|
||||
- eth_dev->data->port_id);
|
||||
- eth_dev->rx_pkt_burst = &virtio_recv_mergeable_pkts;
|
||||
+ if (vtpci_packed_queue(hw)) {
|
||||
+ if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) {
|
||||
+ PMD_INIT_LOG(INFO,
|
||||
+ "virtio: using packed ring mergeable buffer Rx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->rx_pkt_burst =
|
||||
+ &virtio_recv_mergeable_pkts_packed;
|
||||
+ } else {
|
||||
+ PMD_INIT_LOG(INFO,
|
||||
+ "virtio: using packed ring standard Rx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->rx_pkt_burst = &virtio_recv_pkts_packed;
|
||||
+ }
|
||||
} else {
|
||||
- PMD_INIT_LOG(INFO, "virtio: using standard Rx path on port %u",
|
||||
- eth_dev->data->port_id);
|
||||
- eth_dev->rx_pkt_burst = &virtio_recv_pkts;
|
||||
+ if (hw->use_simple_rx) {
|
||||
+ PMD_INIT_LOG(INFO, "virtio: using simple Rx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->rx_pkt_burst = virtio_recv_pkts_vec;
|
||||
+ } else if (hw->use_inorder_rx) {
|
||||
+ PMD_INIT_LOG(INFO,
|
||||
+ "virtio: using inorder mergeable buffer Rx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->rx_pkt_burst =
|
||||
+ &virtio_recv_mergeable_pkts_inorder;
|
||||
+ } else if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) {
|
||||
+ PMD_INIT_LOG(INFO,
|
||||
+ "virtio: using mergeable buffer Rx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->rx_pkt_burst = &virtio_recv_mergeable_pkts;
|
||||
+ } else {
|
||||
+ PMD_INIT_LOG(INFO, "virtio: using standard Rx path on port %u",
|
||||
+ eth_dev->data->port_id);
|
||||
+ eth_dev->rx_pkt_burst = &virtio_recv_pkts;
|
||||
+ }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1944,6 +1960,12 @@ virtio_dev_configure(struct rte_eth_dev *dev)
|
||||
}
|
||||
}
|
||||
|
||||
+ if (vtpci_packed_queue(hw)) {
|
||||
+ hw->use_simple_rx = 0;
|
||||
+ hw->use_inorder_rx = 0;
|
||||
+ hw->use_inorder_tx = 0;
|
||||
+ }
|
||||
+
|
||||
#if defined RTE_ARCH_ARM64 || defined RTE_ARCH_ARM
|
||||
if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) {
|
||||
hw->use_simple_rx = 0;
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h
|
||||
index 05d355180..88b8c42a3 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.h
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.h
|
||||
@@ -73,10 +73,15 @@ int virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev,
|
||||
|
||||
uint16_t virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
|
||||
uint16_t nb_pkts);
|
||||
+uint16_t virtio_recv_pkts_packed(void *rx_queue, struct rte_mbuf **rx_pkts,
|
||||
+ uint16_t nb_pkts);
|
||||
|
||||
uint16_t virtio_recv_mergeable_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
|
||||
uint16_t nb_pkts);
|
||||
|
||||
+uint16_t virtio_recv_mergeable_pkts_packed(void *rx_queue,
|
||||
+ struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
|
||||
+
|
||||
uint16_t virtio_recv_mergeable_pkts_inorder(void *rx_queue,
|
||||
struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
|
||||
index ab74917a8..0bcf3b08a 100644
|
||||
--- a/drivers/net/virtio/virtio_rxtx.c
|
||||
+++ b/drivers/net/virtio/virtio_rxtx.c
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "virtqueue.h"
|
||||
#include "virtio_rxtx.h"
|
||||
#include "virtio_rxtx_simple.h"
|
||||
+#include "virtio_ring.h"
|
||||
|
||||
#ifdef RTE_LIBRTE_VIRTIO_DEBUG_DUMP
|
||||
#define VIRTIO_DUMP_PACKET(m, len) rte_pktmbuf_dump(stdout, m, len)
|
||||
@@ -105,6 +106,47 @@ vq_ring_free_id_packed(struct virtqueue *vq, uint16_t id)
|
||||
dxp->next = VQ_RING_DESC_CHAIN_END;
|
||||
}
|
||||
|
||||
+static uint16_t
|
||||
+virtqueue_dequeue_burst_rx_packed(struct virtqueue *vq,
|
||||
+ struct rte_mbuf **rx_pkts,
|
||||
+ uint32_t *len,
|
||||
+ uint16_t num)
|
||||
+{
|
||||
+ struct rte_mbuf *cookie;
|
||||
+ uint16_t used_idx;
|
||||
+ uint16_t id;
|
||||
+ struct vring_packed_desc *desc;
|
||||
+ uint16_t i;
|
||||
+
|
||||
+ desc = vq->ring_packed.desc_packed;
|
||||
+
|
||||
+ for (i = 0; i < num; i++) {
|
||||
+ used_idx = vq->vq_used_cons_idx;
|
||||
+ if (!desc_is_used(&desc[used_idx], vq))
|
||||
+ return i;
|
||||
+ len[i] = desc[used_idx].len;
|
||||
+ id = desc[used_idx].id;
|
||||
+ cookie = (struct rte_mbuf *)vq->vq_descx[id].cookie;
|
||||
+ if (unlikely(cookie == NULL)) {
|
||||
+ PMD_DRV_LOG(ERR, "vring descriptor with no mbuf cookie at %u",
|
||||
+ vq->vq_used_cons_idx);
|
||||
+ break;
|
||||
+ }
|
||||
+ rte_prefetch0(cookie);
|
||||
+ rte_packet_prefetch(rte_pktmbuf_mtod(cookie, void *));
|
||||
+ rx_pkts[i] = cookie;
|
||||
+
|
||||
+ vq->vq_free_cnt++;
|
||||
+ vq->vq_used_cons_idx++;
|
||||
+ if (vq->vq_used_cons_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_used_cons_idx -= vq->vq_nentries;
|
||||
+ vq->used_wrap_counter ^= 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return i;
|
||||
+}
|
||||
+
|
||||
static uint16_t
|
||||
virtqueue_dequeue_burst_rx(struct virtqueue *vq, struct rte_mbuf **rx_pkts,
|
||||
uint32_t *len, uint16_t num)
|
||||
@@ -350,6 +392,51 @@ virtqueue_enqueue_recv_refill(struct virtqueue *vq, struct rte_mbuf *cookie)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+virtqueue_enqueue_recv_refill_packed(struct virtqueue *vq,
|
||||
+ struct rte_mbuf **cookie, uint16_t num)
|
||||
+{
|
||||
+ struct vring_packed_desc *start_dp = vq->ring_packed.desc_packed;
|
||||
+ uint16_t flags = VRING_DESC_F_WRITE | vq->avail_used_flags;
|
||||
+ struct virtio_hw *hw = vq->hw;
|
||||
+ struct vq_desc_extra *dxp;
|
||||
+ uint16_t idx;
|
||||
+ int i;
|
||||
+
|
||||
+ if (unlikely(vq->vq_free_cnt == 0))
|
||||
+ return -ENOSPC;
|
||||
+ if (unlikely(vq->vq_free_cnt < num))
|
||||
+ return -EMSGSIZE;
|
||||
+
|
||||
+ for (i = 0; i < num; i++) {
|
||||
+ idx = vq->vq_avail_idx;
|
||||
+ dxp = &vq->vq_descx[idx];
|
||||
+ dxp->cookie = (void *)cookie[i];
|
||||
+ dxp->ndescs = 1;
|
||||
+
|
||||
+ start_dp[idx].addr = VIRTIO_MBUF_ADDR(cookie[i], vq) +
|
||||
+ RTE_PKTMBUF_HEADROOM - hw->vtnet_hdr_size;
|
||||
+ start_dp[idx].len = cookie[i]->buf_len - RTE_PKTMBUF_HEADROOM
|
||||
+ + hw->vtnet_hdr_size;
|
||||
+
|
||||
+ vq->vq_desc_head_idx = dxp->next;
|
||||
+ if (vq->vq_desc_head_idx == VQ_RING_DESC_CHAIN_END)
|
||||
+ vq->vq_desc_tail_idx = vq->vq_desc_head_idx;
|
||||
+ rte_smp_wmb();
|
||||
+ start_dp[idx].flags = flags;
|
||||
+ if (++vq->vq_avail_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_avail_idx -= vq->vq_nentries;
|
||||
+ vq->avail_wrap_counter ^= 1;
|
||||
+ vq->avail_used_flags =
|
||||
+ VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
+ flags = VRING_DESC_F_WRITE | vq->avail_used_flags;
|
||||
+ }
|
||||
+ }
|
||||
+ vq->vq_free_cnt = (uint16_t)(vq->vq_free_cnt - num);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* When doing TSO, the IP length is not included in the pseudo header
|
||||
* checksum of the packet given to the PMD, but for virtio it is
|
||||
* expected.
|
||||
@@ -801,7 +888,11 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)
|
||||
break;
|
||||
|
||||
/* Enqueue allocated buffers */
|
||||
- error = virtqueue_enqueue_recv_refill(vq, m);
|
||||
+ if (vtpci_packed_queue(vq->hw))
|
||||
+ error = virtqueue_enqueue_recv_refill_packed(vq,
|
||||
+ &m, 1);
|
||||
+ else
|
||||
+ error = virtqueue_enqueue_recv_refill(vq, m);
|
||||
if (error) {
|
||||
rte_pktmbuf_free(m);
|
||||
break;
|
||||
@@ -809,7 +900,8 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)
|
||||
nbufs++;
|
||||
}
|
||||
|
||||
- vq_update_avail_idx(vq);
|
||||
+ if (!vtpci_packed_queue(vq->hw))
|
||||
+ vq_update_avail_idx(vq);
|
||||
}
|
||||
|
||||
PMD_INIT_LOG(DEBUG, "Allocated %d bufs", nbufs);
|
||||
@@ -896,7 +988,10 @@ virtio_discard_rxbuf(struct virtqueue *vq, struct rte_mbuf *m)
|
||||
* Requeue the discarded mbuf. This should always be
|
||||
* successful since it was just dequeued.
|
||||
*/
|
||||
- error = virtqueue_enqueue_recv_refill(vq, m);
|
||||
+ if (vtpci_packed_queue(vq->hw))
|
||||
+ error = virtqueue_enqueue_recv_refill_packed(vq, &m, 1);
|
||||
+ else
|
||||
+ error = virtqueue_enqueue_recv_refill(vq, m);
|
||||
|
||||
if (unlikely(error)) {
|
||||
RTE_LOG(ERR, PMD, "cannot requeue discarded mbuf");
|
||||
@@ -1135,6 +1230,104 @@ virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
|
||||
return nb_rx;
|
||||
}
|
||||
|
||||
+uint16_t
|
||||
+virtio_recv_pkts_packed(void *rx_queue, struct rte_mbuf **rx_pkts,
|
||||
+ uint16_t nb_pkts)
|
||||
+{
|
||||
+ struct virtnet_rx *rxvq = rx_queue;
|
||||
+ struct virtqueue *vq = rxvq->vq;
|
||||
+ struct virtio_hw *hw = vq->hw;
|
||||
+ struct rte_mbuf *rxm, *new_mbuf;
|
||||
+ uint16_t num, nb_rx;
|
||||
+ uint32_t len[VIRTIO_MBUF_BURST_SZ];
|
||||
+ struct rte_mbuf *rcv_pkts[VIRTIO_MBUF_BURST_SZ];
|
||||
+ int error;
|
||||
+ uint32_t i, nb_enqueued;
|
||||
+ uint32_t hdr_size;
|
||||
+ struct virtio_net_hdr *hdr;
|
||||
+
|
||||
+ nb_rx = 0;
|
||||
+ if (unlikely(hw->started == 0))
|
||||
+ return nb_rx;
|
||||
+
|
||||
+ num = RTE_MIN(VIRTIO_MBUF_BURST_SZ, nb_pkts);
|
||||
+ if (likely(num > DESC_PER_CACHELINE))
|
||||
+ num = num - ((vq->vq_used_cons_idx + num) % DESC_PER_CACHELINE);
|
||||
+
|
||||
+ num = virtqueue_dequeue_burst_rx_packed(vq, rcv_pkts, len, num);
|
||||
+ PMD_RX_LOG(DEBUG, "dequeue:%d", num);
|
||||
+
|
||||
+ nb_enqueued = 0;
|
||||
+ hdr_size = hw->vtnet_hdr_size;
|
||||
+
|
||||
+ for (i = 0; i < num; i++) {
|
||||
+ rxm = rcv_pkts[i];
|
||||
+
|
||||
+ PMD_RX_LOG(DEBUG, "packet len:%d", len[i]);
|
||||
+
|
||||
+ if (unlikely(len[i] < hdr_size + ETHER_HDR_LEN)) {
|
||||
+ PMD_RX_LOG(ERR, "Packet drop");
|
||||
+ nb_enqueued++;
|
||||
+ virtio_discard_rxbuf(vq, rxm);
|
||||
+ rxvq->stats.errors++;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ rxm->port = rxvq->port_id;
|
||||
+ rxm->data_off = RTE_PKTMBUF_HEADROOM;
|
||||
+ rxm->ol_flags = 0;
|
||||
+ rxm->vlan_tci = 0;
|
||||
+
|
||||
+ rxm->pkt_len = (uint32_t)(len[i] - hdr_size);
|
||||
+ rxm->data_len = (uint16_t)(len[i] - hdr_size);
|
||||
+
|
||||
+ hdr = (struct virtio_net_hdr *)((char *)rxm->buf_addr +
|
||||
+ RTE_PKTMBUF_HEADROOM - hdr_size);
|
||||
+
|
||||
+ if (hw->vlan_strip)
|
||||
+ rte_vlan_strip(rxm);
|
||||
+
|
||||
+ if (hw->has_rx_offload && virtio_rx_offload(rxm, hdr) < 0) {
|
||||
+ virtio_discard_rxbuf(vq, rxm);
|
||||
+ rxvq->stats.errors++;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ virtio_rx_stats_updated(rxvq, rxm);
|
||||
+
|
||||
+ rx_pkts[nb_rx++] = rxm;
|
||||
+ }
|
||||
+
|
||||
+ rxvq->stats.packets += nb_rx;
|
||||
+
|
||||
+ /* Allocate new mbuf for the used descriptor */
|
||||
+ while (likely(!virtqueue_full(vq))) {
|
||||
+ new_mbuf = rte_mbuf_raw_alloc(rxvq->mpool);
|
||||
+ if (unlikely(new_mbuf == NULL)) {
|
||||
+ struct rte_eth_dev *dev =
|
||||
+ &rte_eth_devices[rxvq->port_id];
|
||||
+ dev->data->rx_mbuf_alloc_failed++;
|
||||
+ break;
|
||||
+ }
|
||||
+ error = virtqueue_enqueue_recv_refill_packed(vq, &new_mbuf, 1);
|
||||
+ if (unlikely(error)) {
|
||||
+ rte_pktmbuf_free(new_mbuf);
|
||||
+ break;
|
||||
+ }
|
||||
+ nb_enqueued++;
|
||||
+ }
|
||||
+
|
||||
+ if (likely(nb_enqueued)) {
|
||||
+ if (unlikely(virtqueue_kick_prepare_packed(vq))) {
|
||||
+ virtqueue_notify(vq);
|
||||
+ PMD_RX_LOG(DEBUG, "Notified");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return nb_rx;
|
||||
+}
|
||||
+
|
||||
+
|
||||
uint16_t
|
||||
virtio_recv_mergeable_pkts_inorder(void *rx_queue,
|
||||
struct rte_mbuf **rx_pkts,
|
||||
@@ -1493,6 +1686,182 @@ virtio_recv_mergeable_pkts(void *rx_queue,
|
||||
return nb_rx;
|
||||
}
|
||||
|
||||
+uint16_t
|
||||
+virtio_recv_mergeable_pkts_packed(void *rx_queue,
|
||||
+ struct rte_mbuf **rx_pkts,
|
||||
+ uint16_t nb_pkts)
|
||||
+{
|
||||
+ struct virtnet_rx *rxvq = rx_queue;
|
||||
+ struct virtqueue *vq = rxvq->vq;
|
||||
+ struct virtio_hw *hw = vq->hw;
|
||||
+ struct rte_mbuf *rxm;
|
||||
+ struct rte_mbuf *prev = NULL;
|
||||
+ uint16_t num, nb_rx = 0;
|
||||
+ uint32_t len[VIRTIO_MBUF_BURST_SZ];
|
||||
+ struct rte_mbuf *rcv_pkts[VIRTIO_MBUF_BURST_SZ];
|
||||
+ uint32_t nb_enqueued = 0;
|
||||
+ uint32_t seg_num = 0;
|
||||
+ uint32_t seg_res = 0;
|
||||
+ uint32_t hdr_size = hw->vtnet_hdr_size;
|
||||
+ int32_t i;
|
||||
+ int error;
|
||||
+
|
||||
+ if (unlikely(hw->started == 0))
|
||||
+ return nb_rx;
|
||||
+
|
||||
+
|
||||
+ num = nb_pkts;
|
||||
+ if (unlikely(num > VIRTIO_MBUF_BURST_SZ))
|
||||
+ num = VIRTIO_MBUF_BURST_SZ;
|
||||
+ if (likely(num > DESC_PER_CACHELINE))
|
||||
+ num = num - ((vq->vq_used_cons_idx + num) % DESC_PER_CACHELINE);
|
||||
+
|
||||
+ num = virtqueue_dequeue_burst_rx_packed(vq, rcv_pkts, len, num);
|
||||
+
|
||||
+ for (i = 0; i < num; i++) {
|
||||
+ struct virtio_net_hdr_mrg_rxbuf *header;
|
||||
+
|
||||
+ PMD_RX_LOG(DEBUG, "dequeue:%d", num);
|
||||
+ PMD_RX_LOG(DEBUG, "packet len:%d", len[i]);
|
||||
+
|
||||
+ rxm = rcv_pkts[i];
|
||||
+
|
||||
+ if (unlikely(len[i] < hdr_size + ETHER_HDR_LEN)) {
|
||||
+ PMD_RX_LOG(ERR, "Packet drop");
|
||||
+ nb_enqueued++;
|
||||
+ virtio_discard_rxbuf(vq, rxm);
|
||||
+ rxvq->stats.errors++;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ header = (struct virtio_net_hdr_mrg_rxbuf *)((char *)
|
||||
+ rxm->buf_addr + RTE_PKTMBUF_HEADROOM - hdr_size);
|
||||
+ seg_num = header->num_buffers;
|
||||
+
|
||||
+ if (seg_num == 0)
|
||||
+ seg_num = 1;
|
||||
+
|
||||
+ rxm->data_off = RTE_PKTMBUF_HEADROOM;
|
||||
+ rxm->nb_segs = seg_num;
|
||||
+ rxm->ol_flags = 0;
|
||||
+ rxm->vlan_tci = 0;
|
||||
+ rxm->pkt_len = (uint32_t)(len[i] - hdr_size);
|
||||
+ rxm->data_len = (uint16_t)(len[i] - hdr_size);
|
||||
+
|
||||
+ rxm->port = rxvq->port_id;
|
||||
+ rx_pkts[nb_rx] = rxm;
|
||||
+ prev = rxm;
|
||||
+
|
||||
+ if (hw->has_rx_offload &&
|
||||
+ virtio_rx_offload(rxm, &header->hdr) < 0) {
|
||||
+ virtio_discard_rxbuf(vq, rxm);
|
||||
+ rxvq->stats.errors++;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (hw->vlan_strip)
|
||||
+ rte_vlan_strip(rx_pkts[nb_rx]);
|
||||
+
|
||||
+ seg_res = seg_num - 1;
|
||||
+
|
||||
+ /* Merge remaining segments */
|
||||
+ while (seg_res != 0 && i < (num - 1)) {
|
||||
+ i++;
|
||||
+
|
||||
+ rxm = rcv_pkts[i];
|
||||
+ rxm->data_off = RTE_PKTMBUF_HEADROOM - hdr_size;
|
||||
+ rxm->pkt_len = (uint32_t)(len[i]);
|
||||
+ rxm->data_len = (uint16_t)(len[i]);
|
||||
+
|
||||
+ rx_pkts[nb_rx]->pkt_len += (uint32_t)(len[i]);
|
||||
+ rx_pkts[nb_rx]->data_len += (uint16_t)(len[i]);
|
||||
+
|
||||
+ if (prev)
|
||||
+ prev->next = rxm;
|
||||
+
|
||||
+ prev = rxm;
|
||||
+ seg_res -= 1;
|
||||
+ }
|
||||
+
|
||||
+ if (!seg_res) {
|
||||
+ virtio_rx_stats_updated(rxvq, rx_pkts[nb_rx]);
|
||||
+ nb_rx++;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Last packet still need merge segments */
|
||||
+ while (seg_res != 0) {
|
||||
+ uint16_t rcv_cnt = RTE_MIN((uint16_t)seg_res,
|
||||
+ VIRTIO_MBUF_BURST_SZ);
|
||||
+ if (likely(vq->vq_free_cnt >= rcv_cnt)) {
|
||||
+ num = virtqueue_dequeue_burst_rx_packed(vq, rcv_pkts,
|
||||
+ len, rcv_cnt);
|
||||
+ uint16_t extra_idx = 0;
|
||||
+
|
||||
+ rcv_cnt = num;
|
||||
+
|
||||
+ while (extra_idx < rcv_cnt) {
|
||||
+ rxm = rcv_pkts[extra_idx];
|
||||
+
|
||||
+ rxm->data_off =
|
||||
+ RTE_PKTMBUF_HEADROOM - hdr_size;
|
||||
+ rxm->pkt_len = (uint32_t)(len[extra_idx]);
|
||||
+ rxm->data_len = (uint16_t)(len[extra_idx]);
|
||||
+
|
||||
+ prev->next = rxm;
|
||||
+ prev = rxm;
|
||||
+ rx_pkts[nb_rx]->pkt_len += len[extra_idx];
|
||||
+ rx_pkts[nb_rx]->data_len += len[extra_idx];
|
||||
+ extra_idx += 1;
|
||||
+ }
|
||||
+ seg_res -= rcv_cnt;
|
||||
+ if (!seg_res) {
|
||||
+ virtio_rx_stats_updated(rxvq, rx_pkts[nb_rx]);
|
||||
+ nb_rx++;
|
||||
+ }
|
||||
+ } else {
|
||||
+ PMD_RX_LOG(ERR,
|
||||
+ "No enough segments for packet.");
|
||||
+ if (prev)
|
||||
+ virtio_discard_rxbuf(vq, prev);
|
||||
+ rxvq->stats.errors++;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ rxvq->stats.packets += nb_rx;
|
||||
+
|
||||
+ /* Allocate new mbuf for the used descriptor */
|
||||
+ if (likely(!virtqueue_full(vq))) {
|
||||
+ /* free_cnt may include mrg descs */
|
||||
+ uint16_t free_cnt = vq->vq_free_cnt;
|
||||
+ struct rte_mbuf *new_pkts[free_cnt];
|
||||
+
|
||||
+ if (!rte_pktmbuf_alloc_bulk(rxvq->mpool, new_pkts, free_cnt)) {
|
||||
+ error = virtqueue_enqueue_recv_refill_packed(vq,
|
||||
+ new_pkts, free_cnt);
|
||||
+ if (unlikely(error)) {
|
||||
+ for (i = 0; i < free_cnt; i++)
|
||||
+ rte_pktmbuf_free(new_pkts[i]);
|
||||
+ }
|
||||
+ nb_enqueued += free_cnt;
|
||||
+ } else {
|
||||
+ struct rte_eth_dev *dev =
|
||||
+ &rte_eth_devices[rxvq->port_id];
|
||||
+ dev->data->rx_mbuf_alloc_failed += free_cnt;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (likely(nb_enqueued)) {
|
||||
+ if (unlikely(virtqueue_kick_prepare_packed(vq))) {
|
||||
+ virtqueue_notify(vq);
|
||||
+ PMD_RX_LOG(DEBUG, "Notified");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return nb_rx;
|
||||
+}
|
||||
+
|
||||
uint16_t
|
||||
virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
uint16_t nb_pkts)
|
||||
diff --git a/drivers/net/virtio/virtqueue.c b/drivers/net/virtio/virtqueue.c
|
||||
index 56a77cc71..5b03f7a27 100644
|
||||
--- a/drivers/net/virtio/virtqueue.c
|
||||
+++ b/drivers/net/virtio/virtqueue.c
|
||||
@@ -54,9 +54,36 @@ virtqueue_detach_unused(struct virtqueue *vq)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+/* Flush used descs */
|
||||
+static void
|
||||
+virtqueue_rxvq_flush_packed(struct virtqueue *vq)
|
||||
+{
|
||||
+ struct vq_desc_extra *dxp;
|
||||
+ uint16_t i;
|
||||
+
|
||||
+ struct vring_packed_desc *descs = vq->ring_packed.desc_packed;
|
||||
+ int cnt = 0;
|
||||
+
|
||||
+ i = vq->vq_used_cons_idx;
|
||||
+ while (desc_is_used(&descs[i], vq) && cnt++ < vq->vq_nentries) {
|
||||
+ dxp = &vq->vq_descx[descs[i].id];
|
||||
+ if (dxp->cookie != NULL) {
|
||||
+ rte_pktmbuf_free(dxp->cookie);
|
||||
+ dxp->cookie = NULL;
|
||||
+ }
|
||||
+ vq->vq_free_cnt++;
|
||||
+ vq->vq_used_cons_idx++;
|
||||
+ if (vq->vq_used_cons_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_used_cons_idx -= vq->vq_nentries;
|
||||
+ vq->used_wrap_counter ^= 1;
|
||||
+ }
|
||||
+ i = vq->vq_used_cons_idx;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* Flush the elements in the used ring. */
|
||||
-void
|
||||
-virtqueue_rxvq_flush(struct virtqueue *vq)
|
||||
+static void
|
||||
+virtqueue_rxvq_flush_split(struct virtqueue *vq)
|
||||
{
|
||||
struct virtnet_rx *rxq = &vq->rxq;
|
||||
struct virtio_hw *hw = vq->hw;
|
||||
@@ -102,3 +129,15 @@ virtqueue_rxvq_flush(struct virtqueue *vq)
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+/* Flush the elements in the used ring. */
|
||||
+void
|
||||
+virtqueue_rxvq_flush(struct virtqueue *vq)
|
||||
+{
|
||||
+ struct virtio_hw *hw = vq->hw;
|
||||
+
|
||||
+ if (vtpci_packed_queue(hw))
|
||||
+ virtqueue_rxvq_flush_packed(vq);
|
||||
+ else
|
||||
+ virtqueue_rxvq_flush_split(vq);
|
||||
+}
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,142 +0,0 @@
|
||||
From d8d854a2f1814e10cf51ce88bf00b020167c772e Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:36 +0100
|
||||
Subject: [PATCH 07/18] net/virtio: support packed queue in send command
|
||||
|
||||
[ upstream commit ec194c2f189525b2fb4be5604422a28ea5f08acd ]
|
||||
|
||||
Use packed virtqueue format when reading and writing descriptors
|
||||
to/from the ring.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit ec194c2f189525b2fb4be5604422a28ea5f08acd)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 96 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 96 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index 4ef1da393..53773445b 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -141,6 +141,96 @@ static const struct rte_virtio_xstats_name_off rte_virtio_txq_stat_strings[] = {
|
||||
|
||||
struct virtio_hw_internal virtio_hw_internal[RTE_MAX_ETHPORTS];
|
||||
|
||||
+static struct virtio_pmd_ctrl *
|
||||
+virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
+ int *dlen, int pkt_num)
|
||||
+{
|
||||
+ struct virtqueue *vq = cvq->vq;
|
||||
+ int head;
|
||||
+ struct vring_packed_desc *desc = vq->ring_packed.desc_packed;
|
||||
+ struct virtio_pmd_ctrl *result;
|
||||
+ int wrap_counter;
|
||||
+ uint16_t flags;
|
||||
+ int sum = 0;
|
||||
+ int k;
|
||||
+
|
||||
+ /*
|
||||
+ * Format is enforced in qemu code:
|
||||
+ * One TX packet for header;
|
||||
+ * At least one TX packet per argument;
|
||||
+ * One RX packet for ACK.
|
||||
+ */
|
||||
+ head = vq->vq_avail_idx;
|
||||
+ wrap_counter = vq->avail_wrap_counter;
|
||||
+ desc[head].flags = VRING_DESC_F_NEXT;
|
||||
+ desc[head].addr = cvq->virtio_net_hdr_mem;
|
||||
+ desc[head].len = sizeof(struct virtio_net_ctrl_hdr);
|
||||
+ vq->vq_free_cnt--;
|
||||
+ if (++vq->vq_avail_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_avail_idx -= vq->vq_nentries;
|
||||
+ vq->avail_wrap_counter ^= 1;
|
||||
+ }
|
||||
+
|
||||
+ for (k = 0; k < pkt_num; k++) {
|
||||
+ desc[vq->vq_avail_idx].addr = cvq->virtio_net_hdr_mem
|
||||
+ + sizeof(struct virtio_net_ctrl_hdr)
|
||||
+ + sizeof(ctrl->status) + sizeof(uint8_t) * sum;
|
||||
+ desc[vq->vq_avail_idx].len = dlen[k];
|
||||
+ flags = VRING_DESC_F_NEXT;
|
||||
+ sum += dlen[k];
|
||||
+ vq->vq_free_cnt--;
|
||||
+ flags |= VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
+ desc[vq->vq_avail_idx].flags = flags;
|
||||
+ rte_smp_wmb();
|
||||
+ vq->vq_free_cnt--;
|
||||
+ if (++vq->vq_avail_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_avail_idx -= vq->vq_nentries;
|
||||
+ vq->avail_wrap_counter ^= 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ desc[vq->vq_avail_idx].addr = cvq->virtio_net_hdr_mem
|
||||
+ + sizeof(struct virtio_net_ctrl_hdr);
|
||||
+ desc[vq->vq_avail_idx].len = sizeof(ctrl->status);
|
||||
+ flags = VRING_DESC_F_WRITE;
|
||||
+ flags |= VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
+ desc[vq->vq_avail_idx].flags = flags;
|
||||
+ flags = VRING_DESC_F_NEXT;
|
||||
+ flags |= VRING_DESC_F_AVAIL(wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!wrap_counter);
|
||||
+ desc[head].flags = flags;
|
||||
+ rte_smp_wmb();
|
||||
+
|
||||
+ vq->vq_free_cnt--;
|
||||
+ if (++vq->vq_avail_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_avail_idx -= vq->vq_nentries;
|
||||
+ vq->avail_wrap_counter ^= 1;
|
||||
+ }
|
||||
+
|
||||
+ virtqueue_notify(vq);
|
||||
+
|
||||
+ /* wait for used descriptors in virtqueue */
|
||||
+ do {
|
||||
+ rte_rmb();
|
||||
+ usleep(100);
|
||||
+ } while (!desc_is_used(&desc[head], vq));
|
||||
+
|
||||
+ /* now get used descriptors */
|
||||
+ while (desc_is_used(&desc[vq->vq_used_cons_idx], vq)) {
|
||||
+ vq->vq_free_cnt++;
|
||||
+ if (++vq->vq_used_cons_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_used_cons_idx -= vq->vq_nentries;
|
||||
+ vq->used_wrap_counter ^= 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ result = cvq->virtio_net_hdr_mz->addr;
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
virtio_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
int *dlen, int pkt_num)
|
||||
@@ -174,6 +264,11 @@ virtio_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
memcpy(cvq->virtio_net_hdr_mz->addr, ctrl,
|
||||
sizeof(struct virtio_pmd_ctrl));
|
||||
|
||||
+ if (vtpci_packed_queue(vq->hw)) {
|
||||
+ result = virtio_pq_send_command(cvq, ctrl, dlen, pkt_num);
|
||||
+ goto out_unlock;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Format is enforced in qemu code:
|
||||
* One TX packet for header;
|
||||
@@ -245,6 +340,7 @@ virtio_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
|
||||
result = cvq->virtio_net_hdr_mz->addr;
|
||||
|
||||
+out_unlock:
|
||||
rte_spinlock_unlock(&cvq->lock);
|
||||
return result->status;
|
||||
}
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,139 +0,0 @@
|
||||
From 0cdcdd50e4cbb88737abfee1e545019500f11e38 Mon Sep 17 00:00:00 2001
|
||||
From: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:37 +0100
|
||||
Subject: [PATCH] net/virtio-user: add option to use packed queues
|
||||
|
||||
[ upstream commit 34f3966c7f81f947e9eebb347dec6a9f68eec4e6 ]
|
||||
|
||||
From: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
|
||||
Add option to enable packed queue support for virtio-user
|
||||
devices.
|
||||
|
||||
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 34f3966c7f81f947e9eebb347dec6a9f68eec4e6)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
.../net/virtio/virtio_user/virtio_user_dev.c | 20 ++++++++++++++-----
|
||||
.../net/virtio/virtio_user/virtio_user_dev.h | 2 +-
|
||||
drivers/net/virtio/virtio_user_ethdev.c | 14 ++++++++++++-
|
||||
3 files changed, 29 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
index f0051f887..7d0acaeb7 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-/* SPDX-License-Identifier: BSD-3-Clause
|
||||
+/* SPDX-License-Identifier: BSD-1-Clause
|
||||
* Copyright(c) 2010-2016 Intel Corporation
|
||||
*/
|
||||
|
||||
@@ -58,6 +58,8 @@ virtio_user_kick_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
|
||||
|
||||
state.index = queue_sel;
|
||||
state.num = 0; /* no reservation */
|
||||
+ if (dev->features & (1ULL << VIRTIO_F_RING_PACKED))
|
||||
+ state.num |= (1 << 15);
|
||||
dev->ops->send_request(dev, VHOST_USER_SET_VRING_BASE, &state);
|
||||
|
||||
dev->ops->send_request(dev, VHOST_USER_SET_VRING_ADDR, &addr);
|
||||
@@ -407,12 +409,13 @@ virtio_user_dev_setup(struct virtio_user_dev *dev)
|
||||
1ULL << VIRTIO_NET_F_GUEST_TSO4 | \
|
||||
1ULL << VIRTIO_NET_F_GUEST_TSO6 | \
|
||||
1ULL << VIRTIO_F_IN_ORDER | \
|
||||
- 1ULL << VIRTIO_F_VERSION_1)
|
||||
+ 1ULL << VIRTIO_F_VERSION_1 | \
|
||||
+ 1ULL << VIRTIO_F_RING_PACKED)
|
||||
|
||||
int
|
||||
virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
int cq, int queue_size, const char *mac, char **ifname,
|
||||
- int server, int mrg_rxbuf, int in_order)
|
||||
+ int server, int mrg_rxbuf, int in_order, int packed_vq)
|
||||
{
|
||||
pthread_mutex_init(&dev->mutex, NULL);
|
||||
snprintf(dev->path, PATH_MAX, "%s", path);
|
||||
@@ -465,10 +468,17 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
if (!in_order)
|
||||
dev->unsupported_features |= (1ull << VIRTIO_F_IN_ORDER);
|
||||
|
||||
- if (dev->mac_specified)
|
||||
- dev->frontend_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
+ if (packed_vq)
|
||||
+ dev->device_features |= (1ull << VIRTIO_F_RING_PACKED);
|
||||
else
|
||||
+ dev->device_features &= ~(1ull << VIRTIO_F_RING_PACKED);
|
||||
+
|
||||
+ if (dev->mac_specified) {
|
||||
+ dev->device_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
+ } else {
|
||||
+ dev->device_features &= ~(1ull << VIRTIO_NET_F_MAC);
|
||||
dev->unsupported_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
+ }
|
||||
|
||||
if (cq) {
|
||||
/* device does not really need to know anything about CQ,
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h
|
||||
index 3e3a7b787..67a9c01ac 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.h
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h
|
||||
@@ -50,7 +50,7 @@ int virtio_user_start_device(struct virtio_user_dev *dev);
|
||||
int virtio_user_stop_device(struct virtio_user_dev *dev);
|
||||
int virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
int cq, int queue_size, const char *mac, char **ifname,
|
||||
- int server, int mrg_rxbuf, int in_order);
|
||||
+ int server, int mrg_rxbuf, int in_order, int packed_vq);
|
||||
void virtio_user_dev_uninit(struct virtio_user_dev *dev);
|
||||
void virtio_user_handle_cq(struct virtio_user_dev *dev, uint16_t queue_idx);
|
||||
uint8_t virtio_user_handle_mq(struct virtio_user_dev *dev, uint16_t q_pairs);
|
||||
diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
index 5781c0948..daad8f452 100644
|
||||
--- a/drivers/net/virtio/virtio_user_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
@@ -361,6 +361,8 @@ static const char *valid_args[] = {
|
||||
VIRTIO_USER_ARG_MRG_RXBUF,
|
||||
#define VIRTIO_USER_ARG_IN_ORDER "in_order"
|
||||
VIRTIO_USER_ARG_IN_ORDER,
|
||||
+#define VIRTIO_USER_ARG_PACKED_VQ "packed_vq"
|
||||
+ VIRTIO_USER_ARG_PACKED_VQ,
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -468,6 +470,7 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)
|
||||
char *ifname = NULL;
|
||||
char *mac_addr = NULL;
|
||||
int ret = -1;
|
||||
+ uint64_t packed_vq = 0;
|
||||
|
||||
if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
|
||||
const char *name = rte_vdev_device_name(dev);
|
||||
@@ -571,6 +574,15 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)
|
||||
cq = 1;
|
||||
}
|
||||
|
||||
+ if (rte_kvargs_count(kvlist, VIRTIO_USER_ARG_PACKED_VQ) == 1) {
|
||||
+ if (rte_kvargs_process(kvlist, VIRTIO_USER_ARG_PACKED_VQ,
|
||||
+ &get_integer_arg, &packed_vq) < 0) {
|
||||
+ PMD_INIT_LOG(ERR, "error to parse %s",
|
||||
+ VIRTIO_USER_ARG_PACKED_VQ);
|
||||
+ goto end;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (queues > 1 && cq == 0) {
|
||||
PMD_INIT_LOG(ERR, "multi-q requires ctrl-q");
|
||||
goto end;
|
||||
@@ -610,7 +622,7 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)
|
||||
hw = eth_dev->data->dev_private;
|
||||
if (virtio_user_dev_init(hw->virtio_user_dev, path, queues, cq,
|
||||
queue_size, mac_addr, &ifname, server_mode,
|
||||
- mrg_rxbuf, in_order) < 0) {
|
||||
+ mrg_rxbuf, in_order, packed_vq) < 0) {
|
||||
PMD_INIT_LOG(ERR, "virtio_user_dev_init fails");
|
||||
virtio_user_eth_dev_free(eth_dev);
|
||||
goto end;
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,44 +0,0 @@
|
||||
From f5302062cbc98b3b8b1002cc48e7125a48ead96c Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:38 +0100
|
||||
Subject: [PATCH 09/18] net/virtio-user: fail if cq used with packed vq
|
||||
|
||||
[ upstream commit 07dd7e250d0128bf1edfd73e9d83bde09cdb11e9 ]
|
||||
|
||||
Until we have support for control virtqueues let's disable it and
|
||||
fail device initalization if specified as a parameter.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 07dd7e250d0128bf1edfd73e9d83bde09cdb11e9)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_user/virtio_user_dev.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
index 77cec1d3c..2f75091d5 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
@@ -467,10 +467,16 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
if (!in_order)
|
||||
dev->unsupported_features |= (1ull << VIRTIO_F_IN_ORDER);
|
||||
|
||||
- if (packed_vq)
|
||||
+ if (packed_vq) {
|
||||
+ if (cq) {
|
||||
+ PMD_INIT_LOG(ERR, "control vq not supported yet with "
|
||||
+ "packed virtqueues\n");
|
||||
+ return -1;
|
||||
+ }
|
||||
dev->device_features |= (1ull << VIRTIO_F_RING_PACKED);
|
||||
- else
|
||||
+ } else {
|
||||
dev->device_features &= ~(1ull << VIRTIO_F_RING_PACKED);
|
||||
+ }
|
||||
|
||||
if (dev->mac_specified) {
|
||||
dev->device_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,45 +0,0 @@
|
||||
From d1b8c268219498c865511b375b0c0c89244046f9 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 22:31:39 +0100
|
||||
Subject: [PATCH 10/18] net/virtio: enable packed virtqueues by default
|
||||
|
||||
[ upstream commit aea29aa5d37b40080cfc1f9a1acba239bf03922f ]
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit aea29aa5d37b40080cfc1f9a1acba239bf03922f)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.h | 1 +
|
||||
drivers/net/virtio/virtio_user/virtio_user_dev.c | 3 ++-
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h
|
||||
index 88b8c42a3..364ecbb50 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.h
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.h
|
||||
@@ -34,6 +34,7 @@
|
||||
1u << VIRTIO_RING_F_INDIRECT_DESC | \
|
||||
1ULL << VIRTIO_F_VERSION_1 | \
|
||||
1ULL << VIRTIO_F_IN_ORDER | \
|
||||
+ 1ULL << VIRTIO_F_RING_PACKED | \
|
||||
1ULL << VIRTIO_F_IOMMU_PLATFORM)
|
||||
|
||||
#define VIRTIO_PMD_SUPPORTED_GUEST_FEATURES \
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
index 2f75091d5..5999b7d9d 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
@@ -410,7 +410,8 @@ virtio_user_dev_setup(struct virtio_user_dev *dev)
|
||||
1ULL << VIRTIO_NET_F_GUEST_TSO6 | \
|
||||
1ULL << VIRTIO_F_IN_ORDER | \
|
||||
1ULL << VIRTIO_F_VERSION_1 | \
|
||||
- 1ULL << VIRTIO_F_RING_PACKED)
|
||||
+ 1ULL << VIRTIO_F_RING_PACKED | \
|
||||
+ 1ULL << VIRTIO_RING_F_EVENT_IDX)
|
||||
|
||||
int
|
||||
virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 440731f30a1257c3318badfcf17f5ab9e5085317 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Thu, 20 Dec 2018 11:56:24 +0100
|
||||
Subject: [PATCH 11/18] net/virtio: avoid double accounting of bytes
|
||||
|
||||
[ upstream commit 517ad3e018e31ab2596d1ece5369894703c850c2 ]
|
||||
|
||||
Accounting of bytes was moved to a common function, so at the moment we do
|
||||
it twice. This patches fixes it for sending packets with packed virtqueues.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 517ad3e018e31ab2596d1ece5369894703c850c2)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_rxtx.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
|
||||
index 0bcf3b08a..50eb4c694 100644
|
||||
--- a/drivers/net/virtio/virtio_rxtx.c
|
||||
+++ b/drivers/net/virtio/virtio_rxtx.c
|
||||
@@ -1931,7 +1931,6 @@ virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
/* Enqueue Packet buffers */
|
||||
virtqueue_enqueue_xmit_packed(txvq, txm, slots, can_push);
|
||||
|
||||
- txvq->stats.bytes += txm->pkt_len;
|
||||
virtio_update_packet_stats(&txvq->stats, txm);
|
||||
}
|
||||
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,85 +0,0 @@
|
||||
From ec53a1992df973607cbb10db6a0816ed2ef498dd Mon Sep 17 00:00:00 2001
|
||||
From: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Date: Thu, 3 Jan 2019 10:40:06 +0800
|
||||
Subject: [PATCH] net/virtio-user: fix packed vq option parsing
|
||||
|
||||
[ upstream commit 9070f88b81dab42739fb169265e3ea727e47dfa2 ]
|
||||
|
||||
Add the RING_PACKED feature to dev->unsupported_features
|
||||
when it's disabled, and add the missing packed vq param
|
||||
string. And also revert the unexpected change to MAC option
|
||||
introduced when adding packed vq option.
|
||||
|
||||
Fixes: 34f3966c7f81 ("net/virtio-user: add option to use packed queues")
|
||||
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 9070f88b81dab42739fb169265e3ea727e47dfa2)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_user/virtio_user_dev.c | 11 ++++-------
|
||||
drivers/net/virtio/virtio_user_ethdev.c | 7 ++++---
|
||||
2 files changed, 8 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
index 811b95c45..426682c93 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
@@ -475,17 +475,14 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
"packed virtqueues\n");
|
||||
return -1;
|
||||
}
|
||||
- dev->device_features |= (1ull << VIRTIO_F_RING_PACKED);
|
||||
} else {
|
||||
- dev->device_features &= ~(1ull << VIRTIO_F_RING_PACKED);
|
||||
+ dev->unsupported_features |= (1ull << VIRTIO_F_RING_PACKED);
|
||||
}
|
||||
|
||||
- if (dev->mac_specified) {
|
||||
- dev->device_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
- } else {
|
||||
- dev->device_features &= ~(1ull << VIRTIO_NET_F_MAC);
|
||||
+ if (dev->mac_specified)
|
||||
+ dev->frontend_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
+ else
|
||||
dev->unsupported_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
- }
|
||||
|
||||
if (cq) {
|
||||
/* device does not really need to know anything about CQ,
|
||||
diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
index daad8f452..a2911febf 100644
|
||||
--- a/drivers/net/virtio/virtio_user_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
@@ -361,7 +361,7 @@ static const char *valid_args[] = {
|
||||
VIRTIO_USER_ARG_MRG_RXBUF,
|
||||
#define VIRTIO_USER_ARG_IN_ORDER "in_order"
|
||||
VIRTIO_USER_ARG_IN_ORDER,
|
||||
-#define VIRTIO_USER_ARG_PACKED_VQ "packed_vq"
|
||||
+#define VIRTIO_USER_ARG_PACKED_VQ "packed_vq"
|
||||
VIRTIO_USER_ARG_PACKED_VQ,
|
||||
NULL
|
||||
};
|
||||
@@ -466,11 +466,11 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)
|
||||
uint64_t server_mode = VIRTIO_USER_DEF_SERVER_MODE;
|
||||
uint64_t mrg_rxbuf = 1;
|
||||
uint64_t in_order = 1;
|
||||
+ uint64_t packed_vq = 0;
|
||||
char *path = NULL;
|
||||
char *ifname = NULL;
|
||||
char *mac_addr = NULL;
|
||||
int ret = -1;
|
||||
- uint64_t packed_vq = 0;
|
||||
|
||||
if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
|
||||
const char *name = rte_vdev_device_name(dev);
|
||||
@@ -698,4 +698,5 @@ RTE_PMD_REGISTER_PARAM_STRING(net_virtio_user,
|
||||
"iface=<string> "
|
||||
"server=<0|1> "
|
||||
"mrg_rxbuf=<0|1> "
|
||||
- "in_order=<0|1>");
|
||||
+ "in_order=<0|1> "
|
||||
+ "packed_vq=<0|1>");
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From b6da125960fb1fb017427af5910b43ac81586850 Mon Sep 17 00:00:00 2001
|
||||
From: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Date: Thu, 3 Jan 2019 10:40:07 +0800
|
||||
Subject: [PATCH 13/18] net/virtio-user: fix supported features list
|
||||
|
||||
[ upstream commit 8532a0fcd8f2cf3a5d3189b453bd90a69991b1b1 ]
|
||||
|
||||
Currently virtio-user doesn't support event idx.
|
||||
|
||||
Fixes: aea29aa5d37b ("net/virtio: enable packed virtqueues by default")
|
||||
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 8532a0fcd8f2cf3a5d3189b453bd90a69991b1b1)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_user/virtio_user_dev.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
index c4e026096..77341f895 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
@@ -410,8 +410,7 @@ virtio_user_dev_setup(struct virtio_user_dev *dev)
|
||||
1ULL << VIRTIO_NET_F_GUEST_TSO6 | \
|
||||
1ULL << VIRTIO_F_IN_ORDER | \
|
||||
1ULL << VIRTIO_F_VERSION_1 | \
|
||||
- 1ULL << VIRTIO_F_RING_PACKED | \
|
||||
- 1ULL << VIRTIO_RING_F_EVENT_IDX)
|
||||
+ 1ULL << VIRTIO_F_RING_PACKED)
|
||||
|
||||
int
|
||||
virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,98 +0,0 @@
|
||||
From 82b43dd199d5492527b73002d4c3b009a98ca7a0 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 10:39:28 +0100
|
||||
Subject: [PATCH 14/18] net/virtio: check head desc with correct wrap counter
|
||||
|
||||
[ upstream commit a4270ea4ff79b46280dd542f4ab3eb45f8c9685a ]
|
||||
|
||||
In virtio_pq_send_command() we check for a used descriptor
|
||||
and wait in an idle loop until it becomes used. We can't use
|
||||
vq->used_wrap_counter here to check for the first descriptor
|
||||
we made available because the ring could have wrapped. Let's use
|
||||
the used_wrap_counter that matches the state of the head descriptor.
|
||||
|
||||
Fixes: ec194c2f1895 ("net/virtio: support packed queue in send command")
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit a4270ea4ff79b46280dd542f4ab3eb45f8c9685a)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 11 ++++++-----
|
||||
drivers/net/virtio/virtqueue.h | 10 ++++++++--
|
||||
2 files changed, 14 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index 53773445b..7bd38a292 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -149,7 +149,7 @@ virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
int head;
|
||||
struct vring_packed_desc *desc = vq->ring_packed.desc_packed;
|
||||
struct virtio_pmd_ctrl *result;
|
||||
- int wrap_counter;
|
||||
+ bool avail_wrap_counter, used_wrap_counter;
|
||||
uint16_t flags;
|
||||
int sum = 0;
|
||||
int k;
|
||||
@@ -161,7 +161,8 @@ virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
* One RX packet for ACK.
|
||||
*/
|
||||
head = vq->vq_avail_idx;
|
||||
- wrap_counter = vq->avail_wrap_counter;
|
||||
+ avail_wrap_counter = vq->avail_wrap_counter;
|
||||
+ used_wrap_counter = vq->used_wrap_counter;
|
||||
desc[head].flags = VRING_DESC_F_NEXT;
|
||||
desc[head].addr = cvq->virtio_net_hdr_mem;
|
||||
desc[head].len = sizeof(struct virtio_net_ctrl_hdr);
|
||||
@@ -199,8 +200,8 @@ virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
desc[vq->vq_avail_idx].flags = flags;
|
||||
flags = VRING_DESC_F_NEXT;
|
||||
- flags |= VRING_DESC_F_AVAIL(wrap_counter) |
|
||||
- VRING_DESC_F_USED(!wrap_counter);
|
||||
+ flags |= VRING_DESC_F_AVAIL(avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!avail_wrap_counter);
|
||||
desc[head].flags = flags;
|
||||
rte_smp_wmb();
|
||||
|
||||
@@ -216,7 +217,7 @@ virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
do {
|
||||
rte_rmb();
|
||||
usleep(100);
|
||||
- } while (!desc_is_used(&desc[head], vq));
|
||||
+ } while (!__desc_is_used(&desc[head], used_wrap_counter));
|
||||
|
||||
/* now get used descriptors */
|
||||
while (desc_is_used(&desc[vq->vq_used_cons_idx], vq)) {
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index b142fd488..75f5782bc 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -256,7 +256,7 @@ struct virtio_tx_region {
|
||||
};
|
||||
|
||||
static inline int
|
||||
-desc_is_used(struct vring_packed_desc *desc, struct virtqueue *vq)
|
||||
+__desc_is_used(struct vring_packed_desc *desc, bool wrap_counter)
|
||||
{
|
||||
uint16_t used, avail, flags;
|
||||
|
||||
@@ -264,7 +264,13 @@ desc_is_used(struct vring_packed_desc *desc, struct virtqueue *vq)
|
||||
used = !!(flags & VRING_DESC_F_USED(1));
|
||||
avail = !!(flags & VRING_DESC_F_AVAIL(1));
|
||||
|
||||
- return avail == used && used == vq->used_wrap_counter;
|
||||
+ return avail == used && used == wrap_counter;
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+desc_is_used(struct vring_packed_desc *desc, struct virtqueue *vq)
|
||||
+{
|
||||
+ return __desc_is_used(desc, vq->used_wrap_counter);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,277 +0,0 @@
|
||||
From 74bbcd238093edc81b1a1f0b9b6e0d3c3fe32584 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 10:39:29 +0100
|
||||
Subject: [PATCH] net/virtio-user: support control VQ for packed
|
||||
|
||||
[ upstream commit 48a4464029a7f76dfb2c1f09146a391917b075e5 ]
|
||||
|
||||
Add support to virtio-user for control virtqueues.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 48a4464029a7f76dfb2c1f09146a391917b075e5)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
.../net/virtio/virtio_user/virtio_user_dev.c | 102 ++++++++++++++++--
|
||||
.../net/virtio/virtio_user/virtio_user_dev.h | 15 ++-
|
||||
drivers/net/virtio/virtio_user_ethdev.c | 56 +++++++++-
|
||||
3 files changed, 157 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
index 2caaaad5f..83d3fb531 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
@@ -43,15 +43,26 @@ virtio_user_kick_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
|
||||
struct vhost_vring_file file;
|
||||
struct vhost_vring_state state;
|
||||
struct vring *vring = &dev->vrings[queue_sel];
|
||||
+ struct vring_packed *pq_vring = &dev->packed_vrings[queue_sel];
|
||||
struct vhost_vring_addr addr = {
|
||||
.index = queue_sel,
|
||||
- .desc_user_addr = (uint64_t)(uintptr_t)vring->desc,
|
||||
- .avail_user_addr = (uint64_t)(uintptr_t)vring->avail,
|
||||
- .used_user_addr = (uint64_t)(uintptr_t)vring->used,
|
||||
.log_guest_addr = 0,
|
||||
.flags = 0, /* disable log */
|
||||
};
|
||||
|
||||
+ if (dev->features & (1ULL << VIRTIO_F_RING_PACKED)) {
|
||||
+ addr.desc_user_addr =
|
||||
+ (uint64_t)(uintptr_t)pq_vring->desc_packed;
|
||||
+ addr.avail_user_addr =
|
||||
+ (uint64_t)(uintptr_t)pq_vring->driver_event;
|
||||
+ addr.used_user_addr =
|
||||
+ (uint64_t)(uintptr_t)pq_vring->device_event;
|
||||
+ } else {
|
||||
+ addr.desc_user_addr = (uint64_t)(uintptr_t)vring->desc;
|
||||
+ addr.avail_user_addr = (uint64_t)(uintptr_t)vring->avail;
|
||||
+ addr.used_user_addr = (uint64_t)(uintptr_t)vring->used;
|
||||
+ }
|
||||
+
|
||||
state.index = queue_sel;
|
||||
state.num = vring->num;
|
||||
dev->ops->send_request(dev, VHOST_USER_SET_VRING_NUM, &state);
|
||||
@@ -468,15 +479,8 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
if (!in_order)
|
||||
dev->unsupported_features |= (1ull << VIRTIO_F_IN_ORDER);
|
||||
|
||||
- if (packed_vq) {
|
||||
- if (cq) {
|
||||
- PMD_INIT_LOG(ERR, "control vq not supported yet with "
|
||||
- "packed virtqueues\n");
|
||||
- return -1;
|
||||
- }
|
||||
- } else {
|
||||
+ if (!packed_vq)
|
||||
dev->unsupported_features |= (1ull << VIRTIO_F_RING_PACKED);
|
||||
- }
|
||||
|
||||
if (dev->mac_specified)
|
||||
dev->frontend_features |= (1ull << VIRTIO_NET_F_MAC);
|
||||
@@ -621,6 +625,82 @@ virtio_user_handle_ctrl_msg(struct virtio_user_dev *dev, struct vring *vring,
|
||||
return n_descs;
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+desc_is_avail(struct vring_packed_desc *desc, bool wrap_counter)
|
||||
+{
|
||||
+ return wrap_counter == !!(desc->flags & VRING_DESC_F_AVAIL(1)) &&
|
||||
+ wrap_counter != !!(desc->flags & VRING_DESC_F_USED(1));
|
||||
+}
|
||||
+
|
||||
+static uint32_t
|
||||
+virtio_user_handle_ctrl_msg_pq(struct virtio_user_dev *dev,
|
||||
+ struct vring_packed *vring,
|
||||
+ uint16_t idx_hdr)
|
||||
+{
|
||||
+ struct virtio_net_ctrl_hdr *hdr;
|
||||
+ virtio_net_ctrl_ack status = ~0;
|
||||
+ uint16_t idx_data, idx_status;
|
||||
+ /* initialize to one, header is first */
|
||||
+ uint32_t n_descs = 1;
|
||||
+
|
||||
+ /* locate desc for header, data, and status */
|
||||
+ idx_data = idx_hdr + 1;
|
||||
+ if (idx_data >= dev->queue_size)
|
||||
+ idx_data -= dev->queue_size;
|
||||
+
|
||||
+ n_descs++;
|
||||
+
|
||||
+ idx_status = idx_data;
|
||||
+ while (vring->desc_packed[idx_status].flags & VRING_DESC_F_NEXT) {
|
||||
+ idx_status++;
|
||||
+ if (idx_status >= dev->queue_size)
|
||||
+ idx_status -= dev->queue_size;
|
||||
+ n_descs++;
|
||||
+ }
|
||||
+
|
||||
+ hdr = (void *)(uintptr_t)vring->desc_packed[idx_hdr].addr;
|
||||
+ if (hdr->class == VIRTIO_NET_CTRL_MQ &&
|
||||
+ hdr->cmd == VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET) {
|
||||
+ uint16_t queues;
|
||||
+
|
||||
+ queues = *(uint16_t *)(uintptr_t)
|
||||
+ vring->desc_packed[idx_data].addr;
|
||||
+ status = virtio_user_handle_mq(dev, queues);
|
||||
+ }
|
||||
+
|
||||
+ /* Update status */
|
||||
+ *(virtio_net_ctrl_ack *)(uintptr_t)
|
||||
+ vring->desc_packed[idx_status].addr = status;
|
||||
+
|
||||
+ return n_descs;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+virtio_user_handle_cq_packed(struct virtio_user_dev *dev, uint16_t queue_idx)
|
||||
+{
|
||||
+ struct virtio_user_queue *vq = &dev->packed_queues[queue_idx];
|
||||
+ struct vring_packed *vring = &dev->packed_vrings[queue_idx];
|
||||
+ uint16_t id, n_descs;
|
||||
+
|
||||
+ while (desc_is_avail(&vring->desc_packed[vq->used_idx],
|
||||
+ vq->used_wrap_counter)) {
|
||||
+ id = vring->desc_packed[vq->used_idx].id;
|
||||
+
|
||||
+ n_descs = virtio_user_handle_ctrl_msg_pq(dev, vring, id);
|
||||
+
|
||||
+ do {
|
||||
+ vring->desc_packed[vq->used_idx].flags =
|
||||
+ VRING_DESC_F_AVAIL(vq->used_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(vq->used_wrap_counter);
|
||||
+ if (++vq->used_idx >= dev->queue_size) {
|
||||
+ vq->used_idx -= dev->queue_size;
|
||||
+ vq->used_wrap_counter ^= 1;
|
||||
+ }
|
||||
+ n_descs--;
|
||||
+ } while (n_descs);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void
|
||||
virtio_user_handle_cq(struct virtio_user_dev *dev, uint16_t queue_idx)
|
||||
{
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h
|
||||
index 67a9c01ac..c6c2f7d6e 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.h
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h
|
||||
@@ -11,6 +11,12 @@
|
||||
#include "../virtio_ring.h"
|
||||
#include "vhost.h"
|
||||
|
||||
+struct virtio_user_queue {
|
||||
+ uint16_t used_idx;
|
||||
+ bool avail_wrap_counter;
|
||||
+ bool used_wrap_counter;
|
||||
+};
|
||||
+
|
||||
struct virtio_user_dev {
|
||||
/* for vhost_user backend */
|
||||
int vhostfd;
|
||||
@@ -39,7 +45,12 @@ struct virtio_user_dev {
|
||||
uint16_t port_id;
|
||||
uint8_t mac_addr[ETHER_ADDR_LEN];
|
||||
char path[PATH_MAX];
|
||||
- struct vring vrings[VIRTIO_MAX_VIRTQUEUES];
|
||||
+ union {
|
||||
+ struct vring vrings[VIRTIO_MAX_VIRTQUEUES];
|
||||
+ struct vring_packed packed_vrings[VIRTIO_MAX_VIRTQUEUES];
|
||||
+ };
|
||||
+ struct virtio_user_queue packed_queues[VIRTIO_MAX_VIRTQUEUES];
|
||||
+
|
||||
struct virtio_user_backend_ops *ops;
|
||||
pthread_mutex_t mutex;
|
||||
bool started;
|
||||
@@ -53,5 +64,7 @@ int virtio_user_dev_init(struct virtio_user_dev *dev, char *path, int queues,
|
||||
int server, int mrg_rxbuf, int in_order, int packed_vq);
|
||||
void virtio_user_dev_uninit(struct virtio_user_dev *dev);
|
||||
void virtio_user_handle_cq(struct virtio_user_dev *dev, uint16_t queue_idx);
|
||||
+void virtio_user_handle_cq_packed(struct virtio_user_dev *dev,
|
||||
+ uint16_t queue_idx);
|
||||
uint8_t virtio_user_handle_mq(struct virtio_user_dev *dev, uint16_t q_pairs);
|
||||
#endif
|
||||
diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
index a2911febf..dddb7dd23 100644
|
||||
--- a/drivers/net/virtio/virtio_user_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
@@ -271,10 +271,44 @@ virtio_user_get_queue_num(struct virtio_hw *hw, uint16_t queue_id __rte_unused)
|
||||
return dev->queue_size;
|
||||
}
|
||||
|
||||
-static int
|
||||
-virtio_user_setup_queue(struct virtio_hw *hw, struct virtqueue *vq)
|
||||
+static void
|
||||
+virtio_user_setup_queue_packed(struct virtqueue *vq,
|
||||
+ struct virtio_user_dev *dev)
|
||||
+
|
||||
+{
|
||||
+ uint16_t queue_idx = vq->vq_queue_index;
|
||||
+ struct vring_packed *vring;
|
||||
+ uint64_t desc_addr;
|
||||
+ uint64_t avail_addr;
|
||||
+ uint64_t used_addr;
|
||||
+ uint16_t i;
|
||||
+
|
||||
+ vring = &dev->packed_vrings[queue_idx];
|
||||
+ desc_addr = (uintptr_t)vq->vq_ring_virt_mem;
|
||||
+ avail_addr = desc_addr + vq->vq_nentries *
|
||||
+ sizeof(struct vring_packed_desc);
|
||||
+ used_addr = RTE_ALIGN_CEIL(avail_addr +
|
||||
+ sizeof(struct vring_packed_desc_event),
|
||||
+ VIRTIO_PCI_VRING_ALIGN);
|
||||
+ vring->num = vq->vq_nentries;
|
||||
+ vring->desc_packed =
|
||||
+ (void *)(uintptr_t)desc_addr;
|
||||
+ vring->driver_event =
|
||||
+ (void *)(uintptr_t)avail_addr;
|
||||
+ vring->device_event =
|
||||
+ (void *)(uintptr_t)used_addr;
|
||||
+ dev->packed_queues[queue_idx].avail_wrap_counter = true;
|
||||
+ dev->packed_queues[queue_idx].used_wrap_counter = true;
|
||||
+
|
||||
+ for (i = 0; i < vring->num; i++) {
|
||||
+ vring->desc_packed[i].flags = VRING_DESC_F_USED(1) |
|
||||
+ VRING_DESC_F_AVAIL(1);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+virtio_user_setup_queue_split(struct virtqueue *vq, struct virtio_user_dev *dev)
|
||||
{
|
||||
- struct virtio_user_dev *dev = virtio_user_get_dev(hw);
|
||||
uint16_t queue_idx = vq->vq_queue_index;
|
||||
uint64_t desc_addr, avail_addr, used_addr;
|
||||
|
||||
@@ -288,6 +322,17 @@ virtio_user_setup_queue(struct virtio_hw *hw, struct virtqueue *vq)
|
||||
dev->vrings[queue_idx].desc = (void *)(uintptr_t)desc_addr;
|
||||
dev->vrings[queue_idx].avail = (void *)(uintptr_t)avail_addr;
|
||||
dev->vrings[queue_idx].used = (void *)(uintptr_t)used_addr;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+virtio_user_setup_queue(struct virtio_hw *hw, struct virtqueue *vq)
|
||||
+{
|
||||
+ struct virtio_user_dev *dev = virtio_user_get_dev(hw);
|
||||
+
|
||||
+ if (vtpci_packed_queue(hw))
|
||||
+ virtio_user_setup_queue_packed(vq, dev);
|
||||
+ else
|
||||
+ virtio_user_setup_queue_split(vq, dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -317,7 +362,10 @@ virtio_user_notify_queue(struct virtio_hw *hw, struct virtqueue *vq)
|
||||
struct virtio_user_dev *dev = virtio_user_get_dev(hw);
|
||||
|
||||
if (hw->cvq && (hw->cvq->vq == vq)) {
|
||||
- virtio_user_handle_cq(dev, vq->vq_queue_index);
|
||||
+ if (vtpci_packed_queue(vq->hw))
|
||||
+ virtio_user_handle_cq_packed(dev, vq->vq_queue_index);
|
||||
+ else
|
||||
+ virtio_user_handle_cq(dev, vq->vq_queue_index);
|
||||
return;
|
||||
}
|
||||
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,197 +0,0 @@
|
||||
From c276398e43bec444eb207c3184f667b3d97361f8 Mon Sep 17 00:00:00 2001
|
||||
From: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Date: Wed, 23 Jan 2019 01:01:40 +0800
|
||||
Subject: [PATCH 16/18] net/virtio: fix control VQ
|
||||
|
||||
[ upstream commit 2923b8f9c41da37d63bd196ba2f037c154a6ebd5 ]
|
||||
|
||||
This patch mainly fixed below issues in the packed ring based
|
||||
control vq support in virtio driver:
|
||||
|
||||
1. When parsing the used descriptors, we have to track the
|
||||
number of descs that we need to skip;
|
||||
2. vq->vq_free_cnt was decreased twice for a same desc;
|
||||
|
||||
Meanwhile, make the function name consistent with other parts.
|
||||
|
||||
Fixes: ec194c2f1895 ("net/virtio: support packed queue in send command")
|
||||
Fixes: a4270ea4ff79 ("net/virtio: check head desc with correct wrap counter")
|
||||
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
[changed parameters to virtio_rmb/_wmb()]
|
||||
(cherry picked from commit 2923b8f9c41da37d63bd196ba2f037c154a6ebd5)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 62 ++++++++++++++----------------
|
||||
drivers/net/virtio/virtqueue.h | 12 +-----
|
||||
2 files changed, 31 insertions(+), 43 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index 7bd38a292..c12fb157e 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -142,16 +142,17 @@ static const struct rte_virtio_xstats_name_off rte_virtio_txq_stat_strings[] = {
|
||||
struct virtio_hw_internal virtio_hw_internal[RTE_MAX_ETHPORTS];
|
||||
|
||||
static struct virtio_pmd_ctrl *
|
||||
-virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
- int *dlen, int pkt_num)
|
||||
+virtio_send_command_packed(struct virtnet_ctl *cvq,
|
||||
+ struct virtio_pmd_ctrl *ctrl,
|
||||
+ int *dlen, int pkt_num)
|
||||
{
|
||||
struct virtqueue *vq = cvq->vq;
|
||||
int head;
|
||||
struct vring_packed_desc *desc = vq->ring_packed.desc_packed;
|
||||
struct virtio_pmd_ctrl *result;
|
||||
- bool avail_wrap_counter, used_wrap_counter;
|
||||
- uint16_t flags;
|
||||
+ bool avail_wrap_counter;
|
||||
int sum = 0;
|
||||
+ int nb_descs = 0;
|
||||
int k;
|
||||
|
||||
/*
|
||||
@@ -162,11 +163,10 @@ virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
*/
|
||||
head = vq->vq_avail_idx;
|
||||
avail_wrap_counter = vq->avail_wrap_counter;
|
||||
- used_wrap_counter = vq->used_wrap_counter;
|
||||
- desc[head].flags = VRING_DESC_F_NEXT;
|
||||
desc[head].addr = cvq->virtio_net_hdr_mem;
|
||||
desc[head].len = sizeof(struct virtio_net_ctrl_hdr);
|
||||
vq->vq_free_cnt--;
|
||||
+ nb_descs++;
|
||||
if (++vq->vq_avail_idx >= vq->vq_nentries) {
|
||||
vq->vq_avail_idx -= vq->vq_nentries;
|
||||
vq->avail_wrap_counter ^= 1;
|
||||
@@ -177,55 +177,51 @@ virtio_pq_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
+ sizeof(struct virtio_net_ctrl_hdr)
|
||||
+ sizeof(ctrl->status) + sizeof(uint8_t) * sum;
|
||||
desc[vq->vq_avail_idx].len = dlen[k];
|
||||
- flags = VRING_DESC_F_NEXT;
|
||||
+ desc[vq->vq_avail_idx].flags = VRING_DESC_F_NEXT |
|
||||
+ VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
sum += dlen[k];
|
||||
vq->vq_free_cnt--;
|
||||
- flags |= VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
- VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
- desc[vq->vq_avail_idx].flags = flags;
|
||||
- rte_smp_wmb();
|
||||
- vq->vq_free_cnt--;
|
||||
+ nb_descs++;
|
||||
if (++vq->vq_avail_idx >= vq->vq_nentries) {
|
||||
vq->vq_avail_idx -= vq->vq_nentries;
|
||||
vq->avail_wrap_counter ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
-
|
||||
desc[vq->vq_avail_idx].addr = cvq->virtio_net_hdr_mem
|
||||
+ sizeof(struct virtio_net_ctrl_hdr);
|
||||
desc[vq->vq_avail_idx].len = sizeof(ctrl->status);
|
||||
- flags = VRING_DESC_F_WRITE;
|
||||
- flags |= VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
- VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
- desc[vq->vq_avail_idx].flags = flags;
|
||||
- flags = VRING_DESC_F_NEXT;
|
||||
- flags |= VRING_DESC_F_AVAIL(avail_wrap_counter) |
|
||||
- VRING_DESC_F_USED(!avail_wrap_counter);
|
||||
- desc[head].flags = flags;
|
||||
- rte_smp_wmb();
|
||||
-
|
||||
+ desc[vq->vq_avail_idx].flags = VRING_DESC_F_WRITE |
|
||||
+ VRING_DESC_F_AVAIL(vq->avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!vq->avail_wrap_counter);
|
||||
vq->vq_free_cnt--;
|
||||
+ nb_descs++;
|
||||
if (++vq->vq_avail_idx >= vq->vq_nentries) {
|
||||
vq->vq_avail_idx -= vq->vq_nentries;
|
||||
vq->avail_wrap_counter ^= 1;
|
||||
}
|
||||
|
||||
+ virtio_wmb();
|
||||
+ desc[head].flags = VRING_DESC_F_NEXT |
|
||||
+ VRING_DESC_F_AVAIL(avail_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(!avail_wrap_counter);
|
||||
+
|
||||
+ virtio_wmb();
|
||||
virtqueue_notify(vq);
|
||||
|
||||
/* wait for used descriptors in virtqueue */
|
||||
- do {
|
||||
- rte_rmb();
|
||||
+ while (!desc_is_used(&desc[head], vq))
|
||||
usleep(100);
|
||||
- } while (!__desc_is_used(&desc[head], used_wrap_counter));
|
||||
+
|
||||
+ virtio_rmb();
|
||||
|
||||
/* now get used descriptors */
|
||||
- while (desc_is_used(&desc[vq->vq_used_cons_idx], vq)) {
|
||||
- vq->vq_free_cnt++;
|
||||
- if (++vq->vq_used_cons_idx >= vq->vq_nentries) {
|
||||
- vq->vq_used_cons_idx -= vq->vq_nentries;
|
||||
- vq->used_wrap_counter ^= 1;
|
||||
- }
|
||||
+ vq->vq_free_cnt += nb_descs;
|
||||
+ vq->vq_used_cons_idx += nb_descs;
|
||||
+ if (vq->vq_used_cons_idx >= vq->vq_nentries) {
|
||||
+ vq->vq_used_cons_idx -= vq->vq_nentries;
|
||||
+ vq->used_wrap_counter ^= 1;
|
||||
}
|
||||
|
||||
result = cvq->virtio_net_hdr_mz->addr;
|
||||
@@ -266,7 +262,7 @@ virtio_send_command(struct virtnet_ctl *cvq, struct virtio_pmd_ctrl *ctrl,
|
||||
sizeof(struct virtio_pmd_ctrl));
|
||||
|
||||
if (vtpci_packed_queue(vq->hw)) {
|
||||
- result = virtio_pq_send_command(cvq, ctrl, dlen, pkt_num);
|
||||
+ result = virtio_send_command_packed(cvq, ctrl, dlen, pkt_num);
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index 75f5782bc..9e74b7bd0 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -256,7 +256,7 @@ struct virtio_tx_region {
|
||||
};
|
||||
|
||||
static inline int
|
||||
-__desc_is_used(struct vring_packed_desc *desc, bool wrap_counter)
|
||||
+desc_is_used(struct vring_packed_desc *desc, struct virtqueue *vq)
|
||||
{
|
||||
uint16_t used, avail, flags;
|
||||
|
||||
@@ -264,16 +264,9 @@ __desc_is_used(struct vring_packed_desc *desc, bool wrap_counter)
|
||||
used = !!(flags & VRING_DESC_F_USED(1));
|
||||
avail = !!(flags & VRING_DESC_F_AVAIL(1));
|
||||
|
||||
- return avail == used && used == wrap_counter;
|
||||
-}
|
||||
-
|
||||
-static inline int
|
||||
-desc_is_used(struct vring_packed_desc *desc, struct virtqueue *vq)
|
||||
-{
|
||||
- return __desc_is_used(desc, vq->used_wrap_counter);
|
||||
+ return avail == used && used == vq->used_wrap_counter;
|
||||
}
|
||||
|
||||
-
|
||||
static inline void
|
||||
vring_desc_init_packed(struct virtqueue *vq, int n)
|
||||
{
|
||||
@@ -329,7 +322,6 @@ virtqueue_enable_intr_packed(struct virtqueue *vq)
|
||||
{
|
||||
uint16_t *event_flags = &vq->ring_packed.driver_event->desc_event_flags;
|
||||
|
||||
-
|
||||
if (vq->event_flags_shadow == RING_EVENT_FLAGS_DISABLE) {
|
||||
virtio_wmb();
|
||||
vq->event_flags_shadow = RING_EVENT_FLAGS_ENABLE;
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,146 +0,0 @@
|
||||
From e5ee642672921b9e83aaa558067b6b685a7af0a3 Mon Sep 17 00:00:00 2001
|
||||
From: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Date: Wed, 23 Jan 2019 01:01:41 +0800
|
||||
Subject: [PATCH 17/18] net/virtio-user: fix control VQ
|
||||
|
||||
[ upstream commit 45c224e73a3057bf62cb04f83fc1e97457a21ffa ]
|
||||
|
||||
This patch fixed below issues in the packed ring based control
|
||||
vq support in virtio user:
|
||||
|
||||
1. The idx_hdr should be used_idx instead of the id in the desc;
|
||||
2. We just need to write out a single used descriptor for each
|
||||
descriptor list;
|
||||
3. The avail/used bits should be initialized to 0;
|
||||
|
||||
Meanwhile, make the function name consistent with other parts.
|
||||
|
||||
Fixes: 48a4464029a7 ("net/virtio-user: support control VQ for packed")
|
||||
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
(cherry picked from commit 45c224e73a3057bf62cb04f83fc1e97457a21ffa)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 11 ++++++
|
||||
.../net/virtio/virtio_user/virtio_user_dev.c | 37 +++++++++++--------
|
||||
drivers/net/virtio/virtio_user_ethdev.c | 7 +---
|
||||
3 files changed, 34 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
||||
index c12fb157e..a31129484 100644
|
||||
--- a/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -224,6 +224,17 @@ virtio_send_command_packed(struct virtnet_ctl *cvq,
|
||||
vq->used_wrap_counter ^= 1;
|
||||
}
|
||||
|
||||
+ PMD_INIT_LOG(DEBUG, "vq->vq_free_cnt=%d\n"
|
||||
+ "vq->vq_avail_idx=%d\n"
|
||||
+ "vq->vq_used_cons_idx=%d\n"
|
||||
+ "vq->avail_wrap_counter=%d\n"
|
||||
+ "vq->used_wrap_counter=%d\n",
|
||||
+ vq->vq_free_cnt,
|
||||
+ vq->vq_avail_idx,
|
||||
+ vq->vq_used_cons_idx,
|
||||
+ vq->avail_wrap_counter,
|
||||
+ vq->used_wrap_counter);
|
||||
+
|
||||
result = cvq->virtio_net_hdr_mz->addr;
|
||||
return result;
|
||||
}
|
||||
diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
index ea5149929..d1157378d 100644
|
||||
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
|
||||
@@ -632,9 +632,9 @@ desc_is_avail(struct vring_packed_desc *desc, bool wrap_counter)
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
-virtio_user_handle_ctrl_msg_pq(struct virtio_user_dev *dev,
|
||||
- struct vring_packed *vring,
|
||||
- uint16_t idx_hdr)
|
||||
+virtio_user_handle_ctrl_msg_packed(struct virtio_user_dev *dev,
|
||||
+ struct vring_packed *vring,
|
||||
+ uint16_t idx_hdr)
|
||||
{
|
||||
struct virtio_net_ctrl_hdr *hdr;
|
||||
virtio_net_ctrl_ack status = ~0;
|
||||
@@ -671,6 +671,10 @@ virtio_user_handle_ctrl_msg_pq(struct virtio_user_dev *dev,
|
||||
*(virtio_net_ctrl_ack *)(uintptr_t)
|
||||
vring->desc_packed[idx_status].addr = status;
|
||||
|
||||
+ /* Update used descriptor */
|
||||
+ vring->desc_packed[idx_hdr].id = vring->desc_packed[idx_status].id;
|
||||
+ vring->desc_packed[idx_hdr].len = sizeof(status);
|
||||
+
|
||||
return n_descs;
|
||||
}
|
||||
|
||||
@@ -679,24 +683,25 @@ virtio_user_handle_cq_packed(struct virtio_user_dev *dev, uint16_t queue_idx)
|
||||
{
|
||||
struct virtio_user_queue *vq = &dev->packed_queues[queue_idx];
|
||||
struct vring_packed *vring = &dev->packed_vrings[queue_idx];
|
||||
- uint16_t id, n_descs;
|
||||
+ uint16_t n_descs;
|
||||
|
||||
while (desc_is_avail(&vring->desc_packed[vq->used_idx],
|
||||
vq->used_wrap_counter)) {
|
||||
- id = vring->desc_packed[vq->used_idx].id;
|
||||
|
||||
- n_descs = virtio_user_handle_ctrl_msg_pq(dev, vring, id);
|
||||
+ n_descs = virtio_user_handle_ctrl_msg_packed(dev, vring,
|
||||
+ vq->used_idx);
|
||||
|
||||
- do {
|
||||
- vring->desc_packed[vq->used_idx].flags =
|
||||
- VRING_DESC_F_AVAIL(vq->used_wrap_counter) |
|
||||
- VRING_DESC_F_USED(vq->used_wrap_counter);
|
||||
- if (++vq->used_idx >= dev->queue_size) {
|
||||
- vq->used_idx -= dev->queue_size;
|
||||
- vq->used_wrap_counter ^= 1;
|
||||
- }
|
||||
- n_descs--;
|
||||
- } while (n_descs);
|
||||
+ rte_smp_wmb();
|
||||
+ vring->desc_packed[vq->used_idx].flags =
|
||||
+ VRING_DESC_F_WRITE |
|
||||
+ VRING_DESC_F_AVAIL(vq->used_wrap_counter) |
|
||||
+ VRING_DESC_F_USED(vq->used_wrap_counter);
|
||||
+
|
||||
+ vq->used_idx += n_descs;
|
||||
+ if (vq->used_idx >= dev->queue_size) {
|
||||
+ vq->used_idx -= dev->queue_size;
|
||||
+ vq->used_wrap_counter ^= 1;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
index c01f45cab..6423e1f61 100644
|
||||
--- a/drivers/net/virtio/virtio_user_ethdev.c
|
||||
+++ b/drivers/net/virtio/virtio_user_ethdev.c
|
||||
@@ -274,7 +274,6 @@ virtio_user_get_queue_num(struct virtio_hw *hw, uint16_t queue_id __rte_unused)
|
||||
static void
|
||||
virtio_user_setup_queue_packed(struct virtqueue *vq,
|
||||
struct virtio_user_dev *dev)
|
||||
-
|
||||
{
|
||||
uint16_t queue_idx = vq->vq_queue_index;
|
||||
struct vring_packed *vring;
|
||||
@@ -300,10 +299,8 @@ virtio_user_setup_queue_packed(struct virtqueue *vq,
|
||||
dev->packed_queues[queue_idx].avail_wrap_counter = true;
|
||||
dev->packed_queues[queue_idx].used_wrap_counter = true;
|
||||
|
||||
- for (i = 0; i < vring->num; i++) {
|
||||
- vring->desc_packed[i].flags = VRING_DESC_F_USED(1) |
|
||||
- VRING_DESC_F_AVAIL(1);
|
||||
- }
|
||||
+ for (i = 0; i < vring->num; i++)
|
||||
+ vring->desc_packed[i].flags = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,97 +0,0 @@
|
||||
From f3bf9a1a9b1ad3419b436855306ad8b5d8efab2f Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
Date: Thu, 20 Dec 2018 17:47:55 +0100
|
||||
Subject: [PATCH 18/18] vhost: batch used descs chains write-back with packed
|
||||
ring
|
||||
|
||||
[ upstream commit b473ec1131ee44ee25e0536a04be65246b93f4f3 ]
|
||||
|
||||
Instead of writing back descriptors chains in order, let's
|
||||
write the first chain flags last in order to improve batching.
|
||||
|
||||
Also, move the write barrier in logging cache sync, so that it
|
||||
is done only when logging is enabled. It means there is now
|
||||
one more barrier for split ring when logging is enabled.
|
||||
|
||||
With Kernel's pktgen benchmark, ~3% performance gain is measured.
|
||||
|
||||
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Reviewed-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
(cherry picked from commit b473ec1131ee44ee25e0536a04be65246b93f4f3)
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
lib/librte_vhost/vhost.h | 7 ++-----
|
||||
lib/librte_vhost/virtio_net.c | 19 ++++++++++++++++---
|
||||
2 files changed, 18 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
|
||||
index 552b9298d..adc2fb78e 100644
|
||||
--- a/lib/librte_vhost/vhost.h
|
||||
+++ b/lib/librte_vhost/vhost.h
|
||||
@@ -456,12 +456,9 @@ vhost_log_cache_sync(struct virtio_net *dev, struct vhost_virtqueue *vq)
|
||||
!dev->log_base))
|
||||
return;
|
||||
|
||||
- log_base = (unsigned long *)(uintptr_t)dev->log_base;
|
||||
+ rte_smp_wmb();
|
||||
|
||||
- /*
|
||||
- * It is expected a write memory barrier has been issued
|
||||
- * before this function is called.
|
||||
- */
|
||||
+ log_base = (unsigned long *)(uintptr_t)dev->log_base;
|
||||
|
||||
for (i = 0; i < vq->log_cache_nb_elem; i++) {
|
||||
struct log_cache_entry *elem = vq->log_cache + i;
|
||||
diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
|
||||
index 15d682c3c..ec70ef947 100644
|
||||
--- a/lib/librte_vhost/virtio_net.c
|
||||
+++ b/lib/librte_vhost/virtio_net.c
|
||||
@@ -136,6 +136,8 @@ flush_shadow_used_ring_packed(struct virtio_net *dev,
|
||||
{
|
||||
int i;
|
||||
uint16_t used_idx = vq->last_used_idx;
|
||||
+ uint16_t head_idx = vq->last_used_idx;
|
||||
+ uint16_t head_flags = 0;
|
||||
|
||||
/* Split loop in two to save memory barriers */
|
||||
for (i = 0; i < vq->shadow_used_idx; i++) {
|
||||
@@ -165,12 +167,17 @@ flush_shadow_used_ring_packed(struct virtio_net *dev,
|
||||
flags &= ~VRING_DESC_F_AVAIL;
|
||||
}
|
||||
|
||||
- vq->desc_packed[vq->last_used_idx].flags = flags;
|
||||
+ if (i > 0) {
|
||||
+ vq->desc_packed[vq->last_used_idx].flags = flags;
|
||||
|
||||
- vhost_log_cache_used_vring(dev, vq,
|
||||
+ vhost_log_cache_used_vring(dev, vq,
|
||||
vq->last_used_idx *
|
||||
sizeof(struct vring_packed_desc),
|
||||
sizeof(struct vring_packed_desc));
|
||||
+ } else {
|
||||
+ head_idx = vq->last_used_idx;
|
||||
+ head_flags = flags;
|
||||
+ }
|
||||
|
||||
vq->last_used_idx += vq->shadow_used_packed[i].count;
|
||||
if (vq->last_used_idx >= vq->size) {
|
||||
@@ -179,7 +186,13 @@ flush_shadow_used_ring_packed(struct virtio_net *dev,
|
||||
}
|
||||
}
|
||||
|
||||
- rte_smp_wmb();
|
||||
+ vq->desc_packed[head_idx].flags = head_flags;
|
||||
+
|
||||
+ vhost_log_cache_used_vring(dev, vq,
|
||||
+ head_idx *
|
||||
+ sizeof(struct vring_packed_desc),
|
||||
+ sizeof(struct vring_packed_desc));
|
||||
+
|
||||
vq->shadow_used_idx = 0;
|
||||
vhost_log_cache_sync(dev, vq);
|
||||
}
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,42 +0,0 @@
|
||||
From daa23dec25e8e418cd4e921531c82b5aae39b362 Mon Sep 17 00:00:00 2001
|
||||
From: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Date: Tue, 19 Mar 2019 14:43:04 +0800
|
||||
Subject: [PATCH] net/virtio: fix interrupt helper for packed ring
|
||||
|
||||
When disabling interrupt, the shadow event flags should also be
|
||||
updated accordingly. The unnecessary wmb is also dropped.
|
||||
|
||||
Fixes: e9f4feb7e622 ("net/virtio: add packed virtqueue helpers")
|
||||
Cc: stable@dpdk.org
|
||||
|
||||
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
|
||||
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtqueue.h | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
|
||||
index 9e74b7bd0..c9f1c0afa 100644
|
||||
--- a/drivers/net/virtio/virtqueue.h
|
||||
+++ b/drivers/net/virtio/virtqueue.h
|
||||
@@ -296,12 +296,13 @@ vring_desc_init_split(struct vring_desc *dp, uint16_t n)
|
||||
static inline void
|
||||
virtqueue_disable_intr_packed(struct virtqueue *vq)
|
||||
{
|
||||
- uint16_t *event_flags = &vq->ring_packed.driver_event->desc_event_flags;
|
||||
-
|
||||
- *event_flags = RING_EVENT_FLAGS_DISABLE;
|
||||
+ if (vq->event_flags_shadow != RING_EVENT_FLAGS_DISABLE) {
|
||||
+ vq->event_flags_shadow = RING_EVENT_FLAGS_DISABLE;
|
||||
+ vq->ring_packed.driver_event->desc_event_flags =
|
||||
+ vq->event_flags_shadow;
|
||||
+ }
|
||||
}
|
||||
|
||||
-
|
||||
/**
|
||||
* Tell the backend not to interrupt us.
|
||||
*/
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,30 +0,0 @@
|
||||
From f2e20b51ac6432390ea545e2b6247419dfcaab40 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Freimann <jfreimann@redhat.com>
|
||||
Date: Mon, 16 Sep 2019 17:26:16 +0200
|
||||
Subject: [PATCH] net/virtio: fix calculation of device_event ptr
|
||||
|
||||
Fix wrong pointer arithmetic. We only need to increment by 1 if we want
|
||||
to advance it by the size of the driver event area.
|
||||
|
||||
Signed-off-by: Jens Freimann <jfreimann@redhat.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ring.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/virtio/virtio_ring.h b/drivers/net/virtio/virtio_ring.h
|
||||
index 1760823c6..fdc62194e 100644
|
||||
--- a/drivers/net/virtio/virtio_ring.h
|
||||
+++ b/drivers/net/virtio/virtio_ring.h
|
||||
@@ -165,8 +165,7 @@ vring_init_packed(struct vring_packed *vr, uint8_t *p, unsigned long align,
|
||||
vr->driver_event = (struct vring_packed_desc_event *)(p +
|
||||
vr->num * sizeof(struct vring_packed_desc));
|
||||
vr->device_event = (struct vring_packed_desc_event *)
|
||||
- RTE_ALIGN_CEIL((uintptr_t)(vr->driver_event +
|
||||
- sizeof(struct vring_packed_desc_event)), align);
|
||||
+ RTE_ALIGN_CEIL((uintptr_t)(vr->driver_event + 1), align);
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,4 +1,4 @@
|
||||
# -*- cfg-sha: 9fc8b53ccd53cc8b64391f6252e1dba558ae660a73a72f10dcadff2ca5462243
|
||||
# -*- cfg-sha: 8e145b9de53caa9b4fad9cff2d74d106d954d4e8f45009c458b64fb576f13124
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2015 Cavium, Inc
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
@ -7,6 +7,14 @@
|
||||
# Copyright(c) 2010-2016 Intel Corporation
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2010-2017 Intel Corporation
|
||||
# String that appears before the version number
|
||||
CONFIG_RTE_VER_PREFIX="DPDK"
|
||||
# Version information completed when this file is processed for a build
|
||||
CONFIG_RTE_VER_YEAR=19
|
||||
CONFIG_RTE_VER_MONTH=11
|
||||
CONFIG_RTE_VER_MINOR=0
|
||||
CONFIG_RTE_VER_SUFFIX=""
|
||||
CONFIG_RTE_VER_RELEASE=99
|
||||
# RTE_EXEC_ENV values are the directories in mk/exec-env/
|
||||
CONFIG_RTE_EXEC_ENV="linuxapp"
|
||||
# RTE_ARCH values are architecture we compile for. directories in mk/arch/
|
||||
@ -21,12 +29,12 @@ CONFIG_RTE_TOOLCHAIN="gcc"
|
||||
CONFIG_RTE_FORCE_INTRINSICS=y
|
||||
# Machine forces strict alignment constraints.
|
||||
CONFIG_RTE_ARCH_STRICT_ALIGN=n
|
||||
# Enable link time optimization
|
||||
CONFIG_RTE_ENABLE_LTO=n
|
||||
# Compile to share library
|
||||
CONFIG_RTE_BUILD_SHARED_LIB=y
|
||||
# Use newest code breaking previous ABI
|
||||
CONFIG_RTE_NEXT_ABI=n
|
||||
# Major ABI to overwrite library specific LIBABIVER
|
||||
CONFIG_RTE_MAJOR_ABI=
|
||||
# Machine's cache line size
|
||||
CONFIG_RTE_CACHE_LINE_SIZE=128
|
||||
# Memory model
|
||||
@ -57,7 +65,6 @@ CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
|
||||
CONFIG_RTE_LOG_HISTORY=256
|
||||
CONFIG_RTE_BACKTRACE=y
|
||||
CONFIG_RTE_LIBEAL_USE_HPET=n
|
||||
CONFIG_RTE_EAL_ALLOW_INV_SOCKET_ID=n
|
||||
CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
|
||||
CONFIG_RTE_EAL_IGB_UIO=n
|
||||
CONFIG_RTE_EAL_VFIO=y
|
||||
@ -71,6 +78,8 @@ CONFIG_RTE_USE_LIBBSD=n
|
||||
# field test and possible optimization.
|
||||
CONFIG_RTE_ENABLE_AVX=y
|
||||
CONFIG_RTE_ENABLE_AVX512=n
|
||||
# Use ARM LSE ATOMIC instructions
|
||||
CONFIG_RTE_ARM_FEATURE_ATOMICS=n
|
||||
# Default driver path (or "" to disable)
|
||||
CONFIG_RTE_EAL_PMD_PATH="/usr/lib64/dpdk-pmds"
|
||||
# Compile Environment Abstraction Layer to support Vmware TSC map
|
||||
@ -122,12 +131,8 @@ CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
|
||||
CONFIG_RTE_LIBRTE_BNXT_PMD=n
|
||||
# Compile burst-oriented Chelsio Terminator (CXGBE) PMD
|
||||
CONFIG_RTE_LIBRTE_CXGBE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_REG=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_MBOX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_TPUT=y
|
||||
# Compile burst-oriented NXP PFE PMD driver
|
||||
CONFIG_RTE_LIBRTE_PFE_PMD=n
|
||||
# NXP DPAA Bus
|
||||
CONFIG_RTE_LIBRTE_DPAA_BUS=n
|
||||
CONFIG_RTE_LIBRTE_DPAA_MEMPOOL=n
|
||||
@ -158,6 +163,10 @@ CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_E1000_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_E1000_PF_DISABLE_STRIP_CRC=n
|
||||
# Compile burst-oriented HINIC PMD driver
|
||||
CONFIG_RTE_LIBRTE_HINIC_PMD=n
|
||||
# Compile burst-oriented HNS3 PMD driver
|
||||
CONFIG_RTE_LIBRTE_HNS3_PMD=n
|
||||
# Compile burst-oriented IXGBE PMD driver
|
||||
CONFIG_RTE_LIBRTE_IXGBE_PMD=y
|
||||
CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=n
|
||||
@ -183,22 +192,34 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
|
||||
CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
|
||||
# Compile burst-oriented AVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_AVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_AVF_INC_VECTOR=y
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_AVF_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented ICE PMD driver
|
||||
CONFIG_RTE_LIBRTE_ICE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC=y
|
||||
CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented IAVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_IAVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_DUMP_DESC=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented IPN3KE PMD driver
|
||||
CONFIG_RTE_LIBRTE_IPN3KE_PMD=n
|
||||
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
|
||||
CONFIG_RTE_LIBRTE_MLX4_PMD=n
|
||||
CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS=n
|
||||
# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5 & Bluefield
|
||||
# (MLX5) PMD
|
||||
# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5,
|
||||
# ConnectX-6 & Bluefield (MLX5) PMD
|
||||
CONFIG_RTE_LIBRTE_MLX5_PMD=n
|
||||
CONFIG_RTE_LIBRTE_MLX5_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS=n
|
||||
# Linking method for mlx4/5 dependency on ibverbs and related libraries
|
||||
# Default linking is dynamic by linker.
|
||||
# Other options are: dynamic by dlopen at run-time, or statically embedded.
|
||||
CONFIG_RTE_IBVERBS_LINK_DLOPEN=n
|
||||
CONFIG_RTE_IBVERBS_LINK_STATIC=n
|
||||
# Compile burst-oriented Netronome NFP PMD driver
|
||||
CONFIG_RTE_LIBRTE_NFP_PMD=n
|
||||
CONFIG_RTE_LIBRTE_NFP_DEBUG_TX=n
|
||||
@ -215,6 +236,8 @@ CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n
|
||||
# Compile software PMD backed by SZEDATA2 device
|
||||
CONFIG_RTE_LIBRTE_PMD_SZEDATA2=n
|
||||
# Compile software PMD backed by NFB device
|
||||
CONFIG_RTE_LIBRTE_NFB_PMD=n
|
||||
# Compile burst-oriented Cavium Thunderx NICVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
|
||||
@ -227,6 +250,8 @@ CONFIG_RTE_LIBRTE_LIO_DEBUG_MBOX=n
|
||||
CONFIG_RTE_LIBRTE_LIO_DEBUG_REGS=n
|
||||
# Compile burst-oriented Cavium OCTEONTX network PMD driver
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX_PMD=n
|
||||
# Compile burst-oriented Marvell OCTEON TX2 network PMD driver
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX2_PMD=n
|
||||
# Compile WRS accelerated virtual port (AVP) guest PMD driver
|
||||
CONFIG_RTE_LIBRTE_AVP_PMD=n
|
||||
CONFIG_RTE_LIBRTE_AVP_DEBUG_RX=n
|
||||
@ -246,6 +271,10 @@ CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX_FREE=n
|
||||
# Compile software PMD backed by AF_PACKET sockets (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n
|
||||
# Compile software PMD backed by AF_XDP sockets (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_AF_XDP=n
|
||||
# Compile Memory Interface PMD driver (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_MEMIF=n
|
||||
# Compile link bonding PMD library
|
||||
CONFIG_RTE_LIBRTE_PMD_BOND=n
|
||||
CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
|
||||
@ -283,12 +312,17 @@ CONFIG_RTE_PMD_PACKET_PREFETCH=y
|
||||
# Compile generic wireless base band device library
|
||||
# EXPERIMENTAL: API may change without prior notice
|
||||
CONFIG_RTE_LIBRTE_BBDEV=n
|
||||
CONFIG_RTE_LIBRTE_BBDEV_DEBUG=n
|
||||
CONFIG_RTE_BBDEV_MAX_DEVS=128
|
||||
CONFIG_RTE_BBDEV_OFFLOAD_COST=n
|
||||
CONFIG_RTE_BBDEV_OFFLOAD_COST=y
|
||||
CONFIG_RTE_BBDEV_SDK_AVX2=n
|
||||
CONFIG_RTE_BBDEV_SDK_AVX512=n
|
||||
# Compile PMD for NULL bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n
|
||||
# Compile PMD for turbo software bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n
|
||||
# Compile PMD for Intel FPGA LTE FEC bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC=n
|
||||
# Compile generic crypto device library
|
||||
CONFIG_RTE_LIBRTE_CRYPTODEV=n
|
||||
CONFIG_RTE_CRYPTO_MAX_DEVS=64
|
||||
@ -304,13 +338,15 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n
|
||||
CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
|
||||
# Compile PMD for Cavium OCTEON TX crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=y
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n
|
||||
# Compile PMD for Marvell OCTEON TX2 crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO=n
|
||||
# Compile PMD for QuickAssist based devices - see docs for details
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT=n
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=n
|
||||
# Max. number of QuickAssist devices, which can be detected and attached
|
||||
CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
|
||||
CONFIG_RTE_PMD_QAT_COMP_SGL_MAX_SEGMENTS=16
|
||||
CONFIG_RTE_PMD_QAT_COMP_IM_BUFFER_SIZE=65536
|
||||
# Compile PMD for virtio crypto devices
|
||||
CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO=n
|
||||
@ -337,6 +373,8 @@ CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n
|
||||
CONFIG_RTE_LIBRTE_PMD_CCP=n
|
||||
# Compile PMD for Marvell Crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO=n
|
||||
# Compile PMD for NITROX crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_NITROX=n
|
||||
# Compile generic security library
|
||||
CONFIG_RTE_LIBRTE_SECURITY=n
|
||||
# Compile generic compression device library
|
||||
@ -368,6 +406,8 @@ CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DSW_EVENTDEV=n
|
||||
# Compile PMD for octeontx sso event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=n
|
||||
# Compile PMD for octeontx2 sso event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV=n
|
||||
# Compile PMD for OPDL event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV=n
|
||||
# Compile PMD for NXP DPAA event device
|
||||
@ -377,7 +417,7 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV=n
|
||||
# Compile raw device support
|
||||
# EXPERIMENTAL: API may change without prior notice
|
||||
CONFIG_RTE_LIBRTE_RAWDEV=n
|
||||
CONFIG_RTE_RAWDEV_MAX_DEVS=10
|
||||
CONFIG_RTE_RAWDEV_MAX_DEVS=64
|
||||
CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV=n
|
||||
# Compile PMD for NXP DPAA2 CMDIF raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
|
||||
@ -385,8 +425,16 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=n
|
||||
# Compile PMD for Intel FPGA raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_IFPGA_RAWDEV=n
|
||||
# Compile PMD for Intel IOAT raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_IOAT_RAWDEV=n
|
||||
# Compile PMD for octeontx2 DMA raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_DMA_RAWDEV=n
|
||||
# Compile PMD for NTB raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_NTB_RAWDEV=n
|
||||
# Compile librte_ring
|
||||
CONFIG_RTE_LIBRTE_RING=y
|
||||
# Compile librte_stack
|
||||
CONFIG_RTE_LIBRTE_STACK=y
|
||||
# Compile librte_mempool
|
||||
CONFIG_RTE_LIBRTE_MEMPOOL=y
|
||||
CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE=512
|
||||
@ -398,6 +446,8 @@ CONFIG_RTE_DRIVER_MEMPOOL_RING=y
|
||||
CONFIG_RTE_DRIVER_MEMPOOL_STACK=y
|
||||
# Compile PMD for octeontx fpa mempool device
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=n
|
||||
# Compile PMD for octeontx2 npa mempool device
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL=n
|
||||
# Compile librte_mbuf
|
||||
CONFIG_RTE_LIBRTE_MBUF=y
|
||||
CONFIG_RTE_LIBRTE_MBUF_DEBUG=n
|
||||
@ -429,6 +479,14 @@ CONFIG_RTE_LIBRTE_BITRATE=y
|
||||
CONFIG_RTE_LIBRTE_LATENCY_STATS=y
|
||||
# Compile librte_telemetry
|
||||
CONFIG_RTE_LIBRTE_TELEMETRY=n
|
||||
# Compile librte_rcu
|
||||
CONFIG_RTE_LIBRTE_RCU=n
|
||||
CONFIG_RTE_LIBRTE_RCU_DEBUG=n
|
||||
# Compile librte_rib
|
||||
CONFIG_RTE_LIBRTE_RIB=n
|
||||
# Compile librte_fib
|
||||
CONFIG_RTE_LIBRTE_FIB=n
|
||||
CONFIG_RTE_LIBRTE_FIB_DEBUG=n
|
||||
# Compile librte_lpm
|
||||
CONFIG_RTE_LIBRTE_LPM=n
|
||||
CONFIG_RTE_LIBRTE_LPM_DEBUG=n
|
||||
@ -480,7 +538,6 @@ CONFIG_RTE_PIPELINE_STATS_COLLECT=n
|
||||
CONFIG_RTE_LIBRTE_KNI=n
|
||||
CONFIG_RTE_LIBRTE_PMD_KNI=n
|
||||
CONFIG_RTE_KNI_KMOD=n
|
||||
CONFIG_RTE_KNI_KMOD_ETHTOOL=n
|
||||
CONFIG_RTE_KNI_PREEMPT_DEFAULT=y
|
||||
# Compile architecture we compile for. pdump library
|
||||
CONFIG_RTE_LIBRTE_PDUMP=y
|
||||
@ -499,27 +556,36 @@ CONFIG_RTE_LIBRTE_IFC_PMD=n
|
||||
CONFIG_RTE_LIBRTE_BPF=n
|
||||
# allow load BPF from ELF files (requires libelf)
|
||||
CONFIG_RTE_LIBRTE_BPF_ELF=n
|
||||
# Compile librte_ipsec
|
||||
CONFIG_RTE_LIBRTE_IPSEC=n
|
||||
# Compile architecture we compile for. test application
|
||||
CONFIG_RTE_APP_TEST=y
|
||||
CONFIG_RTE_APP_TEST_RESOURCE_TAR=n
|
||||
# Compile architecture we compile for. procinfo application
|
||||
CONFIG_RTE_PROC_INFO=y
|
||||
CONFIG_RTE_PROC_INFO=n
|
||||
# Compile architecture we compile for. PMD test application
|
||||
CONFIG_RTE_TEST_PMD=y
|
||||
CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES=n
|
||||
CONFIG_RTE_TEST_PMD_RECORD_BURST_STATS=n
|
||||
# Compile architecture we compile for. bbdev test application
|
||||
CONFIG_RTE_TEST_BBDEV=n
|
||||
# Compile architecture we compile for. compression performance application
|
||||
CONFIG_RTE_APP_COMPRESS_PERF=n
|
||||
# Compile architecture we compile for. crypto performance application
|
||||
CONFIG_RTE_APP_CRYPTO_PERF=n
|
||||
# Compile architecture we compile for. eventdev application
|
||||
CONFIG_RTE_APP_EVENTDEV=n
|
||||
CONFIG_RTE_EXEC_ENV_LINUX=y
|
||||
CONFIG_RTE_EXEC_ENV_LINUXAPP=y
|
||||
CONFIG_RTE_LIBRTE_VHOST_POSTCOPY=n
|
||||
# Common libraries, before Bus/PMDs
|
||||
# NXP DPAA BUS and drivers
|
||||
# NXP FSLMC BUS and DPAA2 drivers
|
||||
# NXP ENETC PMD Driver
|
||||
# HINIC PMD driver
|
||||
# Hisilicon HNS3 PMD driver
|
||||
# Compile PMD for Intel FPGA raw device
|
||||
# To compile, CONFIG_RTE_EAL_VFIO should be enabled.
|
||||
CONFIG_RTE_ARCH_ARM64=y
|
||||
CONFIG_RTE_ARCH_64=y
|
||||
# Maximum available cache line size in arm64 implementations.
|
||||
@ -536,5 +602,5 @@ CONFIG_RTE_ARCH_ARM64_MEMCPY=n
|
||||
#CONFIG_RTE_ARM64_MEMCPY_SKIP_GCC_VER_CHECK=n
|
||||
#CONFIG_RTE_ARM64_MEMCPY_ALIGN_MASK=0xF
|
||||
#CONFIG_RTE_ARM64_MEMCPY_STRICT_ALIGN=n
|
||||
# NXP PFE PMD Driver
|
||||
CONFIG_RTE_TOOLCHAIN_GCC=y
|
||||
CONFIG_RTE_LIBRTE_PMD_XENVIRT=n
|
||||
|
@ -93,9 +93,15 @@ do
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_DPAA_MEMPOOL n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_DPAA2_MEMPOOL n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_CFGFILE n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_EFD n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_FLOW_CLASSIFY n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_RCU n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_RIB n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_FIB n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_IPSEC n
|
||||
|
||||
|
||||
# Disable all eventdevs
|
||||
for eventdev in $(grep _EVENTDEV= "${OUTDIR}/.config" | sed 's@=\(y\|n\)@@g')
|
||||
@ -129,7 +135,6 @@ do
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_OCTEONTX_ZIPVF n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_VHOST n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_KNI n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_XENVIRT n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_NULL n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_CRYPTO_SCHEDULER n
|
||||
@ -145,6 +150,13 @@ do
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_COMMON_DPAAX n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_CAAM_JR n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_MEMIF n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_NITROX n
|
||||
|
||||
# whitelist of enabled PMDs
|
||||
# Soft PMDs to enable
|
||||
@ -173,6 +185,8 @@ do
|
||||
# Disable some other miscellanous items related to test apps
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_TEST_BBDEV n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_APP_CRYPTO_PERF n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_APP_COMPRESS_PERF n
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_PROC_INFO n
|
||||
|
||||
# Disable kernel modules
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_EAL_IGB_UIO n
|
||||
@ -195,9 +209,7 @@ do
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_BNXT_PMD y
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_ENIC_PMD y
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_MLX4_PMD y
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS y
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_MLX5_PMD y
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS y
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_NFP_PMD y
|
||||
set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_QEDE_PMD y
|
||||
# Sw PMD
|
||||
|
@ -1,33 +1,18 @@
|
||||
# -*- cfg-sha: ac783e64ca20c977a7c1c42e72e6dce151b31aa9aecfbfa121b45e49e938f418
|
||||
# BSD LICENSE
|
||||
# -*- cfg-sha: 7f5821168bf7eb8ace23623a392b98f8c2cb715592ed58cc95d6dbeb7f2a41ee
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright (C) IBM Corporation 2014.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# * Neither the name of IBM Corporation nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2010-2016 Intel Corporation
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2010-2017 Intel Corporation
|
||||
# String that appears before the version number
|
||||
CONFIG_RTE_VER_PREFIX="DPDK"
|
||||
# Version information completed when this file is processed for a build
|
||||
CONFIG_RTE_VER_YEAR=19
|
||||
CONFIG_RTE_VER_MONTH=11
|
||||
CONFIG_RTE_VER_MINOR=0
|
||||
CONFIG_RTE_VER_SUFFIX=""
|
||||
CONFIG_RTE_VER_RELEASE=99
|
||||
# RTE_EXEC_ENV values are the directories in mk/exec-env/
|
||||
CONFIG_RTE_EXEC_ENV="linuxapp"
|
||||
# RTE_ARCH values are architecture we compile for. directories in mk/arch/
|
||||
@ -42,19 +27,19 @@ CONFIG_RTE_TOOLCHAIN="gcc"
|
||||
CONFIG_RTE_FORCE_INTRINSICS=n
|
||||
# Machine forces strict alignment constraints.
|
||||
CONFIG_RTE_ARCH_STRICT_ALIGN=n
|
||||
# Enable link time optimization
|
||||
CONFIG_RTE_ENABLE_LTO=n
|
||||
# Compile to share library
|
||||
CONFIG_RTE_BUILD_SHARED_LIB=y
|
||||
# Use newest code breaking previous ABI
|
||||
CONFIG_RTE_NEXT_ABI=n
|
||||
# Major ABI to overwrite library specific LIBABIVER
|
||||
CONFIG_RTE_MAJOR_ABI=
|
||||
# Machine's cache line size
|
||||
CONFIG_RTE_CACHE_LINE_SIZE=128
|
||||
# Memory model
|
||||
CONFIG_RTE_USE_C11_MEM_MODEL=n
|
||||
# Compile Environment Abstraction Layer
|
||||
CONFIG_RTE_LIBRTE_EAL=y
|
||||
CONFIG_RTE_MAX_LCORE=256
|
||||
CONFIG_RTE_MAX_LCORE=1536
|
||||
CONFIG_RTE_MAX_NUMA_NODES=32
|
||||
CONFIG_RTE_MAX_HEAPS=32
|
||||
CONFIG_RTE_MAX_MEMSEG_LISTS=64
|
||||
@ -78,7 +63,6 @@ CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
|
||||
CONFIG_RTE_LOG_HISTORY=256
|
||||
CONFIG_RTE_BACKTRACE=y
|
||||
CONFIG_RTE_LIBEAL_USE_HPET=n
|
||||
CONFIG_RTE_EAL_ALLOW_INV_SOCKET_ID=n
|
||||
CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
|
||||
CONFIG_RTE_EAL_IGB_UIO=n
|
||||
CONFIG_RTE_EAL_VFIO=y
|
||||
@ -92,6 +76,8 @@ CONFIG_RTE_USE_LIBBSD=n
|
||||
# field test and possible optimization.
|
||||
CONFIG_RTE_ENABLE_AVX=y
|
||||
CONFIG_RTE_ENABLE_AVX512=n
|
||||
# Use ARM LSE ATOMIC instructions
|
||||
CONFIG_RTE_ARM_FEATURE_ATOMICS=n
|
||||
# Default driver path (or "" to disable)
|
||||
CONFIG_RTE_EAL_PMD_PATH="/usr/lib64/dpdk-pmds"
|
||||
# Compile Environment Abstraction Layer to support Vmware TSC map
|
||||
@ -143,12 +129,8 @@ CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
|
||||
CONFIG_RTE_LIBRTE_BNXT_PMD=n
|
||||
# Compile burst-oriented Chelsio Terminator (CXGBE) PMD
|
||||
CONFIG_RTE_LIBRTE_CXGBE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_REG=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_MBOX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_TPUT=y
|
||||
# Compile burst-oriented NXP PFE PMD driver
|
||||
CONFIG_RTE_LIBRTE_PFE_PMD=n
|
||||
# NXP DPAA Bus
|
||||
CONFIG_RTE_LIBRTE_DPAA_BUS=n
|
||||
CONFIG_RTE_LIBRTE_DPAA_MEMPOOL=n
|
||||
@ -179,6 +161,10 @@ CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_E1000_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_E1000_PF_DISABLE_STRIP_CRC=n
|
||||
# Compile burst-oriented HINIC PMD driver
|
||||
CONFIG_RTE_LIBRTE_HINIC_PMD=n
|
||||
# Compile burst-oriented HNS3 PMD driver
|
||||
CONFIG_RTE_LIBRTE_HNS3_PMD=n
|
||||
# Compile burst-oriented IXGBE PMD driver
|
||||
CONFIG_RTE_LIBRTE_IXGBE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=n
|
||||
@ -204,22 +190,34 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
|
||||
CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
|
||||
# Compile burst-oriented AVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_AVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_AVF_INC_VECTOR=y
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_AVF_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented ICE PMD driver
|
||||
CONFIG_RTE_LIBRTE_ICE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC=y
|
||||
CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented IAVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_IAVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_DUMP_DESC=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented IPN3KE PMD driver
|
||||
CONFIG_RTE_LIBRTE_IPN3KE_PMD=n
|
||||
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
|
||||
CONFIG_RTE_LIBRTE_MLX4_PMD=n
|
||||
CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS=n
|
||||
# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5 & Bluefield
|
||||
# (MLX5) PMD
|
||||
# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5,
|
||||
# ConnectX-6 & Bluefield (MLX5) PMD
|
||||
CONFIG_RTE_LIBRTE_MLX5_PMD=n
|
||||
CONFIG_RTE_LIBRTE_MLX5_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS=n
|
||||
# Linking method for mlx4/5 dependency on ibverbs and related libraries
|
||||
# Default linking is dynamic by linker.
|
||||
# Other options are: dynamic by dlopen at run-time, or statically embedded.
|
||||
CONFIG_RTE_IBVERBS_LINK_DLOPEN=n
|
||||
CONFIG_RTE_IBVERBS_LINK_STATIC=n
|
||||
# Compile burst-oriented Netronome NFP PMD driver
|
||||
CONFIG_RTE_LIBRTE_NFP_PMD=n
|
||||
CONFIG_RTE_LIBRTE_NFP_DEBUG_TX=n
|
||||
@ -236,6 +234,8 @@ CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n
|
||||
# Compile software PMD backed by SZEDATA2 device
|
||||
CONFIG_RTE_LIBRTE_PMD_SZEDATA2=n
|
||||
# Compile software PMD backed by NFB device
|
||||
CONFIG_RTE_LIBRTE_NFB_PMD=n
|
||||
# Compile burst-oriented Cavium Thunderx NICVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
|
||||
@ -248,6 +248,8 @@ CONFIG_RTE_LIBRTE_LIO_DEBUG_MBOX=n
|
||||
CONFIG_RTE_LIBRTE_LIO_DEBUG_REGS=n
|
||||
# Compile burst-oriented Cavium OCTEONTX network PMD driver
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX_PMD=n
|
||||
# Compile burst-oriented Marvell OCTEON TX2 network PMD driver
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX2_PMD=n
|
||||
# Compile WRS accelerated virtual port (AVP) guest PMD driver
|
||||
CONFIG_RTE_LIBRTE_AVP_PMD=n
|
||||
CONFIG_RTE_LIBRTE_AVP_DEBUG_RX=n
|
||||
@ -267,6 +269,10 @@ CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX_FREE=n
|
||||
# Compile software PMD backed by AF_PACKET sockets (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n
|
||||
# Compile software PMD backed by AF_XDP sockets (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_AF_XDP=n
|
||||
# Compile Memory Interface PMD driver (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_MEMIF=n
|
||||
# Compile link bonding PMD library
|
||||
CONFIG_RTE_LIBRTE_PMD_BOND=n
|
||||
CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
|
||||
@ -304,12 +310,17 @@ CONFIG_RTE_PMD_PACKET_PREFETCH=y
|
||||
# Compile generic wireless base band device library
|
||||
# EXPERIMENTAL: API may change without prior notice
|
||||
CONFIG_RTE_LIBRTE_BBDEV=n
|
||||
CONFIG_RTE_LIBRTE_BBDEV_DEBUG=n
|
||||
CONFIG_RTE_BBDEV_MAX_DEVS=128
|
||||
CONFIG_RTE_BBDEV_OFFLOAD_COST=n
|
||||
CONFIG_RTE_BBDEV_OFFLOAD_COST=y
|
||||
CONFIG_RTE_BBDEV_SDK_AVX2=n
|
||||
CONFIG_RTE_BBDEV_SDK_AVX512=n
|
||||
# Compile PMD for NULL bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n
|
||||
# Compile PMD for turbo software bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n
|
||||
# Compile PMD for Intel FPGA LTE FEC bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC=n
|
||||
# Compile generic crypto device library
|
||||
CONFIG_RTE_LIBRTE_CRYPTODEV=n
|
||||
CONFIG_RTE_CRYPTO_MAX_DEVS=64
|
||||
@ -325,13 +336,15 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n
|
||||
CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
|
||||
# Compile PMD for Cavium OCTEON TX crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=y
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n
|
||||
# Compile PMD for Marvell OCTEON TX2 crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO=n
|
||||
# Compile PMD for QuickAssist based devices - see docs for details
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT=n
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=n
|
||||
# Max. number of QuickAssist devices, which can be detected and attached
|
||||
CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
|
||||
CONFIG_RTE_PMD_QAT_COMP_SGL_MAX_SEGMENTS=16
|
||||
CONFIG_RTE_PMD_QAT_COMP_IM_BUFFER_SIZE=65536
|
||||
# Compile PMD for virtio crypto devices
|
||||
CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO=n
|
||||
@ -358,6 +371,8 @@ CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n
|
||||
CONFIG_RTE_LIBRTE_PMD_CCP=n
|
||||
# Compile PMD for Marvell Crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO=n
|
||||
# Compile PMD for NITROX crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_NITROX=n
|
||||
# Compile generic security library
|
||||
CONFIG_RTE_LIBRTE_SECURITY=n
|
||||
# Compile generic compression device library
|
||||
@ -389,6 +404,8 @@ CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DSW_EVENTDEV=n
|
||||
# Compile PMD for octeontx sso event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=n
|
||||
# Compile PMD for octeontx2 sso event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV=n
|
||||
# Compile PMD for OPDL event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV=n
|
||||
# Compile PMD for NXP DPAA event device
|
||||
@ -398,7 +415,7 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV=n
|
||||
# Compile raw device support
|
||||
# EXPERIMENTAL: API may change without prior notice
|
||||
CONFIG_RTE_LIBRTE_RAWDEV=n
|
||||
CONFIG_RTE_RAWDEV_MAX_DEVS=10
|
||||
CONFIG_RTE_RAWDEV_MAX_DEVS=64
|
||||
CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV=n
|
||||
# Compile PMD for NXP DPAA2 CMDIF raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
|
||||
@ -406,8 +423,16 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=n
|
||||
# Compile PMD for Intel FPGA raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_IFPGA_RAWDEV=n
|
||||
# Compile PMD for Intel IOAT raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_IOAT_RAWDEV=n
|
||||
# Compile PMD for octeontx2 DMA raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_DMA_RAWDEV=n
|
||||
# Compile PMD for NTB raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_NTB_RAWDEV=n
|
||||
# Compile librte_ring
|
||||
CONFIG_RTE_LIBRTE_RING=y
|
||||
# Compile librte_stack
|
||||
CONFIG_RTE_LIBRTE_STACK=y
|
||||
# Compile librte_mempool
|
||||
CONFIG_RTE_LIBRTE_MEMPOOL=y
|
||||
CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE=512
|
||||
@ -419,6 +444,8 @@ CONFIG_RTE_DRIVER_MEMPOOL_RING=y
|
||||
CONFIG_RTE_DRIVER_MEMPOOL_STACK=y
|
||||
# Compile PMD for octeontx fpa mempool device
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=n
|
||||
# Compile PMD for octeontx2 npa mempool device
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL=n
|
||||
# Compile librte_mbuf
|
||||
CONFIG_RTE_LIBRTE_MBUF=y
|
||||
CONFIG_RTE_LIBRTE_MBUF_DEBUG=n
|
||||
@ -450,6 +477,14 @@ CONFIG_RTE_LIBRTE_BITRATE=y
|
||||
CONFIG_RTE_LIBRTE_LATENCY_STATS=y
|
||||
# Compile librte_telemetry
|
||||
CONFIG_RTE_LIBRTE_TELEMETRY=n
|
||||
# Compile librte_rcu
|
||||
CONFIG_RTE_LIBRTE_RCU=n
|
||||
CONFIG_RTE_LIBRTE_RCU_DEBUG=n
|
||||
# Compile librte_rib
|
||||
CONFIG_RTE_LIBRTE_RIB=n
|
||||
# Compile librte_fib
|
||||
CONFIG_RTE_LIBRTE_FIB=n
|
||||
CONFIG_RTE_LIBRTE_FIB_DEBUG=n
|
||||
# Compile librte_lpm
|
||||
CONFIG_RTE_LIBRTE_LPM=n
|
||||
CONFIG_RTE_LIBRTE_LPM_DEBUG=n
|
||||
@ -501,7 +536,6 @@ CONFIG_RTE_PIPELINE_STATS_COLLECT=n
|
||||
CONFIG_RTE_LIBRTE_KNI=n
|
||||
CONFIG_RTE_LIBRTE_PMD_KNI=n
|
||||
CONFIG_RTE_KNI_KMOD=n
|
||||
CONFIG_RTE_KNI_KMOD_ETHTOOL=n
|
||||
CONFIG_RTE_KNI_PREEMPT_DEFAULT=y
|
||||
# Compile architecture we compile for. pdump library
|
||||
CONFIG_RTE_LIBRTE_PDUMP=y
|
||||
@ -520,31 +554,39 @@ CONFIG_RTE_LIBRTE_IFC_PMD=n
|
||||
CONFIG_RTE_LIBRTE_BPF=n
|
||||
# allow load BPF from ELF files (requires libelf)
|
||||
CONFIG_RTE_LIBRTE_BPF_ELF=n
|
||||
# Compile librte_ipsec
|
||||
CONFIG_RTE_LIBRTE_IPSEC=n
|
||||
# Compile architecture we compile for. test application
|
||||
CONFIG_RTE_APP_TEST=y
|
||||
CONFIG_RTE_APP_TEST_RESOURCE_TAR=n
|
||||
# Compile architecture we compile for. procinfo application
|
||||
CONFIG_RTE_PROC_INFO=y
|
||||
CONFIG_RTE_PROC_INFO=n
|
||||
# Compile architecture we compile for. PMD test application
|
||||
CONFIG_RTE_TEST_PMD=y
|
||||
CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES=n
|
||||
CONFIG_RTE_TEST_PMD_RECORD_BURST_STATS=n
|
||||
# Compile architecture we compile for. bbdev test application
|
||||
CONFIG_RTE_TEST_BBDEV=n
|
||||
# Compile architecture we compile for. compression performance application
|
||||
CONFIG_RTE_APP_COMPRESS_PERF=n
|
||||
# Compile architecture we compile for. crypto performance application
|
||||
CONFIG_RTE_APP_CRYPTO_PERF=n
|
||||
# Compile architecture we compile for. eventdev application
|
||||
CONFIG_RTE_APP_EVENTDEV=n
|
||||
CONFIG_RTE_EXEC_ENV_LINUX=y
|
||||
CONFIG_RTE_EXEC_ENV_LINUXAPP=y
|
||||
CONFIG_RTE_LIBRTE_VHOST_POSTCOPY=n
|
||||
# Common libraries, before Bus/PMDs
|
||||
# NXP DPAA BUS and drivers
|
||||
# NXP FSLMC BUS and DPAA2 drivers
|
||||
# NXP ENETC PMD Driver
|
||||
# HINIC PMD driver
|
||||
# Hisilicon HNS3 PMD driver
|
||||
# Compile PMD for Intel FPGA raw device
|
||||
# To compile, CONFIG_RTE_EAL_VFIO should be enabled.
|
||||
CONFIG_RTE_ARCH_PPC_64=y
|
||||
CONFIG_RTE_ARCH_64=y
|
||||
CONFIG_RTE_TOOLCHAIN_GCC=y
|
||||
# Note: Power doesn't have this support
|
||||
# Note: Initially, all of architecture we compile for. PMD drivers compilation are turned off on Power
|
||||
# Will turn on them only after architecture we compile for. successful testing on Power
|
||||
CONFIG_RTE_LIBRTE_PMD_XENVIRT=n
|
||||
|
@ -1,10 +1,18 @@
|
||||
# -*- cfg-sha: 2ba93102021dc5d38494cf5090c3ecaca37db13153dd558b1511a56f2a3d9b10
|
||||
# -*- cfg-sha: b3230ff5b100fb08c9fe1495536825d94c6dea184f0111320089acc1e737f454
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2010-2014 Intel Corporation
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2010-2016 Intel Corporation
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2010-2017 Intel Corporation
|
||||
# String that appears before the version number
|
||||
CONFIG_RTE_VER_PREFIX="DPDK"
|
||||
# Version information completed when this file is processed for a build
|
||||
CONFIG_RTE_VER_YEAR=19
|
||||
CONFIG_RTE_VER_MONTH=11
|
||||
CONFIG_RTE_VER_MINOR=0
|
||||
CONFIG_RTE_VER_SUFFIX=""
|
||||
CONFIG_RTE_VER_RELEASE=99
|
||||
# RTE_EXEC_ENV values are the directories in mk/exec-env/
|
||||
CONFIG_RTE_EXEC_ENV="linuxapp"
|
||||
# RTE_ARCH values are architecture we compile for. directories in mk/arch/
|
||||
@ -19,12 +27,12 @@ CONFIG_RTE_TOOLCHAIN="gcc"
|
||||
CONFIG_RTE_FORCE_INTRINSICS=n
|
||||
# Machine forces strict alignment constraints.
|
||||
CONFIG_RTE_ARCH_STRICT_ALIGN=n
|
||||
# Enable link time optimization
|
||||
CONFIG_RTE_ENABLE_LTO=n
|
||||
# Compile to share library
|
||||
CONFIG_RTE_BUILD_SHARED_LIB=y
|
||||
# Use newest code breaking previous ABI
|
||||
CONFIG_RTE_NEXT_ABI=n
|
||||
# Major ABI to overwrite library specific LIBABIVER
|
||||
CONFIG_RTE_MAJOR_ABI=
|
||||
# Machine's cache line size
|
||||
CONFIG_RTE_CACHE_LINE_SIZE=64
|
||||
# Memory model
|
||||
@ -55,7 +63,6 @@ CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
|
||||
CONFIG_RTE_LOG_HISTORY=256
|
||||
CONFIG_RTE_BACKTRACE=y
|
||||
CONFIG_RTE_LIBEAL_USE_HPET=n
|
||||
CONFIG_RTE_EAL_ALLOW_INV_SOCKET_ID=n
|
||||
CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
|
||||
CONFIG_RTE_EAL_IGB_UIO=n
|
||||
CONFIG_RTE_EAL_VFIO=y
|
||||
@ -69,6 +76,8 @@ CONFIG_RTE_USE_LIBBSD=n
|
||||
# field test and possible optimization.
|
||||
CONFIG_RTE_ENABLE_AVX=y
|
||||
CONFIG_RTE_ENABLE_AVX512=n
|
||||
# Use ARM LSE ATOMIC instructions
|
||||
CONFIG_RTE_ARM_FEATURE_ATOMICS=n
|
||||
# Default driver path (or "" to disable)
|
||||
CONFIG_RTE_EAL_PMD_PATH="/usr/lib64/dpdk-pmds"
|
||||
# Compile Environment Abstraction Layer to support Vmware TSC map
|
||||
@ -120,12 +129,8 @@ CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
|
||||
CONFIG_RTE_LIBRTE_BNXT_PMD=y
|
||||
# Compile burst-oriented Chelsio Terminator (CXGBE) PMD
|
||||
CONFIG_RTE_LIBRTE_CXGBE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_REG=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_MBOX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_CXGBE_TPUT=y
|
||||
# Compile burst-oriented NXP PFE PMD driver
|
||||
CONFIG_RTE_LIBRTE_PFE_PMD=n
|
||||
# NXP DPAA Bus
|
||||
CONFIG_RTE_LIBRTE_DPAA_BUS=n
|
||||
CONFIG_RTE_LIBRTE_DPAA_MEMPOOL=n
|
||||
@ -156,6 +161,10 @@ CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_E1000_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_E1000_PF_DISABLE_STRIP_CRC=n
|
||||
# Compile burst-oriented HINIC PMD driver
|
||||
CONFIG_RTE_LIBRTE_HINIC_PMD=n
|
||||
# Compile burst-oriented HNS3 PMD driver
|
||||
CONFIG_RTE_LIBRTE_HNS3_PMD=n
|
||||
# Compile burst-oriented IXGBE PMD driver
|
||||
CONFIG_RTE_LIBRTE_IXGBE_PMD=y
|
||||
CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=n
|
||||
@ -181,22 +190,34 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
|
||||
CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
|
||||
# Compile burst-oriented AVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_AVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_AVF_INC_VECTOR=y
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_AVF_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_AVF_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented ICE PMD driver
|
||||
CONFIG_RTE_LIBRTE_ICE_PMD=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_ICE_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC=y
|
||||
CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented IAVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_IAVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_DEBUG_DUMP_DESC=n
|
||||
CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
|
||||
# Compile burst-oriented IPN3KE PMD driver
|
||||
CONFIG_RTE_LIBRTE_IPN3KE_PMD=n
|
||||
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
|
||||
CONFIG_RTE_LIBRTE_MLX4_PMD=y
|
||||
CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS=y
|
||||
# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5 & Bluefield
|
||||
# (MLX5) PMD
|
||||
# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5,
|
||||
# ConnectX-6 & Bluefield (MLX5) PMD
|
||||
CONFIG_RTE_LIBRTE_MLX5_PMD=y
|
||||
CONFIG_RTE_LIBRTE_MLX5_DEBUG=n
|
||||
CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS=y
|
||||
# Linking method for mlx4/5 dependency on ibverbs and related libraries
|
||||
# Default linking is dynamic by linker.
|
||||
# Other options are: dynamic by dlopen at run-time, or statically embedded.
|
||||
CONFIG_RTE_IBVERBS_LINK_DLOPEN=n
|
||||
CONFIG_RTE_IBVERBS_LINK_STATIC=n
|
||||
# Compile burst-oriented Netronome NFP PMD driver
|
||||
CONFIG_RTE_LIBRTE_NFP_PMD=y
|
||||
CONFIG_RTE_LIBRTE_NFP_DEBUG_TX=n
|
||||
@ -213,6 +234,8 @@ CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
|
||||
CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n
|
||||
# Compile software PMD backed by SZEDATA2 device
|
||||
CONFIG_RTE_LIBRTE_PMD_SZEDATA2=n
|
||||
# Compile software PMD backed by NFB device
|
||||
CONFIG_RTE_LIBRTE_NFB_PMD=n
|
||||
# Compile burst-oriented Cavium Thunderx NICVF PMD driver
|
||||
CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
|
||||
CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
|
||||
@ -225,6 +248,8 @@ CONFIG_RTE_LIBRTE_LIO_DEBUG_MBOX=n
|
||||
CONFIG_RTE_LIBRTE_LIO_DEBUG_REGS=n
|
||||
# Compile burst-oriented Cavium OCTEONTX network PMD driver
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX_PMD=n
|
||||
# Compile burst-oriented Marvell OCTEON TX2 network PMD driver
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX2_PMD=n
|
||||
# Compile WRS accelerated virtual port (AVP) guest PMD driver
|
||||
CONFIG_RTE_LIBRTE_AVP_PMD=n
|
||||
CONFIG_RTE_LIBRTE_AVP_DEBUG_RX=n
|
||||
@ -244,6 +269,10 @@ CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX=n
|
||||
CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX_FREE=n
|
||||
# Compile software PMD backed by AF_PACKET sockets (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n
|
||||
# Compile software PMD backed by AF_XDP sockets (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_AF_XDP=n
|
||||
# Compile Memory Interface PMD driver (Linux only)
|
||||
CONFIG_RTE_LIBRTE_PMD_MEMIF=n
|
||||
# Compile link bonding PMD library
|
||||
CONFIG_RTE_LIBRTE_PMD_BOND=n
|
||||
CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
|
||||
@ -281,12 +310,17 @@ CONFIG_RTE_PMD_PACKET_PREFETCH=y
|
||||
# Compile generic wireless base band device library
|
||||
# EXPERIMENTAL: API may change without prior notice
|
||||
CONFIG_RTE_LIBRTE_BBDEV=n
|
||||
CONFIG_RTE_LIBRTE_BBDEV_DEBUG=n
|
||||
CONFIG_RTE_BBDEV_MAX_DEVS=128
|
||||
CONFIG_RTE_BBDEV_OFFLOAD_COST=n
|
||||
CONFIG_RTE_BBDEV_OFFLOAD_COST=y
|
||||
CONFIG_RTE_BBDEV_SDK_AVX2=n
|
||||
CONFIG_RTE_BBDEV_SDK_AVX512=n
|
||||
# Compile PMD for NULL bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n
|
||||
# Compile PMD for turbo software bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n
|
||||
# Compile PMD for Intel FPGA LTE FEC bbdev device
|
||||
CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC=n
|
||||
# Compile generic crypto device library
|
||||
CONFIG_RTE_LIBRTE_CRYPTODEV=n
|
||||
CONFIG_RTE_CRYPTO_MAX_DEVS=64
|
||||
@ -302,13 +336,15 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n
|
||||
CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
|
||||
# Compile PMD for Cavium OCTEON TX crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=y
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n
|
||||
# Compile PMD for Marvell OCTEON TX2 crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO=n
|
||||
# Compile PMD for QuickAssist based devices - see docs for details
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT=n
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
|
||||
CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=n
|
||||
# Max. number of QuickAssist devices, which can be detected and attached
|
||||
CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
|
||||
CONFIG_RTE_PMD_QAT_COMP_SGL_MAX_SEGMENTS=16
|
||||
CONFIG_RTE_PMD_QAT_COMP_IM_BUFFER_SIZE=65536
|
||||
# Compile PMD for virtio crypto devices
|
||||
CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO=n
|
||||
@ -335,6 +371,8 @@ CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n
|
||||
CONFIG_RTE_LIBRTE_PMD_CCP=n
|
||||
# Compile PMD for Marvell Crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO=n
|
||||
# Compile PMD for NITROX crypto device
|
||||
CONFIG_RTE_LIBRTE_PMD_NITROX=n
|
||||
# Compile generic security library
|
||||
CONFIG_RTE_LIBRTE_SECURITY=n
|
||||
# Compile generic compression device library
|
||||
@ -366,6 +404,8 @@ CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DSW_EVENTDEV=n
|
||||
# Compile PMD for octeontx sso event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=n
|
||||
# Compile PMD for octeontx2 sso event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV=n
|
||||
# Compile PMD for OPDL event device
|
||||
CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV=n
|
||||
# Compile PMD for NXP DPAA event device
|
||||
@ -375,7 +415,7 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV=n
|
||||
# Compile raw device support
|
||||
# EXPERIMENTAL: API may change without prior notice
|
||||
CONFIG_RTE_LIBRTE_RAWDEV=n
|
||||
CONFIG_RTE_RAWDEV_MAX_DEVS=10
|
||||
CONFIG_RTE_RAWDEV_MAX_DEVS=64
|
||||
CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV=n
|
||||
# Compile PMD for NXP DPAA2 CMDIF raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
|
||||
@ -383,8 +423,16 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
|
||||
CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=n
|
||||
# Compile PMD for Intel FPGA raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_IFPGA_RAWDEV=n
|
||||
# Compile PMD for Intel IOAT raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_IOAT_RAWDEV=n
|
||||
# Compile PMD for octeontx2 DMA raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_DMA_RAWDEV=n
|
||||
# Compile PMD for NTB raw device
|
||||
CONFIG_RTE_LIBRTE_PMD_NTB_RAWDEV=n
|
||||
# Compile librte_ring
|
||||
CONFIG_RTE_LIBRTE_RING=y
|
||||
# Compile librte_stack
|
||||
CONFIG_RTE_LIBRTE_STACK=y
|
||||
# Compile librte_mempool
|
||||
CONFIG_RTE_LIBRTE_MEMPOOL=y
|
||||
CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE=512
|
||||
@ -396,6 +444,8 @@ CONFIG_RTE_DRIVER_MEMPOOL_RING=y
|
||||
CONFIG_RTE_DRIVER_MEMPOOL_STACK=y
|
||||
# Compile PMD for octeontx fpa mempool device
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=n
|
||||
# Compile PMD for octeontx2 npa mempool device
|
||||
CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL=n
|
||||
# Compile librte_mbuf
|
||||
CONFIG_RTE_LIBRTE_MBUF=y
|
||||
CONFIG_RTE_LIBRTE_MBUF_DEBUG=n
|
||||
@ -427,6 +477,14 @@ CONFIG_RTE_LIBRTE_BITRATE=y
|
||||
CONFIG_RTE_LIBRTE_LATENCY_STATS=y
|
||||
# Compile librte_telemetry
|
||||
CONFIG_RTE_LIBRTE_TELEMETRY=n
|
||||
# Compile librte_rcu
|
||||
CONFIG_RTE_LIBRTE_RCU=n
|
||||
CONFIG_RTE_LIBRTE_RCU_DEBUG=n
|
||||
# Compile librte_rib
|
||||
CONFIG_RTE_LIBRTE_RIB=n
|
||||
# Compile librte_fib
|
||||
CONFIG_RTE_LIBRTE_FIB=n
|
||||
CONFIG_RTE_LIBRTE_FIB_DEBUG=n
|
||||
# Compile librte_lpm
|
||||
CONFIG_RTE_LIBRTE_LPM=n
|
||||
CONFIG_RTE_LIBRTE_LPM_DEBUG=n
|
||||
@ -478,7 +536,6 @@ CONFIG_RTE_PIPELINE_STATS_COLLECT=n
|
||||
CONFIG_RTE_LIBRTE_KNI=n
|
||||
CONFIG_RTE_LIBRTE_PMD_KNI=n
|
||||
CONFIG_RTE_KNI_KMOD=n
|
||||
CONFIG_RTE_KNI_KMOD_ETHTOOL=n
|
||||
CONFIG_RTE_KNI_PREEMPT_DEFAULT=y
|
||||
# Compile architecture we compile for. pdump library
|
||||
CONFIG_RTE_LIBRTE_PDUMP=y
|
||||
@ -497,29 +554,37 @@ CONFIG_RTE_LIBRTE_IFC_PMD=n
|
||||
CONFIG_RTE_LIBRTE_BPF=n
|
||||
# allow load BPF from ELF files (requires libelf)
|
||||
CONFIG_RTE_LIBRTE_BPF_ELF=n
|
||||
# Compile librte_ipsec
|
||||
CONFIG_RTE_LIBRTE_IPSEC=n
|
||||
# Compile architecture we compile for. test application
|
||||
CONFIG_RTE_APP_TEST=y
|
||||
CONFIG_RTE_APP_TEST_RESOURCE_TAR=n
|
||||
# Compile architecture we compile for. procinfo application
|
||||
CONFIG_RTE_PROC_INFO=y
|
||||
CONFIG_RTE_PROC_INFO=n
|
||||
# Compile architecture we compile for. PMD test application
|
||||
CONFIG_RTE_TEST_PMD=y
|
||||
CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES=n
|
||||
CONFIG_RTE_TEST_PMD_RECORD_BURST_STATS=n
|
||||
# Compile architecture we compile for. bbdev test application
|
||||
CONFIG_RTE_TEST_BBDEV=n
|
||||
# Compile architecture we compile for. compression performance application
|
||||
CONFIG_RTE_APP_COMPRESS_PERF=n
|
||||
# Compile architecture we compile for. crypto performance application
|
||||
CONFIG_RTE_APP_CRYPTO_PERF=n
|
||||
# Compile architecture we compile for. eventdev application
|
||||
CONFIG_RTE_APP_EVENTDEV=n
|
||||
CONFIG_RTE_EXEC_ENV_LINUX=y
|
||||
CONFIG_RTE_EXEC_ENV_LINUXAPP=y
|
||||
CONFIG_RTE_LIBRTE_VHOST_POSTCOPY=n
|
||||
# Common libraries, before Bus/PMDs
|
||||
# NXP DPAA BUS and drivers
|
||||
# NXP FSLMC BUS and DPAA2 drivers
|
||||
# NXP ENETC PMD Driver
|
||||
# HINIC PMD driver
|
||||
# Hisilicon HNS3 PMD driver
|
||||
# Compile PMD for Intel FPGA raw device
|
||||
# To compile, CONFIG_RTE_EAL_VFIO should be enabled.
|
||||
CONFIG_RTE_ARCH_X86_64=y
|
||||
CONFIG_RTE_ARCH_X86=y
|
||||
CONFIG_RTE_ARCH_64=y
|
||||
CONFIG_RTE_TOOLCHAIN_GCC=y
|
||||
CONFIG_RTE_LIBRTE_PMD_XENVIRT=n
|
||||
|
@ -4,14 +4,14 @@
|
||||
%bcond_without tools
|
||||
|
||||
# Dont edit Version: and Release: directly, only these:
|
||||
#% define commit0 0da7f445df445630c794897347ee360d6fe6348b
|
||||
#% define date 20181127
|
||||
#% define commit0 7001c8fdb27357c67147c0a13cb3826e48c0f2bf
|
||||
#% define date 20191128
|
||||
#% define shortcommit0 %(c=%{commit0}; echo ${c:0:7})
|
||||
|
||||
%define ver 18.11.2
|
||||
%define rel 3
|
||||
%define ver 19.11
|
||||
%define rel 4
|
||||
|
||||
%define srcname dpdk-stable
|
||||
%define srcname dpdk
|
||||
|
||||
Name: dpdk
|
||||
Version: %{ver}
|
||||
@ -39,31 +39,6 @@ Source506: x86_64-native-linuxapp-gcc-config
|
||||
# Patches only in dpdk package
|
||||
|
||||
|
||||
# Bug 1525039
|
||||
Patch10: 0001-net-virtio-allocate-vrings-on-device-NUMA-node.patch
|
||||
|
||||
# Bug 1700373
|
||||
Patch11: 0001-net-virtio-add-packed-virtqueue-defines.patch
|
||||
Patch12: 0002-net-virtio-add-packed-virtqueue-helpers.patch
|
||||
Patch13: 0003-net-virtio-vring-init-for-packed-queues.patch
|
||||
Patch14: 0004-net-virtio-dump-packed-virtqueue-data.patch
|
||||
Patch15: 0005-net-virtio-implement-Tx-path-for-packed-queues.patch
|
||||
Patch16: 0006-net-virtio-implement-Rx-path-for-packed-queues.patch
|
||||
Patch17: 0007-net-virtio-support-packed-queue-in-send-command.patch
|
||||
Patch18: 0008-net-virtio-user-add-option-to-use-packed-queues.patch
|
||||
Patch19: 0009-net-virtio-user-fail-if-cq-used-with-packed-vq.patch
|
||||
Patch20: 0010-net-virtio-enable-packed-virtqueues-by-default.patch
|
||||
Patch21: 0011-net-virtio-avoid-double-accounting-of-bytes.patch
|
||||
Patch22: 0012-net-virtio-user-fix-packed-vq-option-parsing.patch
|
||||
Patch23: 0013-net-virtio-user-fix-supported-features-list.patch
|
||||
Patch24: 0014-net-virtio-check-head-desc-with-correct-wrap-counter.patch
|
||||
Patch25: 0015-net-virtio-user-support-control-VQ-for-packed.patch
|
||||
Patch26: 0016-net-virtio-fix-control-VQ.patch
|
||||
Patch27: 0017-net-virtio-user-fix-control-VQ.patch
|
||||
Patch28: 0018-vhost-batch-used-descs-chains-write-back-with-packed.patch
|
||||
Patch29: 0019-net-virtio-fix-interrupt-helper-for-packed-ring.patch
|
||||
Patch30: 0020-net-virtio-fix-calculation-of-device_event-ptr.patch
|
||||
|
||||
Summary: Set of libraries and drivers for fast packet processing
|
||||
|
||||
#
|
||||
@ -122,7 +97,6 @@ BuildRequires: gcc, kernel-headers, zlib-devel, numactl-devel
|
||||
BuildRequires: doxygen, %{_py}-devel, %{_py}-sphinx
|
||||
%ifarch x86_64
|
||||
BuildRequires: rdma-core-devel >= 15 libmnl-devel
|
||||
%global __requires_exclude_from ^%{_libdir}/librte_pmd_mlx[45]_glue\.so.*$
|
||||
%endif
|
||||
|
||||
%description
|
||||
@ -187,7 +161,7 @@ rm -f obj.o
|
||||
export EXTRA_CFLAGS="$(echo %{optflags} | sed -e 's:-Wall::g' -e 's:-march=[[:alnum:]]* ::g') -Wformat -fPIC %{_hardening_ldflags}"
|
||||
export EXTRA_LDFLAGS=$(echo %{__global_ldflags} | sed -e's/-Wl,//g' -e's/-spec.*//')
|
||||
export HOST_EXTRA_CFLAGS="$EXTRA_CFLAGS $EXTRA_RPM_LDFLAGS"
|
||||
export EXTRA_HOST_LDFLAGS=$(echo %{__global_ldflags} | sed -e's/-spec.*//')
|
||||
export EXTRA_HOST_LDFLAGS="$EXTRA_RPM_LDFLAGS $(echo %{__global_ldflags} | sed -e's/-spec.*//')"
|
||||
|
||||
# DPDK defaults to using builder-specific compiler flags. However,
|
||||
# the config has been changed by specifying CONFIG_RTE_MACHINE=default
|
||||
@ -223,15 +197,6 @@ find %{buildroot}%{sdkdir}/ -name "*.py" -exec \
|
||||
mkdir -p %{buildroot}/%{pmddir}
|
||||
for f in %{buildroot}/%{_libdir}/*_pmd_*.so.*; do
|
||||
bn=$(basename ${f})
|
||||
%ifarch x86_64
|
||||
case $bn in
|
||||
librte_pmd_mlx[45]_glue.so.*)
|
||||
mkdir -p %{buildroot}/%{pmddir}-glue
|
||||
ln -s ../${bn} %{buildroot}%{pmddir}-glue/${bn}
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
%endif
|
||||
ln -s ../${bn} %{buildroot}%{pmddir}/${bn}
|
||||
done
|
||||
|
||||
@ -241,6 +206,7 @@ rm -rf %{buildroot}%{_sbindir}/dpdk-devbind
|
||||
%endif
|
||||
rm -f %{buildroot}%{sdkdir}/usertools/dpdk-setup.sh
|
||||
rm -f %{buildroot}%{sdkdir}/usertools/meson.build
|
||||
rm -f %{buildroot}%{_bindir}/dpdk-pdump
|
||||
rm -f %{buildroot}%{_bindir}/dpdk-pmdinfo
|
||||
rm -f %{buildroot}%{_bindir}/dpdk-test-crypto-perf
|
||||
rm -f %{buildroot}%{_bindir}/dpdk-test-eventdev
|
||||
@ -255,6 +221,10 @@ done
|
||||
rm -rf %{buildroot}%{sdkdir}/examples
|
||||
%endif
|
||||
|
||||
# Due to RPM limitations delete the backwards compatibility symlinks
|
||||
rm -f %{buildroot}%{sdkdir}/mk/exec-env/bsdapp
|
||||
rm -f %{buildroot}%{sdkdir}/mk/exec-env/linuxapp
|
||||
|
||||
# Setup RTE_SDK environment as expected by apps etc
|
||||
mkdir -p %{buildroot}/%{_sysconfdir}/profile.d
|
||||
cat << EOF > %{buildroot}/%{_sysconfdir}/profile.d/dpdk-sdk-%{_arch}.sh
|
||||
@ -280,15 +250,9 @@ sed -i -e 's:-%{machine_tmpl}-:-%{machine}-:g' %{buildroot}/%{_sysconfdir}/profi
|
||||
# BSD
|
||||
%doc README MAINTAINERS
|
||||
%{_bindir}/testpmd
|
||||
%{_bindir}/dpdk-procinfo
|
||||
%{_bindir}/dpdk-pdump
|
||||
%dir %{pmddir}
|
||||
%{_libdir}/*.so.*
|
||||
%{pmddir}/*.so.*
|
||||
%ifarch x86_64
|
||||
%dir %{pmddir}-glue
|
||||
%{pmddir}-glue/*.so.*
|
||||
%endif
|
||||
|
||||
%files doc
|
||||
#BSD
|
||||
@ -310,8 +274,6 @@ sed -i -e 's:-%{machine_tmpl}-:-%{machine}-:g' %{buildroot}/%{_sysconfdir}/profi
|
||||
%{_libdir}/*.so
|
||||
%if %{with examples}
|
||||
%files examples
|
||||
%exclude %{_bindir}/dpdk-procinfo
|
||||
%exclude %{_bindir}/dpdk-pdump
|
||||
%{_bindir}/dpdk-*
|
||||
%doc %{sdkdir}/examples/
|
||||
%endif
|
||||
@ -323,6 +285,23 @@ sed -i -e 's:-%{machine_tmpl}-:-%{machine}-:g' %{buildroot}/%{_sysconfdir}/profi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Feb 20 2020 Timothy Redaelli <tredaelli@redhat.com> - 19.11-4
|
||||
- Remove MLX{4,5} glue libraries since RHEL 8 ships the correct libibverbs
|
||||
library. (#1805140)
|
||||
|
||||
* Mon Feb 17 2020 Timothy Redaelli <tredaelli@redhat.com> - 19.11-3
|
||||
- Remove /usr/share/dpdk/mk/exec-env/{bsd,linux}app symlinks (#1773889)
|
||||
|
||||
* Thu Feb 13 2020 Timothy Redaelli <tredaelli@redhat.com> - 19.11-2
|
||||
- Add pretrans to handle /usr/share/dpdk/mk/exec-env/{bsd,linux}app (#1773889)
|
||||
|
||||
* Thu Nov 28 2019 David Marchand <david.marchand@redhat.com> - 19.11-1
|
||||
- Rebase to 19.11 (#1773889)
|
||||
- Remove dpdk-pdump (#1779229)
|
||||
|
||||
* Mon Nov 04 2019 Timothy Redaelli <tredaelli@redhat.com> - 18.11.2-4
|
||||
- Pass the correct LDFLAGS to host apps (dpdk-pmdinfogen) too (#1755538)
|
||||
|
||||
* Mon Sep 16 2019 Jens Freimann <jfreimann@redhat.com> - 18.11.2-3
|
||||
- Add fix for wrong pointer calculation to fix Covscan issue
|
||||
- https://cov01.lab.eng.brq.redhat.com/covscanhub/task/135452/log/added.html
|
||||
|
Loading…
Reference in New Issue
Block a user