[ovs-dev] [self-check 2/3] ofproto-dpif: Remove many redundant "struct ofproto_dpif *" parameters.

Ethan Jackson ethan at nicira.com
Fri Jan 13 22:12:44 UTC 2012


Looks good.

Ethan

On Tue, Dec 27, 2011 at 13:28, Ben Pfaff <blp at nicira.com> wrote:
> It's redundant to pass both a facet or subfacet and an ofproto_dpif,
> because the latter can be derived from the former.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  ofproto/ofproto-dpif.c |  138 +++++++++++++++++++++++++-----------------------
>  1 files changed, 71 insertions(+), 67 deletions(-)
>
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 1a399c0..f131ebd 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
> @@ -306,27 +306,25 @@ struct facet {
>  };
>
>  static struct facet *facet_create(struct rule_dpif *, const struct flow *);
> -static void facet_remove(struct ofproto_dpif *, struct facet *);
> +static void facet_remove(struct facet *);
>  static void facet_free(struct facet *);
>
>  static struct facet *facet_find(struct ofproto_dpif *, const struct flow *);
>  static struct facet *facet_lookup_valid(struct ofproto_dpif *,
>                                         const struct flow *);
> -static bool facet_revalidate(struct ofproto_dpif *, struct facet *);
> -
> +static bool facet_revalidate(struct facet *);
>  static bool execute_controller_action(struct ofproto_dpif *,
>                                       const struct flow *,
>                                       const struct nlattr *odp_actions,
>                                       size_t actions_len,
>                                       struct ofpbuf *packet, bool clone);
>
> -static void facet_flush_stats(struct ofproto_dpif *, struct facet *);
> +static void facet_flush_stats(struct facet *);
>
> -static void facet_update_time(struct ofproto_dpif *, struct facet *,
> -                              long long int used);
> +static void facet_update_time(struct facet *, long long int used);
>  static void facet_reset_counters(struct facet *);
>  static void facet_push_stats(struct facet *);
> -static void facet_account(struct ofproto_dpif *, struct facet *);
> +static void facet_account(struct facet *);
>
>  static bool facet_is_controller_flow(struct facet *);
>
> @@ -368,26 +366,24 @@ struct subfacet {
>     ovs_be16 initial_tci;       /* Initial VLAN TCI value. */
>  };
>
> -static struct subfacet *subfacet_create(struct ofproto_dpif *, struct facet *,
> -                                        enum odp_key_fitness,
> +static struct subfacet *subfacet_create(struct facet *, enum odp_key_fitness,
>                                         const struct nlattr *key,
>                                         size_t key_len, ovs_be16 initial_tci);
>  static struct subfacet *subfacet_find(struct ofproto_dpif *,
>                                       const struct nlattr *key, size_t key_len);
> -static void subfacet_destroy(struct ofproto_dpif *, struct subfacet *);
> -static void subfacet_destroy__(struct ofproto_dpif *, struct subfacet *);
> +static void subfacet_destroy(struct subfacet *);
> +static void subfacet_destroy__(struct subfacet *);
>  static void subfacet_reset_dp_stats(struct subfacet *,
>                                     struct dpif_flow_stats *);
> -static void subfacet_update_time(struct ofproto_dpif *, struct subfacet *,
> -                                 long long int used);
> -static void subfacet_update_stats(struct ofproto_dpif *, struct subfacet *,
> +static void subfacet_update_time(struct subfacet *, long long int used);
> +static void subfacet_update_stats(struct subfacet *,
>                                   const struct dpif_flow_stats *);
> -static void subfacet_make_actions(struct ofproto_dpif *, struct subfacet *,
> +static void subfacet_make_actions(struct subfacet *,
>                                   const struct ofpbuf *packet);
> -static int subfacet_install(struct ofproto_dpif *, struct subfacet *,
> +static int subfacet_install(struct subfacet *,
>                             const struct nlattr *actions, size_t actions_len,
>                             struct dpif_flow_stats *);
> -static void subfacet_uninstall(struct ofproto_dpif *, struct subfacet *);
> +static void subfacet_uninstall(struct subfacet *);
>
>  struct ofport_dpif {
>     struct ofport up;
> @@ -813,7 +809,7 @@ run(struct ofproto *ofproto_)
>         HMAP_FOR_EACH_SAFE (facet, next, hmap_node, &ofproto->facets) {
>             if (revalidate_all
>                 || tag_set_intersects(&revalidate_set, facet->tags)) {
> -                facet_revalidate(ofproto, facet);
> +                facet_revalidate(facet);
>             }
>         }
>     }
> @@ -878,7 +874,7 @@ flush(struct ofproto *ofproto_)
>             subfacet->dp_packet_count = 0;
>             subfacet->dp_byte_count = 0;
>         }
> -        facet_remove(ofproto, facet);
> +        facet_remove(facet);
>     }
>     dpif_flow_flush(ofproto->dpif);
>  }
> @@ -2538,7 +2534,7 @@ handle_flow_miss(struct ofproto_dpif *ofproto, struct flow_miss *miss,
>         facet = facet_create(rule, flow);
>     }
>
> -    subfacet = subfacet_create(ofproto, facet,
> +    subfacet = subfacet_create(facet,
>                                miss->key_fitness, miss->key, miss->key_len,
>                                miss->initial_tci);
>
> @@ -2563,13 +2559,13 @@ handle_flow_miss(struct ofproto_dpif *ofproto, struct flow_miss *miss,
>         }
>
>         if (!facet->may_install || !subfacet->actions) {
> -            subfacet_make_actions(ofproto, subfacet, packet);
> +            subfacet_make_actions(subfacet, packet);
>         }
>
>         /* Credit statistics to subfacet for this packet.  We must do this now
>          * because execute_controller_action() below may destroy 'packet'. */
>         dpif_flow_stats_extract(&facet->flow, packet, &stats);
> -        subfacet_update_stats(ofproto, subfacet, &stats);
> +        subfacet_update_stats(subfacet, &stats);
>
>         if (!execute_controller_action(ofproto, &facet->flow,
>                                        subfacet->actions,
> @@ -2906,8 +2902,8 @@ update_stats(struct ofproto_dpif *p)
>             subfacet->dp_packet_count = stats->n_packets;
>             subfacet->dp_byte_count = stats->n_bytes;
>
> -            subfacet_update_time(p, subfacet, stats->used);
> -            facet_account(p, facet);
> +            subfacet_update_time(subfacet, stats->used);
> +            facet_account(facet);
>             facet_push_stats(facet);
>         } else {
>             if (!VLOG_DROP_WARN(&rl)) {
> @@ -3025,7 +3021,7 @@ expire_subfacets(struct ofproto_dpif *ofproto, int dp_max_idle)
>     HMAP_FOR_EACH_SAFE (subfacet, next_subfacet, hmap_node,
>                         &ofproto->subfacets) {
>         if (subfacet->used < cutoff) {
> -            subfacet_destroy(ofproto, subfacet);
> +            subfacet_destroy(subfacet);
>         }
>     }
>  }
> @@ -3035,7 +3031,6 @@ expire_subfacets(struct ofproto_dpif *ofproto, int dp_max_idle)
>  static void
>  rule_expire(struct rule_dpif *rule)
>  {
> -    struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
>     struct facet *facet, *next_facet;
>     long long int now;
>     uint8_t reason;
> @@ -3057,7 +3052,7 @@ rule_expire(struct rule_dpif *rule)
>     /* Update stats.  (This is a no-op if the rule expired due to an idle
>      * timeout, because that only happens when the rule has no facets left.) */
>     LIST_FOR_EACH_SAFE (facet, next_facet, list_node, &rule->facets) {
> -        facet_remove(ofproto, facet);
> +        facet_remove(facet);
>     }
>
>     /* Get rid of the rule. */
> @@ -3168,24 +3163,26 @@ execute_odp_actions(struct ofproto_dpif *ofproto, const struct flow *flow,
>  *   - Removes 'facet' from its rule and from ofproto->facets.
>  */
>  static void
> -facet_remove(struct ofproto_dpif *ofproto, struct facet *facet)
> +facet_remove(struct facet *facet)
>  {
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
>     struct subfacet *subfacet, *next_subfacet;
>
>     LIST_FOR_EACH_SAFE (subfacet, next_subfacet, list_node,
>                         &facet->subfacets) {
> -        subfacet_destroy__(ofproto, subfacet);
> +        subfacet_destroy__(subfacet);
>     }
>
> -    facet_flush_stats(ofproto, facet);
> +    facet_flush_stats(facet);
>     hmap_remove(&ofproto->facets, &facet->hmap_node);
>     list_remove(&facet->list_node);
>     facet_free(facet);
>  }
>
>  static void
> -facet_account(struct ofproto_dpif *ofproto, struct facet *facet)
> +facet_account(struct facet *facet)
>  {
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
>     uint64_t n_bytes;
>     struct subfacet *subfacet;
>     const struct nlattr *a;
> @@ -3269,8 +3266,9 @@ facet_is_controller_flow(struct facet *facet)
>  * 'facet''s statistics in the datapath should have been zeroed and folded into
>  * its packet and byte counts before this function is called. */
>  static void
> -facet_flush_stats(struct ofproto_dpif *ofproto, struct facet *facet)
> +facet_flush_stats(struct facet *facet)
>  {
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
>     struct subfacet *subfacet;
>
>     LIST_FOR_EACH (subfacet, list_node, &facet->subfacets) {
> @@ -3279,7 +3277,7 @@ facet_flush_stats(struct ofproto_dpif *ofproto, struct facet *facet)
>     }
>
>     facet_push_stats(facet);
> -    facet_account(ofproto, facet);
> +    facet_account(facet);
>
>     if (ofproto->netflow && !facet_is_controller_flow(facet)) {
>         struct ofexpired expired;
> @@ -3334,7 +3332,7 @@ facet_lookup_valid(struct ofproto_dpif *ofproto, const struct flow *flow)
>     if (facet
>         && (ofproto->need_revalidate
>             || tag_set_intersects(&ofproto->revalidate_set, facet->tags))
> -        && !facet_revalidate(ofproto, facet)) {
> +        && !facet_revalidate(facet)) {
>         COVERAGE_INC(facet_invalidated);
>         return NULL;
>     }
> @@ -3342,7 +3340,7 @@ facet_lookup_valid(struct ofproto_dpif *ofproto, const struct flow *flow)
>     return facet;
>  }
>
> -/* Re-searches 'ofproto''s classifier for a rule matching 'facet':
> +/* Re-searches the classifier for 'facet':
>  *
>  *   - If the rule found is different from 'facet''s current rule, moves
>  *     'facet' to the new rule and recompiles its actions.
> @@ -3354,8 +3352,9 @@ facet_lookup_valid(struct ofproto_dpif *ofproto, const struct flow *flow)
>  *
>  * Returns true if 'facet' still exists, false if it has been destroyed. */
>  static bool
> -facet_revalidate(struct ofproto_dpif *ofproto, struct facet *facet)
> +facet_revalidate(struct facet *facet)
>  {
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
>     struct actions {
>         struct nlattr *odp_actions;
>         size_t actions_len;
> @@ -3374,7 +3373,7 @@ facet_revalidate(struct ofproto_dpif *ofproto, struct facet *facet)
>     new_rule = rule_dpif_lookup(ofproto, &facet->flow, 0);
>     if (!new_rule) {
>         /* No new rule, so delete the facet. */
> -        facet_remove(ofproto, facet);
> +        facet_remove(facet);
>         return false;
>     }
>
> @@ -3407,11 +3406,11 @@ facet_revalidate(struct ofproto_dpif *ofproto, struct facet *facet)
>             if (should_install) {
>                 struct dpif_flow_stats stats;
>
> -                subfacet_install(ofproto, subfacet,
> +                subfacet_install(subfacet,
>                                  odp_actions->data, odp_actions->size, &stats);
> -                subfacet_update_stats(ofproto, subfacet, &stats);
> +                subfacet_update_stats(subfacet, &stats);
>             } else {
> -                subfacet_uninstall(ofproto, subfacet);
> +                subfacet_uninstall(subfacet);
>             }
>
>             if (!new_actions) {
> @@ -3427,7 +3426,7 @@ facet_revalidate(struct ofproto_dpif *ofproto, struct facet *facet)
>         i++;
>     }
>     if (new_actions) {
> -        facet_flush_stats(ofproto, facet);
> +        facet_flush_stats(facet);
>     }
>
>     /* Update 'facet' now that we've taken care of all the old state. */
> @@ -3464,9 +3463,9 @@ facet_revalidate(struct ofproto_dpif *ofproto, struct facet *facet)
>  /* Updates 'facet''s used time.  Caller is responsible for calling
>  * facet_push_stats() to update the flows which 'facet' resubmits into. */
>  static void
> -facet_update_time(struct ofproto_dpif *ofproto, struct facet *facet,
> -                  long long int used)
> +facet_update_time(struct facet *facet, long long int used)
>  {
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
>     if (used > facet->used) {
>         facet->used = used;
>         if (used > facet->rule->used) {
> @@ -3580,10 +3579,10 @@ subfacet_find__(struct ofproto_dpif *ofproto,
>  * which case the caller must populate the actions with
>  * subfacet_make_actions(). */
>  static struct subfacet *
> -subfacet_create(struct ofproto_dpif *ofproto, struct facet *facet,
> -                enum odp_key_fitness key_fitness,
> +subfacet_create(struct facet *facet, enum odp_key_fitness key_fitness,
>                 const struct nlattr *key, size_t key_len, ovs_be16 initial_tci)
>  {
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
>     uint32_t key_hash = odp_flow_key_hash(key, key_len);
>     struct subfacet *subfacet;
>
> @@ -3595,7 +3594,7 @@ subfacet_create(struct ofproto_dpif *ofproto, struct facet *facet,
>
>         /* This shouldn't happen. */
>         VLOG_ERR_RL(&rl, "subfacet with wrong facet");
> -        subfacet_destroy(ofproto, subfacet);
> +        subfacet_destroy(subfacet);
>     }
>
>     subfacet = xzalloc(sizeof *subfacet);
> @@ -3635,9 +3634,12 @@ subfacet_find(struct ofproto_dpif *ofproto,
>  /* Uninstalls 'subfacet' from the datapath, if it is installed, removes it from
>  * its facet within 'ofproto', and frees it. */
>  static void
> -subfacet_destroy__(struct ofproto_dpif *ofproto, struct subfacet *subfacet)
> +subfacet_destroy__(struct subfacet *subfacet)
>  {
> -    subfacet_uninstall(ofproto, subfacet);
> +    struct facet *facet = subfacet->facet;
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
> +
> +    subfacet_uninstall(subfacet);
>     hmap_remove(&ofproto->subfacets, &subfacet->hmap_node);
>     list_remove(&subfacet->list_node);
>     free(subfacet->key);
> @@ -3648,13 +3650,13 @@ subfacet_destroy__(struct ofproto_dpif *ofproto, struct subfacet *subfacet)
>  /* Destroys 'subfacet', as with subfacet_destroy__(), and then if this was the
>  * last remaining subfacet in its facet destroys the facet too. */
>  static void
> -subfacet_destroy(struct ofproto_dpif *ofproto, struct subfacet *subfacet)
> +subfacet_destroy(struct subfacet *subfacet)
>  {
>     struct facet *facet = subfacet->facet;
>
> -    subfacet_destroy__(ofproto, subfacet);
> +    subfacet_destroy__(subfacet);
>     if (list_is_empty(&facet->subfacets)) {
> -        facet_remove(ofproto, facet);
> +        facet_remove(facet);
>     }
>  }
>
> @@ -3675,15 +3677,15 @@ subfacet_get_key(struct subfacet *subfacet, struct odputil_keybuf *keybuf,
>
>  /* Composes the datapath actions for 'subfacet' based on its rule's actions. */
>  static void
> -subfacet_make_actions(struct ofproto_dpif *p, struct subfacet *subfacet,
> -                      const struct ofpbuf *packet)
> +subfacet_make_actions(struct subfacet *subfacet, const struct ofpbuf *packet)
>  {
>     struct facet *facet = subfacet->facet;
>     const struct rule_dpif *rule = facet->rule;
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
>     struct ofpbuf *odp_actions;
>     struct action_xlate_ctx ctx;
>
> -    action_xlate_ctx_init(&ctx, p, &facet->flow, subfacet->initial_tci,
> +    action_xlate_ctx_init(&ctx, ofproto, &facet->flow, subfacet->initial_tci,
>                           packet);
>     odp_actions = xlate_actions(&ctx, rule->up.actions, rule->up.n_actions);
>     facet->tags = ctx.tags;
> @@ -3710,10 +3712,12 @@ subfacet_make_actions(struct ofproto_dpif *p, struct subfacet *subfacet,
>  *
>  * Returns 0 if successful, otherwise a positive errno value. */
>  static int
> -subfacet_install(struct ofproto_dpif *ofproto, struct subfacet *subfacet,
> +subfacet_install(struct subfacet *subfacet,
>                  const struct nlattr *actions, size_t actions_len,
>                  struct dpif_flow_stats *stats)
>  {
> +    struct facet *facet = subfacet->facet;
> +    struct ofproto_dpif *ofproto = ofproto_dpif_cast(facet->rule->up.ofproto);
>     struct odputil_keybuf keybuf;
>     enum dpif_flow_put_flags flags;
>     struct ofpbuf key;
> @@ -3737,19 +3741,21 @@ subfacet_install(struct ofproto_dpif *ofproto, struct subfacet *subfacet,
>
>  /* If 'subfacet' is installed in the datapath, uninstalls it. */
>  static void
> -subfacet_uninstall(struct ofproto_dpif *p, struct subfacet *subfacet)
> +subfacet_uninstall(struct subfacet *subfacet)
>  {
>     if (subfacet->installed) {
> +        struct rule_dpif *rule = subfacet->facet->rule;
> +        struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
>         struct odputil_keybuf keybuf;
>         struct dpif_flow_stats stats;
>         struct ofpbuf key;
>         int error;
>
>         subfacet_get_key(subfacet, &keybuf, &key);
> -        error = dpif_flow_del(p->dpif, key.data, key.size, &stats);
> +        error = dpif_flow_del(ofproto->dpif, key.data, key.size, &stats);
>         subfacet_reset_dp_stats(subfacet, &stats);
>         if (!error) {
> -            subfacet_update_stats(p, subfacet, &stats);
> +            subfacet_update_stats(subfacet, &stats);
>         }
>         subfacet->installed = false;
>     } else {
> @@ -3781,12 +3787,11 @@ subfacet_reset_dp_stats(struct subfacet *subfacet,
>  /* Updates 'subfacet''s used time.  The caller is responsible for calling
>  * facet_push_stats() to update the flows which 'subfacet' resubmits into. */
>  static void
> -subfacet_update_time(struct ofproto_dpif *ofproto, struct subfacet *subfacet,
> -                     long long int used)
> +subfacet_update_time(struct subfacet *subfacet, long long int used)
>  {
>     if (used > subfacet->used) {
>         subfacet->used = used;
> -        facet_update_time(ofproto, subfacet->facet, used);
> +        facet_update_time(subfacet->facet, used);
>     }
>  }
>
> @@ -3797,13 +3802,13 @@ subfacet_update_time(struct ofproto_dpif *ofproto, struct subfacet *subfacet,
>  * represents a packet that was sent by hand or if it represents statistics
>  * that have been cleared out of the datapath. */
>  static void
> -subfacet_update_stats(struct ofproto_dpif *ofproto, struct subfacet *subfacet,
> +subfacet_update_stats(struct subfacet *subfacet,
>                       const struct dpif_flow_stats *stats)
>  {
>     if (stats->n_packets || stats->used > subfacet->used) {
>         struct facet *facet = subfacet->facet;
>
> -        subfacet_update_time(ofproto, subfacet, stats->used);
> +        subfacet_update_time(subfacet, stats->used);
>         facet->packet_count += stats->n_packets;
>         facet->byte_count += stats->n_bytes;
>         facet_push_stats(facet);
> @@ -3922,11 +3927,10 @@ static void
>  rule_destruct(struct rule *rule_)
>  {
>     struct rule_dpif *rule = rule_dpif_cast(rule_);
> -    struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->up.ofproto);
>     struct facet *facet, *next_facet;
>
>     LIST_FOR_EACH_SAFE (facet, next_facet, list_node, &rule->facets) {
> -        facet_revalidate(ofproto, facet);
> +        facet_revalidate(facet);
>     }
>
>     complete_operation(rule);
> @@ -5522,9 +5526,9 @@ send_active_timeout(struct ofproto_dpif *ofproto, struct facet *facet)
>             if (subfacet->installed) {
>                 struct dpif_flow_stats stats;
>
> -                subfacet_install(ofproto, subfacet, subfacet->actions,
> +                subfacet_install(subfacet, subfacet->actions,
>                                  subfacet->actions_len, &stats);
> -                subfacet_update_stats(ofproto, subfacet, &stats);
> +                subfacet_update_stats(subfacet, &stats);
>             }
>         }
>
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list