* If 'may_steal' is false, the caller retains ownership of all the
     * packets.  If 'may_steal' is true, the caller transfers ownership of
all
     * the packets to the network device, regardless of success.
     *
     * If 'concurrent_txq' is true, the caller may perform concurrent calls
     * to netdev_send() with the same 'qid'. The netdev provider is
responsible
     * for making sure that these concurrent calls do not create a race
     * condition by using locking or other synchronization if required.
     *
     * The network device is expected to maintain one or more packet
     * transmission queues, so that the caller does not ordinarily have to
     * do additional queuing of packets.  'qid' specifies the queue to use
     * and can be ignored if the implementation does not support multiple
     * queues.
     *
     * May return EOPNOTSUPP if a network device does not implement packet
     * transmission through this interface.  This function may be set to
null
     * if it would always return EOPNOTSUPP anyhow.  (This will prevent the
     * network device from being usefully used by the netdev-based
"userspace
     * datapath".  It will also prevent the OVS implementation of bonding
from
     * working properly over 'netdev'.) */
    int (*send)(struct netdev *netdev, int qid, struct dp_packet_batch
*batch,
                bool may_steal, bool concurrent_txq);

2017-06-21 17:07 GMT+08:00 Joo Kim <[email protected]>:

> Hello experts,
>
> Can somebody help answer?
>
>
> On Fri, Dec 30, 2016 at 3:00 AM, Joo Kim <[email protected]> wrote:
>
> > Hello,
> >
> > I got following gdb backtrace for ovs2.6.   And netdev_dpdk_send__()
> > definition is shown at bottom.
> > I try to understand what  'may_steal' is for but not clear yet.  Can
> > anybody explain what it is?
> >
> > #0  netdev_dpdk_eth_send (netdev=0x7f235285ed40, qid=0,
> > batch=0x7f2541ff7130, may_steal=true, concurrent_txq=false)
> >       at lib/netdev-dpdk.c:1717
> >   #1  0x0000000000600392 in netdev_send (netdev=<optimized out>,
> > qid=qid@entry=0, batch=batch@entry=0x7f2541ff7130,
> >       may_steal=may_steal@entry=true, concurrent_txq=concurrent_txq@
> entry=false)
> > at lib/netdev.c:718
> >   #2  0x00000000005e22e7 in dp_execute_cb (aux_=aux_@entry=
> 0x7f2541ff7090,
> > packets_=packets_@entry=0x7f2541ff7130,
> >       a=a@entry=0x7f2541ff7248, may_steal=<optimized out>) at
> > lib/dpif-netdev.c:4433
> >   #3  0x000000000060745e in odp_execute_actions (dp=dp@entry
> =0x7f2541ff7090,
> > batch=batch@entry=0x7f2541ff7130,
> >       steal=steal@entry=true, actions=<optimized out>,
> > actions_len=<optimized out>,
> >       dp_execute_action=dp_execute_action@entry=0x5e20d0
> <dp_execute_cb>)
> > at lib/odp-execute.c:538
> >   #4  0x000000000040d28b in dp_netdev_execute_actions (now=3504637714,
> > actions_len=<optimized out>,
> >       actions=<optimized out>, flow=0x7f2541ff7640, may_steal=true,
> > packets=0x7f2541ff7130, pmd=0x2e3fe10)
> >       at lib/dpif-netdev.c:4634
> >   #5  handle_packet_upcall (now=3504637714, lost_cnt=<synthetic pointer>,
> > put_actions=0x7f2541ff70f0,
> >       actions=0x7f2541ff70b0, key=0x7f2541ff8448, packet=0x7f235473a440,
> > pmd=0x2e3fe10) at lib/dpif-netdev.c:4071
> >
> >
> >
> >
> >
> >
> > (netdev-dpdk.c)
> >
> > static inline void
> > netdev_dpdk_send__(struct netdev_dpdk *dev, int qid,
> >                    struct dp_packet_batch *batch, bool may_steal,
> >                    bool concurrent_txq)
> > {
> >     if (OVS_UNLIKELY(concurrent_txq)) {
> >         qid = qid % dev->up.n_txq;
> >         rte_spinlock_lock(&dev->tx_q[qid].tx_lock);
> >     }
> >     if (OVS_UNLIKELY(!may_steal ||
> >                      batch->packets[0]->source != DPBUF_DPDK)) {
> >         struct netdev *netdev = &dev->up;
> >         dpdk_do_tx_copy(netdev, qid, batch);
> >         dp_packet_delete_batch(batch, may_steal);
> >     } else {
> >
> >
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to