On Wed, Mar 12, 2025 at 5:39 PM Ales Musil <amu...@redhat.com> wrote:
> The objdep was adding "struct object_to_resources_list_node" to list > that would be passed around and only used part would be the uuid. > Create uuidset directly instead to avoid extra allocations of the > intermediate struct. > > Signed-off-by: Ales Musil <amu...@redhat.com> > --- > controller/lflow.c | 21 ++++++--------------- > controller/lflow.h | 2 +- > controller/ovn-controller.c | 15 +++++++-------- > lib/objdep.c | 10 +++------- > lib/objdep.h | 2 +- > 5 files changed, 18 insertions(+), 32 deletions(-) > > diff --git a/controller/lflow.c b/controller/lflow.c > index 860869f55..0c6203fa1 100644 > --- a/controller/lflow.c > +++ b/controller/lflow.c > @@ -748,7 +748,7 @@ done: > > bool > lflow_handle_changed_ref(enum objdep_type type, const char *res_name, > - struct ovs_list *objs_todo, > + struct uuidset *objs_todo, > const void *in_arg, void *out_arg) > { > struct lflow_ctx_in *l_ctx_in = CONST_CAST(struct lflow_ctx_in *, > in_arg); > @@ -756,22 +756,13 @@ lflow_handle_changed_ref(enum objdep_type type, > const char *res_name, > > /* Re-parse the related lflows. */ > /* Firstly, flood remove the flows from desired flow table. */ > - struct object_to_resources_list_node *resource_list_node_uuid; > - struct uuidset flood_remove_nodes = > - UUIDSET_INITIALIZER(&flood_remove_nodes); > - LIST_FOR_EACH_SAFE (resource_list_node_uuid, list_node, objs_todo) { > - const struct uuid *obj_uuid = &resource_list_node_uuid->obj_uuid; > - VLOG_DBG("Reprocess lflow "UUID_FMT" for resource type: %s," > - " name: %s.", > - UUID_ARGS(obj_uuid), objdep_type_name(type), res_name); > - uuidset_insert(&flood_remove_nodes, obj_uuid); > - free(resource_list_node_uuid); > - } > - ofctrl_flood_remove_flows(l_ctx_out->flow_table, &flood_remove_nodes); > + ofctrl_flood_remove_flows(l_ctx_out->flow_table, objs_todo); > > /* Secondly, for each lflow that is actually removed, reprocessing > it. */ > struct uuidset_node *ofrn; > - UUIDSET_FOR_EACH (ofrn, &flood_remove_nodes) { > + UUIDSET_FOR_EACH (ofrn, objs_todo) { > + VLOG_DBG("Reprocess lflow "UUID_FMT" for resource type: %s, name: > %s.", > + UUID_ARGS(&ofrn->uuid), objdep_type_name(type), > res_name); > objdep_mgr_remove_obj(l_ctx_out->lflow_deps_mgr, &ofrn->uuid); > lflow_conj_ids_free(l_ctx_out->conj_ids, &ofrn->uuid); > > @@ -798,7 +789,7 @@ lflow_handle_changed_ref(enum objdep_type type, const > char *res_name, > > consider_logical_flow(lflow, false, l_ctx_in, l_ctx_out); > } > - uuidset_destroy(&flood_remove_nodes); > + uuidset_destroy(objs_todo); > return true; > } > > diff --git a/controller/lflow.h b/controller/lflow.h > index ab026e3bd..fa99173e6 100644 > --- a/controller/lflow.h > +++ b/controller/lflow.h > @@ -169,7 +169,7 @@ bool lflow_handle_addr_set_update(const char *as_name, > struct addr_set_diff *, > struct lflow_ctx_out *, > bool *changed); > bool lflow_handle_changed_ref(enum objdep_type, const char *res_name, > - struct ovs_list *objs_todo, > + struct uuidset *objs_todo, > const void *in_arg, void *out_arg); > > void lflow_handle_changed_mac_bindings( > diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c > index c0f167c54..8fa32635f 100644 > --- a/controller/ovn-controller.c > +++ b/controller/ovn-controller.c > @@ -2755,15 +2755,15 @@ lb_data_local_lb_remove(struct ed_type_lb_data > *lb_data, > > static bool > lb_data_handle_changed_ref(enum objdep_type type, const char *res_name, > - struct ovs_list *objs_todo, const void *in_arg, > + struct uuidset *objs_todo, const void *in_arg, > void *out_arg) > { > const struct lb_data_ctx_in *ctx_in = in_arg; > struct ed_type_lb_data *lb_data = out_arg; > > - struct object_to_resources_list_node *resource_lb_uuid; > - LIST_FOR_EACH_POP (resource_lb_uuid, list_node, objs_todo) { > - struct uuid *uuid = &resource_lb_uuid->obj_uuid; > + struct uuidset_node *ofrn; > + UUIDSET_FOR_EACH (ofrn, objs_todo) { > + struct uuid *uuid = &ofrn->uuid; > > VLOG_DBG("Reprocess LB "UUID_FMT" for resource type: %s, name: > %s", > UUID_ARGS(uuid), objdep_type_name(type), res_name); > @@ -2771,7 +2771,6 @@ lb_data_handle_changed_ref(enum objdep_type type, > const char *res_name, > struct ovn_controller_lb *lb = > ovn_controller_lb_find(&lb_data->local_lbs, uuid); > if (!lb) { > - free(resource_lb_uuid); > continue; > } > > @@ -2780,14 +2779,14 @@ lb_data_handle_changed_ref(enum objdep_type type, > const char *res_name, > const struct sbrec_load_balancer *sbrec_lb = > sbrec_load_balancer_table_get_for_uuid(ctx_in->lb_table, > uuid); > if (!lb_is_local(sbrec_lb, ctx_in->local_datapaths)) { > - free(resource_lb_uuid); > continue; > } > > lb_data_local_lb_add(lb_data, sbrec_lb, ctx_in->template_vars, > true); > - > - free(resource_lb_uuid); > } > + > + uuidset_destroy(objs_todo); > + > return true; > } > > diff --git a/lib/objdep.c b/lib/objdep.c > index 06cf126f1..00f762b8e 100644 > --- a/lib/objdep.c > +++ b/lib/objdep.c > @@ -214,8 +214,7 @@ objdep_mgr_handle_change(struct objdep_mgr *mgr, > " name: %s.", objdep_type_name(type), res_name); > *changed = false; > > - struct ovs_list objs_todo = OVS_LIST_INITIALIZER(&objs_todo); > - > + struct uuidset objs_todo = UUIDSET_INITIALIZER(&objs_todo); > struct object_to_resources_list_node *resource_list_node; > HMAP_FOR_EACH (resource_list_node, hmap_node, &resource_node->objs) { > if (uuidset_find(objs_processed, &resource_list_node->obj_uuid)) { > @@ -223,12 +222,9 @@ objdep_mgr_handle_change(struct objdep_mgr *mgr, > } > /* Use object_to_resources_list_node as list node to store the > uuid. > * Other fields are not used here. */ > - struct object_to_resources_list_node *resource_list_node_uuid = > - xmalloc(sizeof *resource_list_node_uuid); > - resource_list_node_uuid->obj_uuid = resource_list_node->obj_uuid; > - ovs_list_push_back(&objs_todo, > &resource_list_node_uuid->list_node); > + uuidset_insert(&objs_todo, &resource_list_node->obj_uuid); > } > - if (ovs_list_is_empty(&objs_todo)) { > + if (uuidset_is_empty(&objs_todo)) { > return true; > } > *changed = true; > diff --git a/lib/objdep.h b/lib/objdep.h > index 1ea781947..e25ae7f31 100644 > --- a/lib/objdep.h > +++ b/lib/objdep.h > @@ -35,7 +35,7 @@ enum objdep_type { > * handled successfully. */ > typedef bool (*objdep_change_handler)(enum objdep_type, > const char *res_name, > - struct ovs_list *ref_nodes, > + struct uuidset *ref_nodes, > const void *in_arg, void *out_arg); > > /* A node pointing to all objects that refer to a given resource. */ > -- > 2.48.1 > > Recheck-request: github-robot-_Build_and_Test _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev