> @@ -2021,6 +2025,17 @@ dp_netdev_port_input(struct dp_netdev *dp, struct 
> ofpbuf *packet,
>      }
>  }
>  
> +static void
> +dp_netdev_port_input(struct dp_netdev *dp, struct ofpbuf *packet,
> +                     struct pkt_metadata *md)
> +    OVS_REQ_RDLOCK(dp->port_rwlock)
> +{
> +    uint32_t *recirc_depth = recirc_depth_get();
> +
> +    *recirc_depth = 0;
> +    dp_netdev_input(dp, packet, md);
> +}
> +
>  static int
>  dp_netdev_output_userspace(struct dp_netdev *dp, struct ofpbuf *packet,
>                             int queue_no, int type, const struct flow *flow,
> @@ -2089,6 +2104,7 @@ dp_execute_cb(void *aux_, struct ofpbuf *packet,
>      struct dp_netdev_execute_aux *aux = aux_;
>      int type = nl_attr_type(a);
>      struct dp_netdev_port *p;
> +    uint32_t *depth = recirc_depth_get();
>  
>      switch ((enum ovs_action_attr)type) {
>      case OVS_ACTION_ATTR_OUTPUT:
> @@ -2115,23 +2131,38 @@ dp_execute_cb(void *aux_, struct ofpbuf *packet,
>          break;
>      }
>  
> -    case OVS_ACTION_ATTR_RECIRC: {
> -        const struct ovs_action_recirc *act;
> +    case OVS_ACTION_ATTR_RECIRC:
> +        if (*depth < MAX_RECIRC_DEPTH) {

can't this be called by other threads via dpif_execute()?

YAMAMOTO Takashi
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to