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

Reply via email to