diff options
author | Matias Elo <matias.elo@nokia.com> | 2023-03-22 15:33:54 +0200 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2023-04-13 10:44:33 +0300 |
commit | 482a09995098c96a6a4aa0891316ce84d36496e7 (patch) | |
tree | c6dcdf055270de04de84818c0d2cfb5f21e3aed7 /platform | |
parent | 1e90fc0268493238485b78d86c397b48dc118dc0 (diff) |
linux-gen: dpdk: remove usage of odp_errno
Setting odp_errno has been removed from ODP APIs, so remove usage from dpdk
pktio. TX path data types are unified to prevent performance degradation.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
Diffstat (limited to 'platform')
-rw-r--r-- | platform/linux-generic/pktio/dpdk.c | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index bfe287228..67779e073 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -24,7 +24,6 @@ #include <odp_classification_internal.h> #include <odp_debug_internal.h> -#include <odp_errno_define.h> #include <odp_global_data.h> #include <odp_libconfig_internal.h> #include <odp_macros_internal.h> @@ -59,6 +58,7 @@ #endif #include <ctype.h> +#include <errno.h> #include <sched.h> #include <stdint.h> #include <unistd.h> @@ -883,12 +883,11 @@ static inline void pkt_set_ol_tx(odp_pktout_config_opt_t *pktout_cfg, static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry, struct rte_mbuf *mbuf_table[], const odp_packet_t pkt_table[], uint16_t num, - int *tx_ts_idx) + uint16_t *tx_ts_idx) { pkt_dpdk_t *pkt_dpdk = pkt_priv(pktio_entry); - int i, j; char *data; - uint16_t pkt_len; + uint16_t i, j, pkt_len; uint8_t chksum_enabled = pktio_entry->enabled.chksum_insert; uint8_t tx_ts_enabled = _odp_pktio_tx_ts_enabled(pktio_entry); odp_pktout_config_opt_t *pktout_cfg = &pktio_entry->config.pktout; @@ -903,11 +902,8 @@ static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry, pkt_len = packet_len(pkt_hdr); - if (odp_unlikely(pkt_len > pkt_dpdk->mtu)) { - if (i == 0) - _odp_errno = EMSGSIZE; + if (odp_unlikely(pkt_len > pkt_dpdk->mtu)) goto fail; - } /* Packet always fits in mbuf */ data = rte_pktmbuf_append(mbuf_table[i], pkt_len); @@ -929,7 +925,7 @@ fail: for (j = i; j < num; j++) rte_pktmbuf_free(mbuf_table[j]); - return i; + return i > 0 ? i : -1; } static inline void prefetch_pkt(struct rte_mbuf *mbuf) @@ -1042,15 +1038,15 @@ static inline int mbuf_to_pkt_zero(pktio_entry_t *pktio_entry, static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry, struct rte_mbuf *mbuf_table[], const odp_packet_t pkt_table[], uint16_t num, - uint16_t *copy_count, uint16_t cpy_idx[], int *tx_ts_idx) + uint16_t *copy_count, uint16_t cpy_idx[], uint16_t *tx_ts_idx) { pkt_dpdk_t *pkt_dpdk = pkt_priv(pktio_entry); odp_pktout_config_opt_t *pktout_cfg = &pktio_entry->config.pktout; odp_pktout_config_opt_t *pktout_capa = &pkt_dpdk->pktout_capa; uint16_t mtu = pkt_dpdk->mtu; + uint16_t i; uint8_t chksum_enabled = pktio_entry->enabled.chksum_insert; uint8_t tx_ts_enabled = _odp_pktio_tx_ts_enabled(pktio_entry); - int i; *copy_count = 0; for (i = 0; i < num; i++) { @@ -1069,7 +1065,7 @@ static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry, pkt_set_ol_tx(pktout_cfg, pktout_capa, pkt_hdr, mbuf, odp_packet_data(pkt)); } else { - int dummy_idx = 0; + uint16_t dummy_idx = 0; /* Fall back to packet copy */ if (odp_unlikely(pkt_to_mbuf(pktio_entry, &mbuf, @@ -1087,9 +1083,7 @@ static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry, return i; fail: - if (i == 0) - _odp_errno = EMSGSIZE; - return i; + return i > 0 ? i : -1; } /* Test if s has only digits or not. Dpdk pktio uses only digits.*/ @@ -2134,10 +2128,9 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index, pkt_dpdk_t *pkt_dpdk = pkt_priv(pktio_entry); uint16_t copy_count = 0; uint16_t cpy_idx[num]; - int tx_pkts; - int i; + uint16_t tx_pkts; int mbufs; - int tx_ts_idx = 0; + uint16_t tx_ts_idx = 0; if (_ODP_DPDK_ZERO_COPY) mbufs = pkt_to_mbuf_zero(pktio_entry, tx_mbufs, pkt_table, num, @@ -2146,6 +2139,9 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index, mbufs = pkt_to_mbuf(pktio_entry, tx_mbufs, pkt_table, num, &tx_ts_idx); + if (odp_unlikely(mbufs < 1)) + return mbufs; + if (!pkt_dpdk->flags.lockless_tx) odp_ticketlock_lock(&pkt_dpdk->tx_lock[index]); @@ -2163,7 +2159,7 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index, if (odp_unlikely(copy_count)) { uint16_t idx; - for (i = 0; i < copy_count; i++) { + for (uint16_t i = 0; i < copy_count; i++) { idx = cpy_idx[i]; if (odp_likely(idx < tx_pkts)) @@ -2172,20 +2168,14 @@ static int dpdk_send(pktio_entry_t *pktio_entry, int index, rte_pktmbuf_free(tx_mbufs[idx]); } } - if (odp_unlikely(tx_pkts == 0 && _odp_errno != 0)) - return -1; } else { if (odp_unlikely(tx_pkts < mbufs)) { - for (i = tx_pkts; i < mbufs; i++) + for (uint16_t i = tx_pkts; i < mbufs; i++) rte_pktmbuf_free(tx_mbufs[i]); } - if (odp_unlikely(tx_pkts == 0)) { - if (_odp_errno != 0) - return -1; - } else { + if (odp_likely(tx_pkts)) odp_packet_free_multi(pkt_table, tx_pkts); - } } return tx_pkts; |