On Fri, Oct 21, 2022 at 5:38 AM Mike Pattrick <[email protected]> wrote:
> @@ -2196,12 +2203,10 @@ netdev_dpdk_prep_hwol_packet(struct netdev_dpdk *dev,
> struct rte_mbuf *mbuf)
> {
> struct dp_packet *pkt = CONTAINER_OF(mbuf, struct dp_packet, mbuf);
>
> - if (mbuf->ol_flags & RTE_MBUF_F_TX_L4_MASK) {
> - mbuf->l2_len = (char *)dp_packet_l3(pkt) - (char
> *)dp_packet_eth(pkt);
> - mbuf->l3_len = (char *)dp_packet_l4(pkt) - (char *)dp_packet_l3(pkt);
> - mbuf->outer_l2_len = 0;
> - mbuf->outer_l3_len = 0;
> - }
> + mbuf->l2_len = (char *) dp_packet_l3(pkt) - (char *) dp_packet_eth(pkt);
> + mbuf->l3_len = (char *) dp_packet_l4(pkt) - (char *) dp_packet_l3(pkt);
> + mbuf->outer_l2_len = 0;
> + mbuf->outer_l3_len = 0;
>
> if (mbuf->ol_flags & RTE_MBUF_F_TX_TCP_SEG) {
> struct tcp_header *th = dp_packet_l4(pkt);
Unconditionnally filling those fields has a cost.
We should return early, like:
{
struct dp_packet *pkt = CONTAINER_OF(mbuf, struct dp_packet, mbuf);
+ if (!(mbuf->ol_flags & (RTE_MBUF_F_TX_IP_CKSUM|RTE_MBUF_F_TX_L4_MASK
+ |RTE_MBUF_F_TX_TCP_SEG))) {
+ return true;
+ }
+
mbuf->l2_len = (char *) dp_packet_l3(pkt) - (char *) dp_packet_eth(pkt);
And the check for userspace_tso_enabled() in netdev_dpdk_common_send()
should be dropped so that we unconditionnally call
netdev_dpdk_prep_hwol_batch().
> @@ -2261,13 +2266,11 @@ netdev_dpdk_eth_tx_burst(struct netdev_dpdk *dev, int
> qid,
> uint32_t nb_tx = 0;
> uint16_t nb_tx_prep = cnt;
>
> - if (userspace_tso_enabled()) {
> - nb_tx_prep = rte_eth_tx_prepare(dev->port_id, qid, pkts, cnt);
> - if (nb_tx_prep != cnt) {
> - VLOG_WARN_RL(&rl, "%s: Output batch contains invalid packets. "
> - "Only %u/%u are valid: %s", dev->up.name,
> nb_tx_prep,
> - cnt, rte_strerror(rte_errno));
> - }
> + nb_tx_prep = rte_eth_tx_prepare(dev->port_id, qid, pkts, cnt);
> + if (nb_tx_prep != cnt) {
> + VLOG_WARN_RL(&rl, "%s: Output batch contains invalid packets. "
> + "Only %u/%u are valid: %s", dev->up.name, nb_tx_prep,
> + cnt, rte_strerror(rte_errno));
> }
>
> while (nb_tx != nb_tx_prep) {
--
David Marchand
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev