On 10/19/16 15:09, Petri Savolainen wrote:
In some error cases, netmap and dpdk pktios were calling
odp_packet_free_multi with zero packets. Moved existing error
check to avoid a free call with zero packets.
Signed-off-by: Petri Savolainen <petri.savolai...@nokia.com>
---
platform/linux-generic/pktio/dpdk.c | 10 ++++++----
platform/linux-generic/pktio/netmap.c | 10 ++++++----
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/platform/linux-generic/pktio/dpdk.c
b/platform/linux-generic/pktio/dpdk.c
index 11f3509..0eb025a 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -956,10 +956,12 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int
index,
rte_pktmbuf_free(tx_mbufs[i]);
}
- odp_packet_free_multi(pkt_table, tx_pkts);
-
- if (odp_unlikely(tx_pkts == 0 && __odp_errno != 0))
- return -1;
+ if (odp_unlikely(tx_pkts == 0)) {
+ if (__odp_errno != 0)
+ return -1;
no need to modify original code for 2 ifs. One if and && usually
generates faster code.
+ } else {
+ odp_packet_free_multi(pkt_table, tx_pkts);
+ }
return tx_pkts;
}
diff --git a/platform/linux-generic/pktio/netmap.c
b/platform/linux-generic/pktio/netmap.c
index 412beec..c1cdf72 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -830,10 +830,12 @@ static int netmap_send(pktio_entry_t *pktio_entry, int
index,
if (!pkt_nm->lockless_tx)
odp_ticketlock_unlock(&pkt_nm->tx_desc_ring[index].s.lock);
- odp_packet_free_multi(pkt_table, nb_tx);
-
- if (odp_unlikely(nb_tx == 0 && __odp_errno != 0))
- return -1;
+ if (odp_unlikely(nb_tx == 0)) {
+ if (__odp_errno != 0)
+ return -1;
same here.
Maxim.
+ } else {
+ odp_packet_free_multi(pkt_table, nb_tx);
+ }
return nb_tx;
}