Looks like a big win. Acked-by: Ethan Jackson <et...@nicira.com>
On Wed, Apr 15, 2015 at 11:11 AM, Daniele Di Proietto <diproiet...@vmware.com> wrote: > Now that we have per packet metadata, there's no need to split packet > batches when recirculating. > > Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com> > --- > lib/dpif-netdev.c | 29 +++++++++++++++-------------- > 1 file changed, 15 insertions(+), 14 deletions(-) > > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > index 5b44d51..20bb498 100644 > --- a/lib/dpif-netdev.c > +++ b/lib/dpif-netdev.c > @@ -3360,13 +3360,13 @@ push_tnl_action(const struct dp_netdev *dp, > } > > static void > -dp_netdev_clone_pkt_batch(struct dp_packet **tnl_pkt, > - struct dp_packet **packets, int cnt) > +dp_netdev_clone_pkt_batch(struct dp_packet **dst_pkts, > + struct dp_packet **src_pkts, int cnt) > { > int i; > > for (i = 0; i < cnt; i++) { > - tnl_pkt[i] = dp_packet_clone(packets[i]); > + dst_pkts[i] = dp_packet_clone(src_pkts[i]); > } > } > > @@ -3377,8 +3377,8 @@ dp_execute_cb(void *aux_, struct dp_packet **packets, > int cnt, > { > struct dp_netdev_execute_aux *aux = aux_; > uint32_t *depth = recirc_depth_get(); > - struct dp_netdev_pmd_thread *pmd= aux->pmd; > - struct dp_netdev *dp= pmd->dp; > + struct dp_netdev_pmd_thread *pmd = aux->pmd; > + struct dp_netdev *dp = pmd->dp; > int type = nl_attr_type(a); > struct dp_netdev_port *p; > int i; > @@ -3482,18 +3482,19 @@ dp_execute_cb(void *aux_, struct dp_packet **packets, > int cnt, > > case OVS_ACTION_ATTR_RECIRC: > if (*depth < MAX_RECIRC_DEPTH) { > + struct dp_packet *recirc_pkts[NETDEV_MAX_RX_BATCH]; > > - (*depth)++; > - for (i = 0; i < cnt; i++) { > - struct dp_packet *recirc_pkt; > - > - recirc_pkt = (may_steal) ? packets[i] > - : dp_packet_clone(packets[i]); > - > - recirc_pkt->md.recirc_id = nl_attr_get_u32(a); > + if (!may_steal) { > + dp_netdev_clone_pkt_batch(recirc_pkts, packets, cnt); > + packets = recirc_pkts; > + } > > - dp_netdev_input(pmd, &recirc_pkt, 1); > + for (i = 0; i < cnt; i++) { > + packets[i]->md.recirc_id = nl_attr_get_u32(a); > } > + > + (*depth)++; > + dp_netdev_input(pmd, packets, cnt); > (*depth)--; > > return; > -- > 2.1.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev