> @@ -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
[email protected]
http://openvswitch.org/mailman/listinfo/dev