Hi, Harold

Thanks for the details.
I have found my ovs has been patched.
So it does not have this issue.

But thanks anyway.

Btw, i have tried Flavio ’s patch, it is very clean and I have merged it in
our own ovs.

It has a minor issues that it counts the hwol drop into tx failure error
which is different to the original logic.




Harold Huang <[email protected]>于2022年1月21日 周五下午5:32写道:

> Hi, He Peng,
>
> 贺鹏 <[email protected]> 于2022年1月18日周二 12:43写道:
>
> >
> > Hi, Harold,
> >
> > I am curious how this bug is found as I have an unsolved bug that I
> believe it's related to
> > some memory issues and may be related to NIC's problem.
> >
>
> I find this problem when I use ovs-tcpdump tool to capture the jumbo
> frames in the physical dpdk port which supports TSO for the jumbo
> frames.  The jumbo frame is from a virtio-user port and the backend if
> virtio-user is the vhost-net  in the host. Ovs-tcpdump will create a
> dummy port and the dpcls flow will be modified with multiple output
> ports.  I think a jumbo frame from vhost-user port would have the same
> problem.
>
> >
> > Harold Huang <[email protected]> 于2022年1月13日周四 16:24写道:
> >>
> >> From: Harold Huang <[email protected]>
> >>
> >> When one flow is output to multiple egress ports, OVS copy the packets
> >> and send the copy packets to the intermediate ports. The original
> packets
> >> is sent to the last port. If the intermediate port is a dpdk port, the
> copy
> >> packets should also be prepared for tso offload.
> >>
> >> Fixes: 29cf9c1b3b ("userspace: Add TCP Segmentation Offload support")
> >> Signed-off-by: Harold Huang <[email protected]>
> >> ---
> >>  lib/netdev-dpdk.c | 13 ++++++-------
> >>  1 file changed, 6 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> >> index 6782d3e8f..83029405e 100644
> >> --- a/lib/netdev-dpdk.c
> >> +++ b/lib/netdev-dpdk.c
> >> @@ -2737,10 +2737,11 @@ dpdk_pktmbuf_alloc(struct rte_mempool *mp,
> uint32_t data_len)
> >>  }
> >>
> >>  static struct dp_packet *
> >> -dpdk_copy_dp_packet_to_mbuf(struct rte_mempool *mp, struct dp_packet
> *pkt_orig)
> >> +dpdk_copy_dp_packet_to_mbuf(struct netdev_dpdk *dev, struct dp_packet
> *pkt_orig)
> >>  {
> >>      struct rte_mbuf *mbuf_dest;
> >>      struct dp_packet *pkt_dest;
> >> +    struct rte_mempool *mp = dev->dpdk_mp->mp;
> >>      uint32_t pkt_len;
> >>
> >>      pkt_len = dp_packet_size(pkt_orig);
> >> @@ -2761,11 +2762,9 @@ dpdk_copy_dp_packet_to_mbuf(struct rte_mempool
> *mp, struct dp_packet *pkt_orig)
> >>      memcpy(&pkt_dest->l2_pad_size, &pkt_orig->l2_pad_size,
> >>             sizeof(struct dp_packet) - offsetof(struct dp_packet,
> l2_pad_size));
> >>
> >> -    if (mbuf_dest->ol_flags & RTE_MBUF_F_TX_L4_MASK) {
> >> -        mbuf_dest->l2_len = (char *)dp_packet_l3(pkt_dest)
> >> -                                - (char *)dp_packet_eth(pkt_dest);
> >> -        mbuf_dest->l3_len = (char *)dp_packet_l4(pkt_dest)
> >> -                                - (char *) dp_packet_l3(pkt_dest);
> >> +    if (!netdev_dpdk_prep_hwol_packet(dev, mbuf_dest)) {
> >
> >
> > perhaps check userspace_tso_enabled()?
>
> Yes, but the old code may only want to support the checksum offload. I
> think checking userspace_tso_enabled() in
> netdev_dpdk_prep_hwol_packet() is a better solution.  Flavio’s patch
> could also fix this bug.
>
> >
> >>
> >> +        rte_pktmbuf_free(mbuf_dest);
> >> +        return NULL;
> >>      }
> >>
> >>      return pkt_dest;
> >> @@ -2813,7 +2812,7 @@ dpdk_do_tx_copy(struct netdev *netdev, int qid,
> struct dp_packet_batch *batch)
> >>              continue;
> >>          }
> >>
> >> -        pkts[txcnt] = dpdk_copy_dp_packet_to_mbuf(dev->dpdk_mp->mp,
> packet);
> >> +        pkts[txcnt] = dpdk_copy_dp_packet_to_mbuf(dev, packet);
> >>          if (OVS_UNLIKELY(!pkts[txcnt])) {
> >>              dropped = cnt - i;
> >>              break;
> >> --
> >> 2.27.0
> >>
> >> _______________________________________________
> >> dev mailing list
> >> [email protected]
> >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
> >
> >
> > --
> > hepeng
>
-- 
hepeng
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to