> @@ -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