[ovs-dev] [PATCH 2/6] revalidator: Don't modify ukey from xlate_ukey().

Daniele Di Proietto diproiettod at ovn.org
Wed Sep 28 21:22:34 UTC 2016


Is there any reason not to squash this with the previous patch?

If you want to keep two commits for clarity I would split it like:

commit1) move the block above odp_flow_key_to_flow()
commit2) factor out xlate_ukey() in the second.

2016-09-20 18:47 GMT-07:00 Joe Stringer <joe at ovn.org>:

> Refactor the newly introduced xlate_ukey() function to just perform the
> translation, not modify the ukey.
>
> Signed-off-by: Joe Stringer <joe at ovn.org>
> ---
>  ofproto/ofproto-dpif-upcall.c | 32 +++++++++++++++-----------------
>  1 file changed, 15 insertions(+), 17 deletions(-)
>
> diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
> index 67b28d9ccb53..064f043b9eac 100644
> --- a/ofproto/ofproto-dpif-upcall.c
> +++ b/ofproto/ofproto-dpif-upcall.c
> @@ -1825,6 +1825,7 @@ struct reval_context {
>      struct flow_wildcards *wc;
>      struct ofpbuf *odp_actions;
>      struct netflow **netflow;
> +    struct xlate_cache *xcache;
>
>      /* Required output parameters */
>      struct xlate_out xout;
> @@ -1838,10 +1839,8 @@ struct reval_context {
>   * The caller is responsible for uninitializing ctx->xout on success.
>   */
>  static int
> -xlate_ukey(struct udpif *udpif, struct udpif_key *ukey,
> -           const struct dpif_flow_stats *push, struct reval_context *ctx,
> -           bool need_revalidate)
> -    OVS_REQUIRES(ukey->mutex)
> +xlate_ukey(struct udpif *udpif, const struct udpif_key *ukey,
> +           const struct dpif_flow_stats *push, struct reval_context *ctx)
>  {
>      struct ofproto_dpif *ofproto;
>      ofp_port_t ofp_in_port;
> @@ -1859,21 +1858,14 @@ xlate_ukey(struct udpif *udpif, struct udpif_key
> *ukey,
>          return error;
>      }
>
> -    if (need_revalidate) {
> -        xlate_cache_clear(ukey->xcache);
> -    }
> -    if (!ukey->xcache) {
> -        ukey->xcache = xlate_cache_new();
> -    }
> -
>      xlate_in_init(&xin, ofproto, ofproto_dpif_get_tables_
> version(ofproto),
>                    &ctx->flow, ofp_in_port, NULL, push->tcp_flags,
> -                  NULL, need_revalidate ? ctx->wc : NULL,
> ctx->odp_actions);
> +                  NULL, ctx->wc, ctx->odp_actions);
>      if (push->n_packets) {
>          xin.resubmit_stats = push;
>          xin.allow_side_effects = true;
>      }
> -    xin.xcache = ukey->xcache;
> +    xin.xcache = ctx->xcache;
>      xlate_actions(&xin, &ctx->xout);
>
>      return 0;
> @@ -1905,17 +1897,17 @@ revalidate_ukey(struct udpif *udpif, struct
> udpif_key *ukey,
>                  struct recirc_refs *recircs)
>      OVS_REQUIRES(ukey->mutex)
>  {
> +    bool need_revalidate = (ukey->reval_seq != reval_seq);
>      struct xlate_out *xoutp;
>      struct netflow *netflow;
>      struct dpif_flow_stats push;
>      struct flow_wildcards dp_mask, wc;
>      enum reval_result result;
>      long long int last_used;
> -    bool need_revalidate;
>      struct reval_context ctx = {
>          .odp_actions = odp_actions,
>          .netflow = &netflow,
> -        .wc = &wc,
> +        .wc = need_revalidate ? &wc : NULL,
>      };
>
>      result = UKEY_DELETE;
> @@ -1923,7 +1915,6 @@ revalidate_ukey(struct udpif *udpif, struct
> udpif_key *ukey,
>      netflow = NULL;
>
>      ofpbuf_clear(odp_actions);
> -    need_revalidate = (ukey->reval_seq != reval_seq);
>      last_used = ukey->stats.used;
>      push.used = stats->used;
>      push.tcp_flags = stats->tcp_flags;
> @@ -1952,7 +1943,14 @@ revalidate_ukey(struct udpif *udpif, struct
> udpif_key *ukey,
>          goto exit;
>      }
>
> -    if (xlate_ukey(udpif, ukey, &push, &ctx, need_revalidate)) {
> +    if (need_revalidate) {
> +        xlate_cache_clear(ukey->xcache);
> +    }
> +    if (!ukey->xcache) {
> +        ukey->xcache = xlate_cache_new();
> +    }
> +    ctx.xcache = ukey->xcache;
> +    if (xlate_ukey(udpif, ukey, &push, &ctx)) {
>          goto exit;
>      }
>      xoutp = &ctx.xout;
> --
> 2.9.3
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>



More information about the dev mailing list