objagg_obj
struct objagg_obj *objagg_obj;
objagg_obj = objagg_obj_get(erp_table->objagg, &key);
if (IS_ERR(objagg_obj))
return ERR_CAST(objagg_obj);
return (struct mlxsw_sp_acl_erp_mask *) objagg_obj;
struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask;
objagg_obj_put(erp_table->objagg, objagg_obj);
struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask;
const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj);
struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask;
const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj);
struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask;
const struct mlxsw_sp_acl_erp_key *key = objagg_obj_raw(objagg_obj);
struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask;
const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj);
struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask;
delta = objagg_obj_delta_priv(objagg_obj);
struct objagg_obj;
const void *objagg_obj_root_priv(const struct objagg_obj *objagg_obj);
const void *objagg_obj_delta_priv(const struct objagg_obj *objagg_obj);
const void *objagg_obj_raw(const struct objagg_obj *objagg_obj);
struct objagg_obj *objagg_obj_get(struct objagg *objagg, void *obj);
void objagg_obj_put(struct objagg *objagg, struct objagg_obj *objagg_obj);
struct objagg_obj *objagg_obj; /* associated object */
const struct objagg_obj *obj,
struct objagg_obj;
const struct objagg_obj *obj,
const struct objagg_obj *parent,
const struct objagg_obj *obj,
const struct objagg_obj *parent,
const struct objagg_obj *obj),
const struct objagg_obj *obj),
const struct objagg_obj *obj),
const struct objagg_obj *obj),
const struct objagg_obj *obj,
return !objagg_obj->parent;
const void *objagg_obj_root_priv(const struct objagg_obj *objagg_obj)
if (objagg_obj_is_root(objagg_obj))
return objagg_obj->root_priv;
WARN_ON(!objagg_obj_is_root(objagg_obj->parent));
return objagg_obj->parent->root_priv;
const void *objagg_obj_delta_priv(const struct objagg_obj *objagg_obj)
if (objagg_obj_is_root(objagg_obj))
return objagg_obj->delta_priv;
const void *objagg_obj_raw(const struct objagg_obj *objagg_obj)
return objagg_obj->obj;
static struct objagg_obj *objagg_obj_lookup(struct objagg *objagg, void *obj)
struct objagg_obj *objagg_obj,
struct objagg_obj *parent,
objagg_obj->obj);
objagg_obj->parent = parent;
objagg_obj->delta_priv = delta_priv;
objagg_obj_ref_inc(objagg_obj->parent);
trace_objagg_obj_parent_assign(objagg, objagg_obj,
struct objagg_obj *objagg_obj)
struct objagg_obj *objagg_obj_cur;
err = objagg_obj_parent_assign(objagg, objagg_obj,
struct objagg_obj *objagg_obj);
struct objagg_obj *objagg_obj)
trace_objagg_obj_parent_unassign(objagg, objagg_obj,
objagg_obj->parent,
objagg_obj->parent->refcount);
objagg->ops->delta_destroy(objagg->priv, objagg_obj->delta_priv);
__objagg_obj_put(objagg, objagg_obj->parent);
struct objagg_obj *objagg_obj,
objagg_obj->root_id = OBJAGG_OBJ_ROOT_ID_INVALID;
objagg_obj->root_id = root_id;
struct objagg_obj *objagg_obj)
ida_free(&objagg->root_ida, objagg_obj->root_id);
struct objagg_obj *objagg_obj,
err = objagg_obj_root_id_alloc(objagg, objagg_obj, hnode);
objagg_obj->root_priv = objagg->ops->root_create(objagg->priv,
objagg_obj->obj,
objagg_obj->root_id);
if (IS_ERR(objagg_obj->root_priv)) {
err = PTR_ERR(objagg_obj->root_priv);
trace_objagg_obj_root_create(objagg, objagg_obj);
objagg_obj_root_id_free(objagg, objagg_obj);
struct objagg_obj *objagg_obj)
trace_objagg_obj_root_destroy(objagg, objagg_obj);
objagg->ops->root_destroy(objagg->priv, objagg_obj->root_priv);
objagg_obj_root_id_free(objagg, objagg_obj);
static struct objagg_obj *__objagg_obj_get(struct objagg *objagg, void *obj);
struct objagg_obj *objagg_obj,
struct objagg_obj *parent;
hnode = objagg_hints_lookup(objagg->hints, objagg_obj->obj);
return objagg_obj_root_create(objagg, objagg_obj, hnode);
err = objagg_obj_parent_assign(objagg, objagg_obj, parent, false);
struct objagg_obj *objagg_obj)
err = objagg_obj_init_with_hints(objagg, objagg_obj, &hint_found);
err = objagg_obj_parent_lookup_assign(objagg, objagg_obj);
return objagg_obj_root_create(objagg, objagg_obj, NULL);
struct objagg_obj *objagg_obj)
if (!objagg_obj_is_root(objagg_obj))
objagg_obj_parent_unassign(objagg, objagg_obj);
objagg_obj_root_destroy(objagg, objagg_obj);
static struct objagg_obj *objagg_obj_create(struct objagg *objagg, void *obj)
struct objagg_obj *objagg_obj;
objagg_obj = kzalloc(sizeof(*objagg_obj) + objagg->ops->obj_size,
if (!objagg_obj)
objagg_obj_ref_inc(objagg_obj);
memcpy(objagg_obj->obj, obj, objagg->ops->obj_size);
err = objagg_obj_init(objagg, objagg_obj);
err = rhashtable_insert_fast(&objagg->obj_ht, &objagg_obj->ht_node,
list_add(&objagg_obj->list, &objagg->obj_list);
trace_objagg_obj_create(objagg, objagg_obj);
return objagg_obj;
objagg_obj_fini(objagg, objagg_obj);
kfree(objagg_obj);
static struct objagg_obj *__objagg_obj_get(struct objagg *objagg, void *obj)
struct objagg_obj *objagg_obj;
objagg_obj = objagg_obj_lookup(objagg, obj);
if (objagg_obj) {
objagg_obj_ref_inc(objagg_obj);
return objagg_obj;
struct objagg_obj *objagg_obj_get(struct objagg *objagg, void *obj)
struct objagg_obj *objagg_obj;
objagg_obj = __objagg_obj_get(objagg, obj);
if (IS_ERR(objagg_obj))
return objagg_obj;
objagg_obj_stats_inc(objagg_obj);
trace_objagg_obj_get(objagg, objagg_obj, objagg_obj->refcount);
return objagg_obj;
struct objagg_obj *objagg_obj)
trace_objagg_obj_destroy(objagg, objagg_obj);
list_del(&objagg_obj->list);
rhashtable_remove_fast(&objagg->obj_ht, &objagg_obj->ht_node,
objagg_obj_fini(objagg, objagg_obj);
kfree(objagg_obj);
struct objagg_obj *objagg_obj)
if (!objagg_obj_ref_dec(objagg_obj))
objagg_obj_destroy(objagg, objagg_obj);
void objagg_obj_put(struct objagg *objagg, struct objagg_obj *objagg_obj)
trace_objagg_obj_put(objagg, objagg_obj, objagg_obj->refcount);
objagg_obj_stats_dec(objagg_obj);
__objagg_obj_put(objagg, objagg_obj);
objagg->ht_params.key_offset = offsetof(struct objagg_obj, obj);
objagg->ht_params.head_offset = offsetof(struct objagg_obj, ht_node);
struct objagg_obj *parent; /* if the object is nested, this
struct objagg_obj *objagg_obj;
list_for_each_entry(objagg_obj, &objagg->obj_list, list) {
memcpy(&objagg_stats->stats_info[i].stats, &objagg_obj->stats,
objagg_stats->stats_info[i].objagg_obj = objagg_obj;
objagg_obj_is_root(objagg_obj);
struct objagg_obj *objagg_obj, size_t obj_size,
unsigned int user_count = objagg_obj->stats.user_count;
memcpy(hnode->obj, &objagg_obj->obj, obj_size);
hnode->stats_info.objagg_obj = objagg_obj;
struct objagg_obj *objagg_obj;
static unsigned int objagg_obj_ref_inc(struct objagg_obj *objagg_obj)
return ++objagg_obj->refcount;
unsigned int weight = node->objagg_obj->stats.user_count;
weight += node->objagg_obj->stats.user_count;
static unsigned int objagg_obj_ref_dec(struct objagg_obj *objagg_obj)
struct objagg_obj *objagg_obj;
return --objagg_obj->refcount;
list_for_each_entry(objagg_obj, &objagg->obj_list, list) {
node->objagg_obj = objagg_obj;
pnode->objagg_obj->obj,
node->objagg_obj->obj)) {
static void objagg_obj_stats_inc(struct objagg_obj *objagg_obj)
objagg_obj->stats.user_count++;
objagg_obj->stats.delta_user_count++;
if (objagg_obj->parent)
node->objagg_obj,
objagg_obj->parent->stats.delta_user_count++;
node->objagg_obj,
static void objagg_obj_stats_dec(struct objagg_obj *objagg_obj)
objagg_obj->stats.user_count--;
objagg_obj->stats.delta_user_count--;
if (objagg_obj->parent)
objagg_obj->parent->stats.delta_user_count--;
static bool objagg_obj_is_root(const struct objagg_obj *objagg_obj)
struct objagg_obj *objagg_obj;
objagg_obj = world_obj_get(world, objagg, key_id);
if (IS_ERR(objagg_obj)) {
return PTR_ERR(objagg_obj);
root = objagg_obj_root_priv(objagg_obj);
objagg_obj_put(objagg, objagg_obj);
struct objagg_obj *objagg_objs[NUM_KEYS];
static struct objagg_obj *world_obj_get(struct world *world,
struct objagg_obj *objagg_obj;
objagg_obj = objagg_obj_get(objagg, &key);
if (IS_ERR(objagg_obj)) {
return objagg_obj;
world->objagg_objs[key_id_index(key_id)] = objagg_obj;
} else if (world->objagg_objs[key_id_index(key_id)] != objagg_obj) {
static unsigned int obj_to_key_id(struct objagg_obj *objagg_obj)
root_key = objagg_obj_root_priv(objagg_obj);
delta = objagg_obj_delta_priv(objagg_obj);
if (obj_to_key_id(stats_info->objagg_obj) !=
return objagg_obj;
objagg_obj_put(objagg, objagg_obj);
struct objagg_obj *objagg_obj;
objagg_obj = world_obj_get(world, objagg, key_id);
if (IS_ERR(objagg_obj))
return PTR_ERR(objagg_obj);
struct objagg_obj *objagg_obj;
objagg_obj = world->objagg_objs[key_id_index(key_id)];
objagg_obj_put(objagg, objagg_obj);
obj_to_key_id(stats->stats_info[i].objagg_obj),
struct objagg_obj *objagg_obj;
objagg_obj = world_obj_get(&world2, objagg2,
if (IS_ERR(objagg_obj)) {
err = PTR_ERR(objagg_obj);
struct objagg_obj *objagg_obj;
objagg_obj = world_obj_get(&world, objagg,
if (IS_ERR(objagg_obj)) {
err = PTR_ERR(objagg_obj);