From: Declan Doherty <declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: dev-VfR2kkLFssw@public.gmane.org
Subject: [PATCH 4/6] bond: free mbufs if transmission fails in bonding tx_burst functions
Date: Tue, 19 Aug 2014 14:51:51 +0100 [thread overview]
Message-ID: <1408456313-28812-5-git-send-email-declan.doherty@intel.com> (raw)
In-Reply-To: <1408456313-28812-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Fixing a number of corner cases that if transmission failed on slave devices then this
could lead to leaked mbufs
Signed-off-by: Declan Doherty <declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
app/test/test_link_bonding.c | 4 +-
lib/librte_pmd_bond/rte_eth_bond_pmd.c | 46 +++++++++++++++++++++++++-------
2 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c
index 02823b6..3c265ee 100644
--- a/app/test/test_link_bonding.c
+++ b/app/test/test_link_bonding.c
@@ -3415,7 +3415,7 @@ test_broadcast_tx_burst(void)
/* Send burst on bonded port */
nb_tx = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst,
burst_size);
- if (nb_tx != burst_size * test_params->bonded_slave_count) {
+ if (nb_tx != burst_size) {
printf("Bonded Port (%d) rx burst failed, packets transmitted value (%u) not as expected (%d)\n",
test_params->bonded_port_id,
nb_tx, burst_size);
@@ -3770,7 +3770,7 @@ test_broadcast_verify_slave_link_status_change_behaviour(void)
}
if (rte_eth_tx_burst(test_params->bonded_port_id, 0, &pkt_burst[0][0],
- burst_size) != (burst_size * slave_count)) {
+ burst_size) != burst_size) {
printf("rte_eth_tx_burst failed\n");
return -1;
}
diff --git a/lib/librte_pmd_bond/rte_eth_bond_pmd.c b/lib/librte_pmd_bond/rte_eth_bond_pmd.c
index 70123fc..ae9726e 100644
--- a/lib/librte_pmd_bond/rte_eth_bond_pmd.c
+++ b/lib/librte_pmd_bond/rte_eth_bond_pmd.c
@@ -101,7 +101,7 @@ bond_ethdev_tx_burst_round_robin(void *queue, struct rte_mbuf **bufs,
uint8_t num_of_slaves;
uint8_t slaves[RTE_MAX_ETHPORTS];
- uint16_t num_tx_total = 0;
+ uint16_t num_tx_total = 0, num_tx_slave;
static int slave_idx = 0;
int i, cs_idx = 0;
@@ -130,9 +130,17 @@ bond_ethdev_tx_burst_round_robin(void *queue, struct rte_mbuf **bufs,
/* Send packet burst on each slave device */
for (i = 0; i < num_of_slaves; i++)
- if (slave_nb_pkts[i] > 0)
- num_tx_total += rte_eth_tx_burst(slaves[i],
+ if (slave_nb_pkts[i] > 0) {
+ num_tx_slave = rte_eth_tx_burst(slaves[i],
bd_tx_q->queue_id, slave_bufs[i], slave_nb_pkts[i]);
+ num_tx_total += num_tx_slave;
+
+ /* if tx burst fails, free unsent mbufs */
+ while (unlikely(num_tx_slave < slave_nb_pkts[i])) {
+ rte_pktmbuf_free(slave_bufs[i][num_tx_slave]);
+ num_tx_slave++;
+ }
+ }
return num_tx_total;
}
@@ -283,7 +291,7 @@ bond_ethdev_tx_burst_balance(void *queue, struct rte_mbuf **bufs,
uint8_t num_of_slaves;
uint8_t slaves[RTE_MAX_ETHPORTS];
- uint16_t num_tx_total = 0;
+ uint16_t num_tx_total = 0, num_tx_slave = 0;
int i, op_slave_id;
@@ -315,11 +323,19 @@ bond_ethdev_tx_burst_balance(void *queue, struct rte_mbuf **bufs,
/* Send packet burst on each slave device */
for (i = 0; i < num_of_slaves; i++) {
if (slave_nb_pkts[i] > 0) {
- num_tx_total += rte_eth_tx_burst(slaves[i], bd_tx_q->queue_id,
+ num_tx_slave = rte_eth_tx_burst(slaves[i], bd_tx_q->queue_id,
slave_bufs[i], slave_nb_pkts[i]);
+ num_tx_total += num_tx_slave;
+
+ /* if tx burst fails, free unsent mbufs */
+ while (unlikely(num_tx_slave < slave_nb_pkts[i])) {
+ rte_pktmbuf_free(slave_bufs[i][num_tx_slave]);
+ num_tx_slave++;
+ }
}
}
+
return num_tx_total;
}
@@ -333,7 +349,7 @@ bond_ethdev_tx_burst_broadcast(void *queue, struct rte_mbuf **bufs,
uint8_t num_of_slaves;
uint8_t slaves[RTE_MAX_ETHPORTS];
- uint16_t num_tx_total = 0;
+ uint16_t num_tx_slave = 0, max_tx_pkts = 0;
int i;
@@ -354,11 +370,21 @@ bond_ethdev_tx_burst_broadcast(void *queue, struct rte_mbuf **bufs,
rte_mbuf_refcnt_update(bufs[i], num_of_slaves - 1);
/* Transmit burst on each active slave */
- for (i = 0; i < num_of_slaves; i++)
- num_tx_total += rte_eth_tx_burst(slaves[i], bd_tx_q->queue_id,
- bufs, nb_pkts);
+ for (i = 0; i < num_of_slaves; i++) {
+ num_tx_slave = rte_eth_tx_burst(slaves[i], bd_tx_q->queue_id,
+ bufs, nb_pkts);
- return num_tx_total;
+ if (max_tx_pkts < num_tx_slave)
+ max_tx_pkts = num_tx_slave;
+
+ /* if tx burst fails, free unsent mbufs */
+ while (unlikely(num_tx_slave < nb_pkts)) {
+ rte_pktmbuf_free(bufs[num_tx_slave]);
+ num_tx_slave++;
+ }
+ }
+
+ return max_tx_pkts;
}
void
--
1.7.0.7
next prev parent reply other threads:[~2014-08-19 13:51 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-19 13:51 [PATCH 0/6] link bonding Declan Doherty
[not found] ` <1408456313-28812-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-08-19 13:51 ` [PATCH 1/6] bond: link status interrupt support Declan Doherty
[not found] ` <1408456313-28812-2-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-08-20 20:24 ` Sanford, Robert
2014-08-19 13:51 ` [PATCH 2/6] bond: removing switch statement from rx burst method Declan Doherty
[not found] ` <1408456313-28812-3-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-08-20 20:25 ` Sanford, Robert
2014-08-19 13:51 ` [PATCH 3/6] bond: fix naming inconsistency in tx_burst_round_robin Declan Doherty
[not found] ` <1408456313-28812-4-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-08-20 20:25 ` Sanford, Robert
2014-08-19 13:51 ` Declan Doherty [this message]
2014-08-19 13:51 ` [PATCH 5/6] test app: adding support for generating variable sized packets Declan Doherty
2014-08-19 13:51 ` [PATCH 6/6] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-08-22 7:41 ` [PATCH 0/6] link bonding Jiajia, SunX
2014-09-01 8:31 ` [PATCH v2 " Declan Doherty
[not found] ` <1409560289-29558-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-09-02 13:31 ` De Lara Guarch, Pablo
2014-09-02 18:15 ` Stephen Hemminger
2014-09-01 8:31 ` [PATCH v2 1/6] bond: link status interrupt support Declan Doherty
2014-09-01 8:31 ` [PATCH v2 2/6] bond: removing switch statement from rx burst method Declan Doherty
2014-09-01 8:31 ` [PATCH v2 3/6] bond: fix naming inconsistency in tx_burst_round_robin Declan Doherty
2014-09-01 8:31 ` [PATCH v2 4/6] bond: free mbufs if transmission fails in bonding tx_burst functions Declan Doherty
[not found] ` <1409560289-29558-5-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-09-02 9:22 ` Doherty, Declan
[not found] ` <345C63BAECC1AD42A2EC8C63AFFC3ADC2737656B-kPTMFJFq+rF9qrmMLTLiibfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-09-02 9:31 ` Thomas Monjalon
2014-09-23 13:18 ` [PATCH v3 0/5] link bonding Declan Doherty
[not found] ` <1411478290-28807-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-09-23 13:18 ` [PATCH v3 1/5] bond: free mbufs if transmission fails in bonding tx_burst functions Declan Doherty
2014-09-23 13:18 ` [PATCH v3 2/5] test app: adding support for generating variable sized packet Declan Doherty
2014-09-23 13:18 ` [PATCH v3 3/5] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-09-23 13:18 ` [PATCH v3 4/5] bond: lsc polling support Declan Doherty
[not found] ` <1411478290-28807-5-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-09-24 13:16 ` Ananyev, Konstantin
2014-09-23 13:18 ` [PATCH v3 5/5] bond: unit test test macro refactor Declan Doherty
2014-09-01 8:31 ` [PATCH v2 5/6] test app: adding support for generating variable sized packets Declan Doherty
2014-09-01 8:31 ` [PATCH v2 6/6] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-09-30 9:57 ` [PATCH v4 0/8] link bonding Declan Doherty
[not found] ` <1412071079-7355-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-09-30 9:57 ` [PATCH v4 1/8] bond: link status interrupt support Declan Doherty
2014-09-30 9:57 ` [PATCH v4 2/8] bond: removing switch statement from rx burst method Declan Doherty
2014-09-30 9:57 ` [PATCH v4 3/8] bond: fix naming inconsistency in tx_burst_round_robin Declan Doherty
2014-09-30 9:57 ` [PATCH v4 4/8] bond: free mbufs if transmission fails in bonding tx_burst functions Declan Doherty
[not found] ` <1412071079-7355-5-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-10-13 15:29 ` De Lara Guarch, Pablo
2014-09-30 9:57 ` [PATCH v4 5/8] test app: adding support for generating variable sized packet bursts Declan Doherty
[not found] ` <1412071079-7355-6-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-10-24 3:22 ` Liang, Cunming
2014-09-30 9:57 ` [PATCH v4 6/8] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-09-30 9:57 ` [PATCH v4 7/8] bond: lsc polling support Declan Doherty
2014-09-30 9:57 ` [PATCH v4 8/8] bond: unit test test macro refactor Declan Doherty
2014-10-08 8:49 ` [PATCH v4 0/8] link bonding Jiajia, SunX
2014-10-09 19:20 ` De Lara Guarch, Pablo
2014-10-14 12:59 ` [PATCH v5 " Declan Doherty
[not found] ` <1413291597-27326-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-10-14 12:59 ` [PATCH v5 1/8] bond: link status interrupt support Declan Doherty
2014-10-14 12:59 ` [PATCH v5 2/8] bond: removing switch statement from rx burst method Declan Doherty
2014-10-14 12:59 ` [PATCH v5 3/8] bond: fix naming inconsistency in tx_burst_round_robin Declan Doherty
2014-10-14 12:59 ` [PATCH v5 4/8] bond: free mbufs if transmission fails in bonding tx_burst functions Declan Doherty
2014-10-14 12:59 ` [PATCH v5 5/8] test app: adding support for generating variable sized packet Declan Doherty
2014-10-14 12:59 ` [PATCH v5 6/8] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-10-14 12:59 ` [PATCH v5 7/8] bond: lsc polling support Declan Doherty
2014-10-14 12:59 ` [PATCH v5 8/8] bond: unit test test macro refactor Declan Doherty
2014-10-14 15:59 ` [PATCH v5 0/8] link bonding De Lara Guarch, Pablo
2014-11-05 3:10 ` Jiajia, SunX
2014-11-07 12:22 ` [PATCH v6 " Declan Doherty
[not found] ` <1415362978-6306-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-11-07 12:22 ` [PATCH v6 1/8] bond: link status interrupt support Declan Doherty
2014-11-07 12:22 ` [PATCH v6 2/8] bond: removing switch statement from rx burst method Declan Doherty
2014-11-07 12:22 ` [PATCH v6 3/8] bond: fix naming inconsistency in tx_burst_round_robin Declan Doherty
2014-11-07 12:22 ` [PATCH v6 4/8] bond: free mbufs if transmission fails in bonding tx_burst functions Declan Doherty
2014-11-07 12:22 ` [PATCH v6 5/8] test app: adding support for generating variable sized packet Declan Doherty
2014-11-07 12:22 ` [PATCH v6 6/8] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-11-07 12:22 ` [PATCH v6 7/8] bond: lsc polling support Declan Doherty
2014-11-07 12:22 ` [PATCH v6 8/8] bond: unit test test macro refactor Declan Doherty
2014-11-07 16:40 ` [PATCH v6 0/8] link bonding De Lara Guarch, Pablo
[not found] ` <E115CCD9D858EF4F90C690B0DCB4D89726834C36-kPTMFJFq+rEMvF1YICWikbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-21 17:07 ` Doherty, Declan
[not found] ` <345C63BAECC1AD42A2EC8C63AFFC3ADC27422D1C-kPTMFJFq+rF9qrmMLTLiibfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-21 18:36 ` Thomas Monjalon
2014-11-23 13:40 ` Thomas Monjalon
2014-11-21 8:59 ` Jiajia, SunX
2014-11-24 12:27 ` [PATCH v7 0/7] " Declan Doherty
[not found] ` <1416832054-24086-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-11-24 12:27 ` [PATCH v7 1/7] bond: link status interrupt support Declan Doherty
2014-11-24 12:27 ` [PATCH v7 2/7] bond: removing switch statement from rx burst method Declan Doherty
2014-11-24 12:27 ` [PATCH v7 3/7] bond: fix naming inconsistency in tx_burst_round_robin Declan Doherty
2014-11-24 12:27 ` [PATCH v7 4/7] bond: free mbufs if transmission fails in bonding tx_burst functions Declan Doherty
2014-11-24 12:27 ` [PATCH v7 5/7] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-11-24 12:27 ` [PATCH v7 6/7] bond: lsc polling support Declan Doherty
2014-11-24 12:27 ` [PATCH v7 7/7] bond: unit test test macro refactor Declan Doherty
2014-11-24 15:35 ` [PATCH v7 0/7] link bonding Thomas Monjalon
2014-11-24 16:24 ` Doherty, Declan
[not found] ` <345C63BAECC1AD42A2EC8C63AFFC3ADC274244EC-kPTMFJFq+rF9qrmMLTLiibfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-24 17:53 ` Thomas Monjalon
2014-11-24 16:33 ` [PATCH v8 " Declan Doherty
[not found] ` <1416846822-26897-1-git-send-email-declan.doherty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-11-24 16:33 ` [PATCH v8 1/7] bond: link status interrupt support Declan Doherty
2014-11-24 16:33 ` [PATCH v8 2/7] bond: removing switch statement from rx burst method Declan Doherty
2014-11-24 16:33 ` [PATCH v8 3/7] bond: fix naming inconsistency in tx_burst_round_robin Declan Doherty
2014-11-24 16:33 ` [PATCH v8 4/7] bond: free mbufs if transmission fails in bonding tx_burst functions Declan Doherty
2014-11-24 16:33 ` [PATCH v8 5/7] testpmd: adding parameter to reconfig method to set socket_id when adding new port to portlist Declan Doherty
2014-11-24 16:33 ` [PATCH v8 6/7] bond: lsc polling support Declan Doherty
2014-11-24 16:33 ` [PATCH v8 7/7] bond: unit test test macro refactor Declan Doherty
2014-11-24 18:32 ` [PATCH v8 0/7] link bonding Thomas Monjalon
2014-11-24 18:51 ` Thomas Monjalon
2014-11-24 20:54 ` Thomas Monjalon
2014-11-25 10:56 ` Jastrzebski, MichalX K
[not found] ` <60ABE07DBB3A454EB7FAD707B4BB1582138BC9F8-kPTMFJFq+rHjxeytcECX8bfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-25 11:20 ` Thomas Monjalon
-- strict thread matches above, loose matches on Subject: below --
2014-08-20 20:54 [PATCH 4/6] bond: free mbufs if transmission fails in bonding tx_burst functions Sanford, Robert
[not found] ` <D01A81B6.27E1%rsanford-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org>
2014-08-29 15:36 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1408456313-28812-5-git-send-email-declan.doherty@intel.com \
--to=declan.doherty-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=dev-VfR2kkLFssw@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.