Lines Matching refs:objagg_obj
54 struct objagg_obj { struct
57 struct objagg_obj *parent; /* if the object is nested, this argument
72 static unsigned int objagg_obj_ref_inc(struct objagg_obj *objagg_obj) in objagg_obj_ref_inc() argument
74 return ++objagg_obj->refcount; in objagg_obj_ref_inc()
77 static unsigned int objagg_obj_ref_dec(struct objagg_obj *objagg_obj) in objagg_obj_ref_dec() argument
79 return --objagg_obj->refcount; in objagg_obj_ref_dec()
82 static void objagg_obj_stats_inc(struct objagg_obj *objagg_obj) in objagg_obj_stats_inc() argument
84 objagg_obj->stats.user_count++; in objagg_obj_stats_inc()
85 objagg_obj->stats.delta_user_count++; in objagg_obj_stats_inc()
86 if (objagg_obj->parent) in objagg_obj_stats_inc()
87 objagg_obj->parent->stats.delta_user_count++; in objagg_obj_stats_inc()
90 static void objagg_obj_stats_dec(struct objagg_obj *objagg_obj) in objagg_obj_stats_dec() argument
92 objagg_obj->stats.user_count--; in objagg_obj_stats_dec()
93 objagg_obj->stats.delta_user_count--; in objagg_obj_stats_dec()
94 if (objagg_obj->parent) in objagg_obj_stats_dec()
95 objagg_obj->parent->stats.delta_user_count--; in objagg_obj_stats_dec()
98 static bool objagg_obj_is_root(const struct objagg_obj *objagg_obj) in objagg_obj_is_root() argument
103 return !objagg_obj->parent; in objagg_obj_is_root()
118 const void *objagg_obj_root_priv(const struct objagg_obj *objagg_obj) in objagg_obj_root_priv() argument
120 if (objagg_obj_is_root(objagg_obj)) in objagg_obj_root_priv()
121 return objagg_obj->root_priv; in objagg_obj_root_priv()
122 WARN_ON(!objagg_obj_is_root(objagg_obj->parent)); in objagg_obj_root_priv()
123 return objagg_obj->parent->root_priv; in objagg_obj_root_priv()
136 const void *objagg_obj_delta_priv(const struct objagg_obj *objagg_obj) in objagg_obj_delta_priv() argument
138 if (objagg_obj_is_root(objagg_obj)) in objagg_obj_delta_priv()
140 return objagg_obj->delta_priv; in objagg_obj_delta_priv()
152 const void *objagg_obj_raw(const struct objagg_obj *objagg_obj) in objagg_obj_raw() argument
154 return objagg_obj->obj; in objagg_obj_raw()
158 static struct objagg_obj *objagg_obj_lookup(struct objagg *objagg, void *obj) in objagg_obj_lookup()
164 struct objagg_obj *objagg_obj, in objagg_obj_parent_assign() argument
165 struct objagg_obj *parent, in objagg_obj_parent_assign()
174 objagg_obj->obj); in objagg_obj_parent_assign()
181 objagg_obj->parent = parent; in objagg_obj_parent_assign()
182 objagg_obj->delta_priv = delta_priv; in objagg_obj_parent_assign()
184 objagg_obj_ref_inc(objagg_obj->parent); in objagg_obj_parent_assign()
185 trace_objagg_obj_parent_assign(objagg, objagg_obj, in objagg_obj_parent_assign()
192 struct objagg_obj *objagg_obj) in objagg_obj_parent_lookup_assign() argument
194 struct objagg_obj *objagg_obj_cur; in objagg_obj_parent_lookup_assign()
203 err = objagg_obj_parent_assign(objagg, objagg_obj, in objagg_obj_parent_lookup_assign()
212 struct objagg_obj *objagg_obj);
215 struct objagg_obj *objagg_obj) in objagg_obj_parent_unassign() argument
217 trace_objagg_obj_parent_unassign(objagg, objagg_obj, in objagg_obj_parent_unassign()
218 objagg_obj->parent, in objagg_obj_parent_unassign()
219 objagg_obj->parent->refcount); in objagg_obj_parent_unassign()
220 objagg->ops->delta_destroy(objagg->priv, objagg_obj->delta_priv); in objagg_obj_parent_unassign()
221 __objagg_obj_put(objagg, objagg_obj->parent); in objagg_obj_parent_unassign()
225 struct objagg_obj *objagg_obj, in objagg_obj_root_id_alloc() argument
233 objagg_obj->root_id = OBJAGG_OBJ_ROOT_ID_INVALID; in objagg_obj_root_id_alloc()
252 objagg_obj->root_id = root_id; in objagg_obj_root_id_alloc()
257 struct objagg_obj *objagg_obj) in objagg_obj_root_id_free() argument
261 ida_free(&objagg->root_ida, objagg_obj->root_id); in objagg_obj_root_id_free()
265 struct objagg_obj *objagg_obj, in objagg_obj_root_create() argument
270 err = objagg_obj_root_id_alloc(objagg, objagg_obj, hnode); in objagg_obj_root_create()
273 objagg_obj->root_priv = objagg->ops->root_create(objagg->priv, in objagg_obj_root_create()
274 objagg_obj->obj, in objagg_obj_root_create()
275 objagg_obj->root_id); in objagg_obj_root_create()
276 if (IS_ERR(objagg_obj->root_priv)) { in objagg_obj_root_create()
277 err = PTR_ERR(objagg_obj->root_priv); in objagg_obj_root_create()
280 trace_objagg_obj_root_create(objagg, objagg_obj); in objagg_obj_root_create()
284 objagg_obj_root_id_free(objagg, objagg_obj); in objagg_obj_root_create()
289 struct objagg_obj *objagg_obj) in objagg_obj_root_destroy() argument
291 trace_objagg_obj_root_destroy(objagg, objagg_obj); in objagg_obj_root_destroy()
292 objagg->ops->root_destroy(objagg->priv, objagg_obj->root_priv); in objagg_obj_root_destroy()
293 objagg_obj_root_id_free(objagg, objagg_obj); in objagg_obj_root_destroy()
296 static struct objagg_obj *__objagg_obj_get(struct objagg *objagg, void *obj);
299 struct objagg_obj *objagg_obj, in objagg_obj_init_with_hints() argument
303 struct objagg_obj *parent; in objagg_obj_init_with_hints()
306 hnode = objagg_hints_lookup(objagg->hints, objagg_obj->obj); in objagg_obj_init_with_hints()
314 return objagg_obj_root_create(objagg, objagg_obj, hnode); in objagg_obj_init_with_hints()
320 err = objagg_obj_parent_assign(objagg, objagg_obj, parent, false); in objagg_obj_init_with_hints()
335 struct objagg_obj *objagg_obj) in objagg_obj_init() argument
343 err = objagg_obj_init_with_hints(objagg, objagg_obj, &hint_found); in objagg_obj_init()
351 err = objagg_obj_parent_lookup_assign(objagg, objagg_obj); in objagg_obj_init()
355 return objagg_obj_root_create(objagg, objagg_obj, NULL); in objagg_obj_init()
359 struct objagg_obj *objagg_obj) in objagg_obj_fini() argument
361 if (!objagg_obj_is_root(objagg_obj)) in objagg_obj_fini()
362 objagg_obj_parent_unassign(objagg, objagg_obj); in objagg_obj_fini()
364 objagg_obj_root_destroy(objagg, objagg_obj); in objagg_obj_fini()
367 static struct objagg_obj *objagg_obj_create(struct objagg *objagg, void *obj) in objagg_obj_create()
369 struct objagg_obj *objagg_obj; in objagg_obj_create() local
372 objagg_obj = kzalloc(sizeof(*objagg_obj) + objagg->ops->obj_size, in objagg_obj_create()
374 if (!objagg_obj) in objagg_obj_create()
376 objagg_obj_ref_inc(objagg_obj); in objagg_obj_create()
377 memcpy(objagg_obj->obj, obj, objagg->ops->obj_size); in objagg_obj_create()
379 err = objagg_obj_init(objagg, objagg_obj); in objagg_obj_create()
383 err = rhashtable_insert_fast(&objagg->obj_ht, &objagg_obj->ht_node, in objagg_obj_create()
387 list_add(&objagg_obj->list, &objagg->obj_list); in objagg_obj_create()
389 trace_objagg_obj_create(objagg, objagg_obj); in objagg_obj_create()
391 return objagg_obj; in objagg_obj_create()
394 objagg_obj_fini(objagg, objagg_obj); in objagg_obj_create()
396 kfree(objagg_obj); in objagg_obj_create()
400 static struct objagg_obj *__objagg_obj_get(struct objagg *objagg, void *obj) in __objagg_obj_get()
402 struct objagg_obj *objagg_obj; in __objagg_obj_get() local
407 objagg_obj = objagg_obj_lookup(objagg, obj); in __objagg_obj_get()
408 if (objagg_obj) { in __objagg_obj_get()
409 objagg_obj_ref_inc(objagg_obj); in __objagg_obj_get()
410 return objagg_obj; in __objagg_obj_get()
440 struct objagg_obj *objagg_obj_get(struct objagg *objagg, void *obj) in objagg_obj_get()
442 struct objagg_obj *objagg_obj; in objagg_obj_get() local
444 objagg_obj = __objagg_obj_get(objagg, obj); in objagg_obj_get()
445 if (IS_ERR(objagg_obj)) in objagg_obj_get()
446 return objagg_obj; in objagg_obj_get()
447 objagg_obj_stats_inc(objagg_obj); in objagg_obj_get()
448 trace_objagg_obj_get(objagg, objagg_obj, objagg_obj->refcount); in objagg_obj_get()
449 return objagg_obj; in objagg_obj_get()
454 struct objagg_obj *objagg_obj) in objagg_obj_destroy() argument
456 trace_objagg_obj_destroy(objagg, objagg_obj); in objagg_obj_destroy()
458 list_del(&objagg_obj->list); in objagg_obj_destroy()
459 rhashtable_remove_fast(&objagg->obj_ht, &objagg_obj->ht_node, in objagg_obj_destroy()
461 objagg_obj_fini(objagg, objagg_obj); in objagg_obj_destroy()
462 kfree(objagg_obj); in objagg_obj_destroy()
466 struct objagg_obj *objagg_obj) in __objagg_obj_put() argument
468 if (!objagg_obj_ref_dec(objagg_obj)) in __objagg_obj_put()
469 objagg_obj_destroy(objagg, objagg_obj); in __objagg_obj_put()
481 void objagg_obj_put(struct objagg *objagg, struct objagg_obj *objagg_obj) in objagg_obj_put() argument
483 trace_objagg_obj_put(objagg, objagg_obj, objagg_obj->refcount); in objagg_obj_put()
484 objagg_obj_stats_dec(objagg_obj); in objagg_obj_put()
485 __objagg_obj_put(objagg, objagg_obj); in objagg_obj_put()
540 objagg->ht_params.key_offset = offsetof(struct objagg_obj, obj); in objagg_create()
541 objagg->ht_params.head_offset = offsetof(struct objagg_obj, ht_node); in objagg_create()
610 struct objagg_obj *objagg_obj; in objagg_stats_get() local
619 list_for_each_entry(objagg_obj, &objagg->obj_list, list) { in objagg_stats_get()
620 memcpy(&objagg_stats->stats_info[i].stats, &objagg_obj->stats, in objagg_stats_get()
622 objagg_stats->stats_info[i].objagg_obj = objagg_obj; in objagg_stats_get()
624 objagg_obj_is_root(objagg_obj); in objagg_stats_get()
653 struct objagg_obj *objagg_obj, size_t obj_size, in objagg_hints_node_create() argument
656 unsigned int user_count = objagg_obj->stats.user_count; in objagg_hints_node_create()
663 memcpy(hnode->obj, &objagg_obj->obj, obj_size); in objagg_hints_node_create()
672 hnode->stats_info.objagg_obj = objagg_obj; in objagg_hints_node_create()
703 struct objagg_obj *objagg_obj; member
741 unsigned int weight = node->objagg_obj->stats.user_count; in objagg_tmp_graph_node_weight()
754 weight += node->objagg_obj->stats.user_count; in objagg_tmp_graph_node_weight()
786 struct objagg_obj *objagg_obj; in objagg_tmp_graph_create() local
803 list_for_each_entry(objagg_obj, &objagg->obj_list, list) { in objagg_tmp_graph_create()
805 node->objagg_obj = objagg_obj; in objagg_tmp_graph_create()
818 pnode->objagg_obj->obj, in objagg_tmp_graph_create()
819 node->objagg_obj->obj)) { in objagg_tmp_graph_create()
863 node->objagg_obj, in objagg_opt_simple_greedy_fillup_hints()
879 node->objagg_obj, in objagg_opt_simple_greedy_fillup_hints()