aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@linaro.org>2017-11-29 15:03:11 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2017-12-27 21:58:43 +0300
commitb041ee919ad847ca3bab74418a32b419465729fa (patch)
tree4cf608f352a2b31a59830b5fbb6947590927044d /platform
parentf620eecbba931ee236839897d172eb741a779ca9 (diff)
linux-gen: dpdk: checksum insert enabled flag
Added interface level flag to optimize checksum insertion checks. If checksum insertion has not been enabled, further configuration or packet level checks are not performed. Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> Reviewed-by: Bogdan Pricope <bogdan.pricope@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r--platform/linux-generic/include/odp_packet_io_internal.h3
-rw-r--r--platform/linux-generic/pktio/dpdk.c11
2 files changed, 9 insertions, 5 deletions
diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h
index 2be1ee2e3..25e037182 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -114,7 +114,8 @@ struct pktio_entry {
/* These two locks together lock the whole pktio device */
odp_ticketlock_t rxl; /**< RX ticketlock */
odp_ticketlock_t txl; /**< TX ticketlock */
- int cls_enabled; /**< is classifier enabled */
+ uint8_t cls_enabled; /**< classifier enabled */
+ uint8_t chksum_insert_ena; /**< pktout checksum offload enabled */
odp_pktio_t handle; /**< pktio handle */
union {
pkt_loop_t pkt_loop; /**< Using loopback for IO */
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c
index 3894fe5e1..54fd0bdef 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -561,6 +561,9 @@ static inline void pkt_set_ol_tx(odp_pktout_config_opt_t *pktout_cfg,
odp_bool_t ipv4_chksum_pkt, udp_chksum_pkt, tcp_chksum_pkt;
packet_parser_t *pkt_p = &pkt_hdr->p;
+ if (pkt_p->l3_offset == ODP_PACKET_OFFSET_INVALID)
+ return;
+
l3_hdr = (void *)(mbuf_data + pkt_p->l3_offset);
if (check_proto(l3_hdr, &l3_proto_v4, &l4_proto))
@@ -648,7 +651,7 @@ static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry,
odp_packet_copy_to_mem(pkt_table[i], 0, pkt_len, data);
- if (pkt_hdr->p.l3_offset != ODP_PACKET_OFFSET_INVALID) {
+ if (odp_unlikely(pktio_entry->s.chksum_insert_ena)) {
odp_pktout_config_opt_t *pktout_capa =
&pktio_entry->s.capa.config.pktout;
@@ -763,7 +766,7 @@ static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry,
pkt_hdr->extra_type == PKT_EXTRA_TYPE_DPDK)) {
mbuf_update(mbuf, pkt_hdr, pkt_len);
- if (pkt_hdr->p.l3_offset != ODP_PACKET_OFFSET_INVALID)
+ if (odp_unlikely(pktio_entry->s.chksum_insert_ena))
pkt_set_ol_tx(pktout_cfg, pktout_capa, pkt_hdr,
mbuf, _odp_packet_data(pkt));
} else {
@@ -786,8 +789,7 @@ static inline int pkt_to_mbuf_zero(pktio_entry_t *pktio_entry,
mbuf_init((struct rte_mempool *)
pool_entry->ext_desc, mbuf, pkt_hdr);
mbuf_update(mbuf, pkt_hdr, pkt_len);
- if (pkt_hdr->p.l3_offset !=
- ODP_PACKET_OFFSET_INVALID)
+ if (pktio_entry->s.chksum_insert_ena)
pkt_set_ol_tx(pktout_cfg, pktout_capa,
pkt_hdr, mbuf,
_odp_packet_data(pkt));
@@ -1454,6 +1456,7 @@ static int dpdk_start(pktio_entry_t *pktio_entry)
rte_eth_dev_info_get(port_id, &dev_info);
dev_info.default_txconf.txq_flags = txq_flags;
txconf = &dev_info.default_txconf;
+ pktio_entry->s.chksum_insert_ena = 1;
}
ret = rte_eth_tx_queue_setup(port_id, i, DPDK_NM_TX_DESC,