From a292c8c35794531d27a068310a76d067f2ccf56a Mon Sep 17 00:00:00 2001 From: Todd Foggoa Date: Wed, 6 Apr 2016 09:57:01 -0400 Subject: Fix DPDK patch files so git am works smoothly Change-Id: Ic2a6e6f1ceea81f2e34f3db370682569327b44ad Signed-off-by: Todd Foggoa --- ...008-Add-missing-init-of-packet_type-field.patch | 10 +-- .../0011-enic-improve-Rx-performance.patch | 25 ++++-- .../0012-enic-fix-last-packet-not-being-sent.patch | 19 +++-- ...c-add-missing-newline-to-print-statements.patch | 19 +++-- .../0014-vmxnet3-support-jumbo-frames.patch | 12 +-- ...fix-crash-when-allocating-too-many-queues.patch | 21 +++-- .../0016-enic-fix-mbuf-flags-on-Rx.patch | 19 +++-- .../0017-enic-fix-error-packets-handling.patch | 21 +++-- ...0018-enic-remove-packet-error-conditional.patch | 17 +++-- .../0019-enic-update-maintainers.patch | 22 ++++-- .../0020-enic-fix-Rx-descriptor-limit.patch | 19 +++-- ...hang-when-number-of-packets-gt-queue-size.patch | 82 -------------------- ...TX-hang-when-number-of-packets-queue-size.patch | 89 ++++++++++++++++++++++ ...ix-bond-link-detect-in-non-interrupt-mode.patch | 27 ++++--- 14 files changed, 234 insertions(+), 168 deletions(-) delete mode 100644 dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-gt-queue-size.patch create mode 100644 dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-queue-size.patch (limited to 'dpdk/dpdk-2.2.0_patches') diff --git a/dpdk/dpdk-2.2.0_patches/0008-Add-missing-init-of-packet_type-field.patch b/dpdk/dpdk-2.2.0_patches/0008-Add-missing-init-of-packet_type-field.patch index 9c65330da7f..04c1fb398b7 100644 --- a/dpdk/dpdk-2.2.0_patches/0008-Add-missing-init-of-packet_type-field.patch +++ b/dpdk/dpdk-2.2.0_patches/0008-Add-missing-init-of-packet_type-field.patch @@ -1,4 +1,4 @@ -From 9a2515d7157271bac2bd5cd49758dbf3eb2b43b6 Mon Sep 17 00:00:00 2001 +From 666ceb1d0c11e2ca69baacc272b7d5690d3f11a3 Mon Sep 17 00:00:00 2001 From: Bud Grise Date: Mon, 1 Feb 2016 14:28:01 -0500 Subject: [PATCH 8/8] Add missing init of packet_type field. @@ -34,10 +34,10 @@ index d8fb252..8796c8a 100644 /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */ rxm->vlan_tci = rte_le_to_cpu_16(rxd.special); diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c -index e4bf9b7..e605c85 100644 +index 2512bce..a74c816 100644 --- a/drivers/net/virtio/virtio_rxtx.c +++ b/drivers/net/virtio/virtio_rxtx.c -@@ -605,6 +605,7 @@ virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) +@@ -619,6 +619,7 @@ virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) rxm->pkt_len = (uint32_t)(len[i] - hdr_size); rxm->data_len = (uint16_t)(len[i] - hdr_size); rxm->ol_flags = 0; @@ -45,7 +45,7 @@ index e4bf9b7..e605c85 100644 if (hw->vlan_strip) rte_vlan_strip(rxm); -@@ -726,6 +727,7 @@ virtio_recv_mergeable_pkts(void *rx_queue, +@@ -739,6 +740,7 @@ virtio_recv_mergeable_pkts(void *rx_queue, rxm->pkt_len = (uint32_t)(len[0] - hdr_size); rxm->data_len = (uint16_t)(len[0] - hdr_size); rxm->ol_flags = 0; @@ -66,5 +66,5 @@ index 4de5d89..c76b230 100644 vmxnet3_rx_offload(rcd, rxm); -- -2.2.1 +1.9.1 diff --git a/dpdk/dpdk-2.2.0_patches/0011-enic-improve-Rx-performance.patch b/dpdk/dpdk-2.2.0_patches/0011-enic-improve-Rx-performance.patch index 98824c57f9c..2aa4840dbc7 100644 --- a/dpdk/dpdk-2.2.0_patches/0011-enic-improve-Rx-performance.patch +++ b/dpdk/dpdk-2.2.0_patches/0011-enic-improve-Rx-performance.patch @@ -1,9 +1,8 @@ -commit 947d860c821f4248dcf2fc01e98671524973eeea -Author: John Daley -Date: Fri Mar 4 13:09:00 2016 -0800 +From 057358356e7d05f07ab2df37c12b1cce37a3cca9 Mon Sep 17 00:00:00 2001 +From: John Daley +Date: Fri, 4 Mar 2016 13:09:00 -0800 +Subject: [PATCH 11/22] enic: improve Rx performance - enic: improve Rx performance - This is a wholesale replacement of the Enic PMD receive path in order to improve performance and code clarity. The changes are: - Simplify and reduce code path length of receive function. @@ -13,8 +12,19 @@ Date: Fri Mar 4 13:09:00 2016 -0800 - Remove the unneeded container structure around the RQ mbuf ring - Prefetch next Mbuf and descriptors while processing the current one - Use a lookup table for converting CQ flags to mbuf flags. - + Signed-off-by: John Daley +--- + drivers/net/enic/Makefile | 1 + + drivers/net/enic/base/vnic_rq.c | 99 ++--------- + drivers/net/enic/base/vnic_rq.h | 147 +--------------- + drivers/net/enic/enic.h | 16 +- + drivers/net/enic/enic_ethdev.c | 27 ++- + drivers/net/enic/enic_main.c | 321 ++++++++++------------------------ + drivers/net/enic/enic_res.h | 16 +- + drivers/net/enic/enic_rx.c | 370 ++++++++++++++++++++++++++++++++++++++++ + 8 files changed, 511 insertions(+), 486 deletions(-) + create mode 100644 drivers/net/enic/enic_rx.c diff --git a/drivers/net/enic/Makefile b/drivers/net/enic/Makefile index f0ee093..f316274 100644 @@ -1334,3 +1344,6 @@ index 0000000..945a60f + + return nb_rx; +} +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0012-enic-fix-last-packet-not-being-sent.patch b/dpdk/dpdk-2.2.0_patches/0012-enic-fix-last-packet-not-being-sent.patch index 181ca912f32..218a42f6ba3 100644 --- a/dpdk/dpdk-2.2.0_patches/0012-enic-fix-last-packet-not-being-sent.patch +++ b/dpdk/dpdk-2.2.0_patches/0012-enic-fix-last-packet-not-being-sent.patch @@ -1,17 +1,19 @@ -commit aba31298526865f5db99eaa54b63eb39dc95b74f -Author: John Daley -Date: Tue Mar 8 10:49:07 2016 -0800 +From a31a1dbdf5e1ff46d04f50fea02e83453b84652c Mon Sep 17 00:00:00 2001 +From: John Daley +Date: Tue, 8 Mar 2016 10:49:07 -0800 +Subject: [PATCH 12/22] enic: fix last packet not being sent - enic: fix last packet not being sent - The last packet of the tx burst function array was not being emitted until the subsequent call. The nic descriptor index was being set to the current tx descriptor instead of one past the descriptor as required by the nic. - + Fixes: d739ba4c6abf ("enic: improve Tx packet rate") - + Signed-off-by: John Daley +--- + drivers/net/enic/base/enic_vnic_wq.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/enic/base/enic_vnic_wq.h b/drivers/net/enic/base/enic_vnic_wq.h index e3ea574..b019109 100644 @@ -32,3 +34,6 @@ index e3ea574..b019109 100644 } #endif /* _ENIC_VNIC_WQ_H_ */ +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0013-enic-add-missing-newline-to-print-statements.patch b/dpdk/dpdk-2.2.0_patches/0013-enic-add-missing-newline-to-print-statements.patch index e95327d2268..97a424f145c 100644 --- a/dpdk/dpdk-2.2.0_patches/0013-enic-add-missing-newline-to-print-statements.patch +++ b/dpdk/dpdk-2.2.0_patches/0013-enic-add-missing-newline-to-print-statements.patch @@ -1,15 +1,17 @@ -commit bba57df3861c644e98c5e8f79e62f6ca5074cb40 -Author: Nelson Escobar -Date: Thu Mar 17 15:48:13 2016 -0700 +From a1ed99bc24f88f061d75eed0db84dc6355855dd2 Mon Sep 17 00:00:00 2001 +From: Nelson Escobar +Date: Thu, 17 Mar 2016 15:48:13 -0700 +Subject: [PATCH 13/22] enic: add missing newline to print statements - enic: add missing newline to print statements - Add the missing '\n' character to the end of a few print statements. - + Fixes: fefed3d1e62c ("enic: new driver") - + Signed-off-by: Nelson Escobar Acked-by: John Daley +--- + drivers/net/enic/enic_main.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 9fff020..e30672c 100644 @@ -40,3 +42,6 @@ index 9fff020..e30672c 100644 __func__, name); return NULL; } +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0014-vmxnet3-support-jumbo-frames.patch b/dpdk/dpdk-2.2.0_patches/0014-vmxnet3-support-jumbo-frames.patch index ed7b3165391..cae055eb9bf 100644 --- a/dpdk/dpdk-2.2.0_patches/0014-vmxnet3-support-jumbo-frames.patch +++ b/dpdk/dpdk-2.2.0_patches/0014-vmxnet3-support-jumbo-frames.patch @@ -1,7 +1,7 @@ -From f582f39372766a24d9bdbdc3a2a3334de88a70f1 Mon Sep 17 00:00:00 2001 +From fef2b892245d5a2f3c68d2e03a6c5f2a40205cf7 Mon Sep 17 00:00:00 2001 From: Steve Shin Date: Wed, 23 Mar 2016 09:54:54 -0700 -Subject: [PATCH] vmxnet3: support jumbo frames +Subject: [PATCH 14/22] vmxnet3: support jumbo frames --- drivers/net/vmxnet3/vmxnet3_ethdev.c | 3 +- @@ -44,7 +44,7 @@ index 612487e..b1582f8 100644 bool stopped; uint16_t queue_id; /**< Device RX queue index. */ diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c -index 4de5d89..9f68ec6 100644 +index c76b230..59b6db8 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -547,7 +547,6 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) @@ -106,9 +106,9 @@ index 4de5d89..9f68ec6 100644 rxq->stats.drop_total++; rxq->stats.drop_err++; -@@ -641,9 +619,49 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) - rxm->ol_flags = 0; +@@ -642,9 +620,49 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) rxm->vlan_tci = 0; + rxm->packet_type = RTE_PTYPE_UNKNOWN; - vmxnet3_rx_offload(rcd, rxm); + /* @@ -158,7 +158,7 @@ index 4de5d89..9f68ec6 100644 rcd_done: rxq->cmd_ring[ring_idx].next2comp = idx; VMXNET3_INC_RING_IDX_ONLY(rxq->cmd_ring[ring_idx].next2comp, rxq->cmd_ring[ring_idx].size); -@@ -944,6 +962,7 @@ vmxnet3_dev_rxtx_init(struct rte_eth_dev *dev) +@@ -945,6 +963,7 @@ vmxnet3_dev_rxtx_init(struct rte_eth_dev *dev) } } rxq->stopped = FALSE; diff --git a/dpdk/dpdk-2.2.0_patches/0015-enic-fix-crash-when-allocating-too-many-queues.patch b/dpdk/dpdk-2.2.0_patches/0015-enic-fix-crash-when-allocating-too-many-queues.patch index f8e661fc831..2c0e65d3bbb 100644 --- a/dpdk/dpdk-2.2.0_patches/0015-enic-fix-crash-when-allocating-too-many-queues.patch +++ b/dpdk/dpdk-2.2.0_patches/0015-enic-fix-crash-when-allocating-too-many-queues.patch @@ -1,19 +1,21 @@ -commit ddf2da3ecec97a316838f40fe13e217afafc6252 -Author: Nelson Escobar -Date: Thu Mar 17 15:49:58 2016 -0700 +From 7a7fa2891df4ec4af0c34f3bbd203e1376e83951 Mon Sep 17 00:00:00 2001 +From: Nelson Escobar +Date: Thu, 17 Mar 2016 15:49:58 -0700 +Subject: [PATCH 15/22] enic: fix crash when allocating too many queues - enic: fix crash when allocating too many queues - Add checks to make sure we don't try to allocate more tx or rx queues than we support. - + Fixes: fefed3d1e62c ("enic: new driver") - + Signed-off-by: Nelson Escobar Reviewed-by: John Daley +--- + drivers/net/enic/enic_ethdev.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c -index bab0f7d..4969476 100644 +index 6f2ada5..6c3c734 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -174,6 +174,13 @@ static int enicpmd_dev_tx_queue_setup(struct rte_eth_dev *eth_dev, @@ -44,3 +46,6 @@ index bab0f7d..4969476 100644 eth_dev->data->rx_queues[queue_idx] = (void *)&enic->rq[queue_idx]; ret = enic_alloc_rq(enic, queue_idx, socket_id, mp, nb_desc); +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0016-enic-fix-mbuf-flags-on-Rx.patch b/dpdk/dpdk-2.2.0_patches/0016-enic-fix-mbuf-flags-on-Rx.patch index e8f74db5bf6..895d5715490 100644 --- a/dpdk/dpdk-2.2.0_patches/0016-enic-fix-mbuf-flags-on-Rx.patch +++ b/dpdk/dpdk-2.2.0_patches/0016-enic-fix-mbuf-flags-on-Rx.patch @@ -1,15 +1,17 @@ -commit 3253bbc79c8a1eddf791d9ec11bcea4a004d258e -Author: John Daley -Date: Thu Mar 17 15:57:05 2016 -0700 +From 3ffb9431d6ba34dbcffab5cff4c060d5dca167e1 Mon Sep 17 00:00:00 2001 +From: John Daley +Date: Thu, 17 Mar 2016 15:57:05 -0700 +Subject: [PATCH 16/22] enic: fix mbuf flags on Rx - enic: fix mbuf flags on Rx - In the receive path, the function to set mbuf ol_flags used the mbuf packet_type before it was set. - + Fixes: 947d860c821f ("enic: improve Rx performance") - + Signed-off-by: John Daley +--- + drivers/net/enic/enic_rx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/enic/enic_rx.c b/drivers/net/enic/enic_rx.c index 945a60f..59ebaa4 100644 @@ -36,3 +38,6 @@ index 945a60f..59ebaa4 100644 /* prefetch mbuf data for caller */ rte_packet_prefetch(RTE_PTR_ADD(rxmb->buf_addr, +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0017-enic-fix-error-packets-handling.patch b/dpdk/dpdk-2.2.0_patches/0017-enic-fix-error-packets-handling.patch index 058d5eb4cc5..28c05e889a9 100644 --- a/dpdk/dpdk-2.2.0_patches/0017-enic-fix-error-packets-handling.patch +++ b/dpdk/dpdk-2.2.0_patches/0017-enic-fix-error-packets-handling.patch @@ -1,24 +1,26 @@ -commit 5776c30293bbbdb3e332c868fbccf99b2026fba0 -Author: John Daley -Date: Thu Mar 17 15:57:06 2016 -0700 +From 678e5952cf49bb66c2d697581a70dc8c7d703e8f Mon Sep 17 00:00:00 2001 +From: John Daley +Date: Thu, 17 Mar 2016 15:57:06 -0700 +Subject: [PATCH 17/22] enic: fix error packets handling - enic: fix error packets handling - If the packet_error bit in the completion descriptor is set, the remainder of the descriptor and data are invalid. PKT_RX_MAC_ERR was set in the mbuf->ol_flags if packet_error was set and used later to indicate an error packet. But since PKT_RX_MAC_ERR is defined as 0, mbuf flags and packet types and length were being misinterpreted. - + Make the function enic_cq_rx_to_pkt_err_flags() return true for error packets and use the return value instead of mbuf->ol_flags to indicate error packets. Also remove warning for error packets and rely on rx_error stats. - + Fixes: 947d860c821f ("enic: improve Rx performance") - + Signed-off-by: John Daley +--- + drivers/net/enic/enic_rx.c | 43 ++++++++++++++++++------------------------- + 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/drivers/net/enic/enic_rx.c b/drivers/net/enic/enic_rx.c index 59ebaa4..817a891 100644 @@ -110,3 +112,6 @@ index 59ebaa4..817a891 100644 /* prefetch mbuf data for caller */ rte_packet_prefetch(RTE_PTR_ADD(rxmb->buf_addr, +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0018-enic-remove-packet-error-conditional.patch b/dpdk/dpdk-2.2.0_patches/0018-enic-remove-packet-error-conditional.patch index d3084c84c9e..3f29f6ea999 100644 --- a/dpdk/dpdk-2.2.0_patches/0018-enic-remove-packet-error-conditional.patch +++ b/dpdk/dpdk-2.2.0_patches/0018-enic-remove-packet-error-conditional.patch @@ -1,12 +1,14 @@ -commit 50765c820e98a4434efbc0a58df4b9d78afb7a5f -Author: John Daley -Date: Thu Mar 17 15:57:07 2016 -0700 +From 2fa6a45ff9f9fb3108b09403e32393416bd0a732 Mon Sep 17 00:00:00 2001 +From: John Daley +Date: Thu, 17 Mar 2016 15:57:07 -0700 +Subject: [PATCH 18/22] enic: remove packet error conditional - enic: remove packet error conditional - small cleanup to remove conditional. - + Signed-off-by: John Daley +--- + drivers/net/enic/enic_rx.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/net/enic/enic_rx.c b/drivers/net/enic/enic_rx.c index 817a891..232987a 100644 @@ -51,3 +53,6 @@ index 817a891..232987a 100644 /* prefetch mbuf data for caller */ rte_packet_prefetch(RTE_PTR_ADD(rxmb->buf_addr, +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0019-enic-update-maintainers.patch b/dpdk/dpdk-2.2.0_patches/0019-enic-update-maintainers.patch index 8beae3b2944..7415177215c 100644 --- a/dpdk/dpdk-2.2.0_patches/0019-enic-update-maintainers.patch +++ b/dpdk/dpdk-2.2.0_patches/0019-enic-update-maintainers.patch @@ -1,19 +1,22 @@ -commit 57524648749fb7dc1daf3af3213dab472ee432de -Author: John Daley -Date: Fri Mar 18 11:27:07 2016 -0700 +From 8ad252ab40b8f95db8413220146d54bf8a7d7be8 Mon Sep 17 00:00:00 2001 +From: John Daley +Date: Fri, 18 Mar 2016 11:27:07 -0700 +Subject: [PATCH 19/22] enic: update maintainers - enic: update maintainers - Change maintainers for ENIC PMD and fix pointer to enic documentation in MAINTAINERS. - + Signed-off-by: John Daley +--- + MAINTAINERS | 3 ++- + doc/guides/nics/enic.rst | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS -index 6ed54dd..e848ffa 100644 +index b90aeea..f5b8bb4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -276,8 +276,9 @@ F: doc/guides/nics/cxgbe.rst +@@ -264,8 +264,9 @@ F: doc/guides/nics/cxgbe.rst Cisco enic M: John Daley @@ -34,3 +37,6 @@ index 2a228fd..e67c3db 100644 - John Daley -- Sujith Sankar +- Nelson Escobar +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0020-enic-fix-Rx-descriptor-limit.patch b/dpdk/dpdk-2.2.0_patches/0020-enic-fix-Rx-descriptor-limit.patch index f2fb1245482..db2ac64612c 100644 --- a/dpdk/dpdk-2.2.0_patches/0020-enic-fix-Rx-descriptor-limit.patch +++ b/dpdk/dpdk-2.2.0_patches/0020-enic-fix-Rx-descriptor-limit.patch @@ -1,20 +1,22 @@ -commit 65ca78fdf9a684743bfca278cf1fcfea4603931d -Author: Nelson Escobar -Date: Fri Mar 18 11:33:34 2016 -0700 +From ce6badc60736f5e78a295f30fe84c3e40ad0c330 Mon Sep 17 00:00:00 2001 +From: Nelson Escobar +Date: Fri, 18 Mar 2016 11:33:34 -0700 +Subject: [PATCH 20/22] enic: fix Rx descriptor limit - enic: fix Rx descriptor limit - On initialization, the rq descriptor count was set to the limit of the vic. When the requested number of rx descriptors was less than this count, enic_alloc_rq() was incorrectly setting the count to the lower value. This results in later calls to enic_alloc_rq() incorrectly using the lower value as the adapter limit. - + Fixes: fefed3d1e62c ("enic: new driver") - + Signed-off-by: Nelson Escobar Reviewed-by: John Daley +--- + drivers/net/enic/enic_main.c | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index e30672c..2f79cf0 100644 @@ -59,3 +61,6 @@ index e30672c..2f79cf0 100644 RTE_CACHE_LINE_SIZE, rq->socket_id); if (rq->mbuf_ring != NULL) +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-gt-queue-size.patch b/dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-gt-queue-size.patch deleted file mode 100644 index 11e54e13fe4..00000000000 --- a/dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-gt-queue-size.patch +++ /dev/null @@ -1,82 +0,0 @@ -commit 67c4432ec364ce21f5059ba0696a9d0f3393356c -Author: John Daley -Date: Thu Mar 24 14:00:39 2016 -0700 - - enic: fix TX hang when number of packets > queue size - - If the nb_pkts parameter to rte_eth_tx_burst() was greater than - the TX descriptor count, a completion was not being requested - from the NIC, so descriptors would not be released back to the - host causing a lock-up. - - Introduce a limit of how many TX descriptors can be used in a single - call to the enic PMD burst TX function before requesting a completion. - - Fixes: d739ba4c6abf ("enic: improve Tx packet rate") - - Signed-off-by: John Daley - -diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c -index 4969476..6bea940 100644 ---- a/drivers/net/enic/enic_ethdev.c -+++ b/drivers/net/enic/enic_ethdev.c -@@ -523,7 +523,7 @@ static void enicpmd_remove_mac_addr(struct rte_eth_dev *eth_dev, __rte_unused ui - static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, - uint16_t nb_pkts) - { -- unsigned int index; -+ uint16_t index; - unsigned int frags; - unsigned int pkt_len; - unsigned int seg_len; -@@ -535,6 +535,7 @@ static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, - unsigned short vlan_id; - unsigned short ol_flags; - uint8_t last_seg, eop; -+ unsigned int host_tx_descs = 0; - - for (index = 0; index < nb_pkts; index++) { - tx_pkt = *tx_pkts++; -@@ -550,6 +551,7 @@ static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, - return index; - } - } -+ - pkt_len = tx_pkt->pkt_len; - vlan_id = tx_pkt->vlan_tci; - ol_flags = tx_pkt->ol_flags; -@@ -559,9 +561,19 @@ static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, - next_tx_pkt = tx_pkt->next; - seg_len = tx_pkt->data_len; - inc_len += seg_len; -- eop = (pkt_len == inc_len) || (!next_tx_pkt); -- last_seg = eop && -- (index == ((unsigned int)nb_pkts - 1)); -+ -+ host_tx_descs++; -+ last_seg = 0; -+ eop = 0; -+ if ((pkt_len == inc_len) || !next_tx_pkt) { -+ eop = 1; -+ /* post if last packet in batch or > thresh */ -+ if ((index == (nb_pkts - 1)) || -+ (host_tx_descs > ENIC_TX_POST_THRESH)) { -+ last_seg = 1; -+ host_tx_descs = 0; -+ } -+ } - enic_send_pkt(enic, wq, tx_pkt, (unsigned short)seg_len, - !frags, eop, last_seg, ol_flags, vlan_id); - tx_pkt = next_tx_pkt; -diff --git a/drivers/net/enic/enic_res.h b/drivers/net/enic/enic_res.h -index 33f2e84..00fa71d 100644 ---- a/drivers/net/enic/enic_res.h -+++ b/drivers/net/enic/enic_res.h -@@ -53,6 +53,7 @@ - - #define ENIC_NON_TSO_MAX_DESC 16 - #define ENIC_DEFAULT_RX_FREE_THRESH 32 -+#define ENIC_TX_POST_THRESH (ENIC_MIN_WQ_DESCS / 2) - - #define ENIC_SETTING(enic, f) ((enic->config.flags & VENETF_##f) ? 1 : 0) - diff --git a/dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-queue-size.patch b/dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-queue-size.patch new file mode 100644 index 00000000000..154e6f1e7ef --- /dev/null +++ b/dpdk/dpdk-2.2.0_patches/0021-enic-fix-TX-hang-when-number-of-packets-queue-size.patch @@ -0,0 +1,89 @@ +From e89ea2a038987102d9eb0a7ea217d7a301b484cb Mon Sep 17 00:00:00 2001 +From: John Daley +Date: Thu, 24 Mar 2016 14:00:39 -0700 +Subject: [PATCH 21/22] enic: fix TX hang when number of packets > queue + size + + If the nb_pkts parameter to rte_eth_tx_burst() was greater than + the TX descriptor count, a completion was not being requested + from the NIC, so descriptors would not be released back to the + host causing a lock-up. + + Introduce a limit of how many TX descriptors can be used in a single + call to the enic PMD burst TX function before requesting a completion. + + Fixes: d739ba4c6abf ("enic: improve Tx packet rate") + + Signed-off-by: John Daley +--- + drivers/net/enic/enic_ethdev.c | 20 ++++++++++++++++---- + drivers/net/enic/enic_res.h | 1 + + 2 files changed, 17 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c +index 6c3c734..61bb83c 100644 +--- a/drivers/net/enic/enic_ethdev.c ++++ b/drivers/net/enic/enic_ethdev.c +@@ -510,7 +510,7 @@ static void enicpmd_remove_mac_addr(struct rte_eth_dev *eth_dev, __rte_unused ui + static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, + uint16_t nb_pkts) + { +- unsigned int index; ++ uint16_t index; + unsigned int frags; + unsigned int pkt_len; + unsigned int seg_len; +@@ -522,6 +522,7 @@ static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, + unsigned short vlan_id; + unsigned short ol_flags; + uint8_t last_seg, eop; ++ unsigned int host_tx_descs = 0; + + for (index = 0; index < nb_pkts; index++) { + tx_pkt = *tx_pkts++; +@@ -537,6 +538,7 @@ static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, + return index; + } + } ++ + pkt_len = tx_pkt->pkt_len; + vlan_id = tx_pkt->vlan_tci; + ol_flags = tx_pkt->ol_flags; +@@ -546,9 +548,19 @@ static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, + next_tx_pkt = tx_pkt->next; + seg_len = tx_pkt->data_len; + inc_len += seg_len; +- eop = (pkt_len == inc_len) || (!next_tx_pkt); +- last_seg = eop && +- (index == ((unsigned int)nb_pkts - 1)); ++ ++ host_tx_descs++; ++ last_seg = 0; ++ eop = 0; ++ if ((pkt_len == inc_len) || !next_tx_pkt) { ++ eop = 1; ++ /* post if last packet in batch or > thresh */ ++ if ((index == (nb_pkts - 1)) || ++ (host_tx_descs > ENIC_TX_POST_THRESH)) { ++ last_seg = 1; ++ host_tx_descs = 0; ++ } ++ } + enic_send_pkt(enic, wq, tx_pkt, (unsigned short)seg_len, + !frags, eop, last_seg, ol_flags, vlan_id); + tx_pkt = next_tx_pkt; +diff --git a/drivers/net/enic/enic_res.h b/drivers/net/enic/enic_res.h +index 33f2e84..00fa71d 100644 +--- a/drivers/net/enic/enic_res.h ++++ b/drivers/net/enic/enic_res.h +@@ -53,6 +53,7 @@ + + #define ENIC_NON_TSO_MAX_DESC 16 + #define ENIC_DEFAULT_RX_FREE_THRESH 32 ++#define ENIC_TX_POST_THRESH (ENIC_MIN_WQ_DESCS / 2) + + #define ENIC_SETTING(enic, f) ((enic->config.flags & VENETF_##f) ? 1 : 0) + +-- +1.9.1 + diff --git a/dpdk/dpdk-2.2.0_patches/0022-bonding-fix-bond-link-detect-in-non-interrupt-mode.patch b/dpdk/dpdk-2.2.0_patches/0022-bonding-fix-bond-link-detect-in-non-interrupt-mode.patch index 9cb56d2d499..3e03c8968fa 100644 --- a/dpdk/dpdk-2.2.0_patches/0022-bonding-fix-bond-link-detect-in-non-interrupt-mode.patch +++ b/dpdk/dpdk-2.2.0_patches/0022-bonding-fix-bond-link-detect-in-non-interrupt-mode.patch @@ -1,25 +1,27 @@ -commit 65bcf215aae2e0b9935557e237af054ad0860bad -Author: Nelson Escobar -Date: Tue Mar 22 13:42:08 2016 -0700 +From a2f08a919c72af29c56b937e6c92eb104037fed5 Mon Sep 17 00:00:00 2001 +From: Nelson Escobar +Date: Tue, 22 Mar 2016 13:42:08 -0700 +Subject: [PATCH 22/22] bonding: fix bond link detect in non-interrupt mode - bonding: fix bond link detect in non-interrupt mode - Stopping then re-starting a bond interface containing slaves that used polling for link detection caused the bond to think all slave links were down and inactive. - + Move the start of the polling for link from slave_add() to bond_ethdev_start() and in bond_ethdev_stop() make sure we clear the last_link_status of the slaves. - + Signed-off-by: Nelson Escobar Signed-off-by: John Daley +--- + drivers/net/bonding/rte_eth_bond_pmd.c | 27 +++++++++++++++++---------- + 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c -index fb26d35..f0960c6 100644 +index b1373c6..d32c6f5 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c -@@ -1454,18 +1454,11 @@ slave_add(struct bond_dev_private *internals, +@@ -1447,18 +1447,11 @@ slave_add(struct bond_dev_private *internals, slave_details->port_id = slave_eth_dev->data->port_id; slave_details->last_link_status = 0; @@ -41,7 +43,7 @@ index fb26d35..f0960c6 100644 } slave_details->link_status_wait_to_complete = 0; -@@ -1550,6 +1543,18 @@ bond_ethdev_start(struct rte_eth_dev *eth_dev) +@@ -1543,6 +1536,18 @@ bond_ethdev_start(struct rte_eth_dev *eth_dev) eth_dev->data->port_id, internals->slaves[i].port_id); return -1; } @@ -60,7 +62,7 @@ index fb26d35..f0960c6 100644 } if (internals->user_defined_primary_port) -@@ -1622,6 +1627,8 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev) +@@ -1615,6 +1620,8 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev) internals->active_slave_count = 0; internals->link_status_polling_enabled = 0; @@ -69,3 +71,6 @@ index fb26d35..f0960c6 100644 eth_dev->data->dev_link.link_status = 0; eth_dev->data->dev_started = 0; +-- +1.9.1 + -- cgit 1.2.3-korg