Lines Matching refs:node
171 struct icc_node *node = dst; in path_init() local
184 node->provider->users++; in path_init()
185 hlist_add_head(&path->reqs[i].req_node, &node->req_list); in path_init()
186 path->reqs[i].node = node; in path_init()
190 node = node->reverse; in path_init()
202 struct icc_node *n, *node = NULL; in path_find() local
217 list_for_each_entry_safe(node, n, &traverse_list, search_list) { in path_find()
218 if (node == dst) { in path_find()
224 for (i = 0; i < node->num_links; i++) { in path_find()
225 struct icc_node *tmp = node->links[i]; in path_find()
236 tmp->reverse = node; in path_find()
271 static int aggregate_requests(struct icc_node *node) in aggregate_requests() argument
273 struct icc_provider *p = node->provider; in aggregate_requests()
277 node->avg_bw = 0; in aggregate_requests()
278 node->peak_bw = 0; in aggregate_requests()
281 p->pre_aggregate(node); in aggregate_requests()
283 hlist_for_each_entry(r, &node->req_list, req_node) { in aggregate_requests()
291 p->aggregate(node, r->tag, avg_bw, peak_bw, in aggregate_requests()
292 &node->avg_bw, &node->peak_bw); in aggregate_requests()
296 node->avg_bw = max(node->avg_bw, node->init_avg); in aggregate_requests()
297 node->peak_bw = max(node->peak_bw, node->init_peak); in aggregate_requests()
312 next = path->reqs[i].node; in apply_constraints()
332 int icc_std_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, in icc_std_aggregate() argument
379 struct icc_node *node = ERR_PTR(-EPROBE_DEFER); in of_icc_get_from_provider() local
392 node = data->node; in of_icc_get_from_provider()
396 node = provider->xlate(spec, provider->data); in of_icc_get_from_provider()
397 if (!IS_ERR(node)) in of_icc_get_from_provider()
404 if (!node) in of_icc_get_from_provider()
407 if (IS_ERR(node)) in of_icc_get_from_provider()
408 return ERR_CAST(node); in of_icc_get_from_provider()
414 data->node = node; in of_icc_get_from_provider()
518 path = path_find(dev, src_data->node, dst_data->node); in of_icc_get_by_index()
529 src_data->node->name, dst_data->node->name); in of_icc_get_by_index()
696 struct icc_node *node; in icc_set_bw() local
713 node = path->reqs[i].node; in icc_set_bw()
720 aggregate_requests(node); in icc_set_bw()
722 trace_icc_set_bw(path, node, i, avg_bw, peak_bw); in icc_set_bw()
731 node = path->reqs[i].node; in icc_set_bw()
734 aggregate_requests(node); in icc_set_bw()
789 struct icc_node *node; in icc_put() local
804 node = path->reqs[i].node; in icc_put()
806 if (!WARN_ON(!node->provider->users)) in icc_put()
807 node->provider->users--; in icc_put()
820 struct icc_node *node; in icc_node_create_nolock() local
826 node = node_find(id); in icc_node_create_nolock()
827 if (node) in icc_node_create_nolock()
828 return node; in icc_node_create_nolock()
830 node = kzalloc(sizeof(*node), GFP_KERNEL); in icc_node_create_nolock()
831 if (!node) in icc_node_create_nolock()
836 id = idr_alloc(&icc_idr, node, ICC_DYN_ID_START, 0, GFP_KERNEL); in icc_node_create_nolock()
838 id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL); in icc_node_create_nolock()
842 kfree(node); in icc_node_create_nolock()
846 node->id = id; in icc_node_create_nolock()
848 return node; in icc_node_create_nolock()
858 struct icc_node *node; in icc_node_create_dyn() local
862 node = icc_node_create_nolock(ICC_ALLOC_DYN_ID); in icc_node_create_dyn()
866 return node; in icc_node_create_dyn()
878 struct icc_node *node; in icc_node_create() local
882 node = icc_node_create_nolock(id); in icc_node_create()
886 return node; in icc_node_create()
896 struct icc_node *node; in icc_node_destroy() local
900 node = node_find(id); in icc_node_destroy()
901 if (node) { in icc_node_destroy()
902 idr_remove(&icc_idr, node->id); in icc_node_destroy()
903 WARN_ON(!hlist_empty(&node->req_list)); in icc_node_destroy()
908 if (!node) in icc_node_destroy()
911 kfree(node->links); in icc_node_destroy()
912 if (node->id >= ICC_DYN_ID_START) in icc_node_destroy()
913 kfree(node->name); in icc_node_destroy()
914 kfree(node); in icc_node_destroy()
926 int icc_node_set_name(struct icc_node *node, const struct icc_provider *provider, const char *name) in icc_node_set_name() argument
928 if (node->id >= ICC_DYN_ID_START) { in icc_node_set_name()
929 node->name = kasprintf(GFP_KERNEL, "%s@%s", name, in icc_node_set_name()
931 if (!node->name) in icc_node_set_name()
934 node->name = name; in icc_node_set_name()
1004 int icc_link_create(struct icc_node *node, const int dst_id) in icc_link_create() argument
1010 if (!node->provider) in icc_link_create()
1025 new = krealloc(node->links, in icc_link_create()
1026 (node->num_links + 1) * sizeof(*node->links), in icc_link_create()
1033 node->links = new; in icc_link_create()
1034 node->links[node->num_links++] = dst; in icc_link_create()
1048 void icc_node_add(struct icc_node *node, struct icc_provider *provider) in icc_node_add() argument
1050 if (WARN_ON(node->provider)) in icc_node_add()
1056 node->provider = provider; in icc_node_add()
1057 list_add_tail(&node->node_list, &provider->nodes); in icc_node_add()
1061 provider->get_bw(node, &node->init_avg, &node->init_peak); in icc_node_add()
1063 node->init_avg = INT_MAX; in icc_node_add()
1064 node->init_peak = INT_MAX; in icc_node_add()
1066 node->avg_bw = node->init_avg; in icc_node_add()
1067 node->peak_bw = node->init_peak; in icc_node_add()
1069 if (node->avg_bw || node->peak_bw) { in icc_node_add()
1071 provider->pre_aggregate(node); in icc_node_add()
1074 provider->aggregate(node, 0, node->init_avg, node->init_peak, in icc_node_add()
1075 &node->avg_bw, &node->peak_bw); in icc_node_add()
1077 provider->set(node, node); in icc_node_add()
1080 node->avg_bw = 0; in icc_node_add()
1081 node->peak_bw = 0; in icc_node_add()
1092 void icc_node_del(struct icc_node *node) in icc_node_del() argument
1096 list_del(&node->node_list); in icc_node_del()