Lines Matching refs:enode
448 * @enode: The maple_enode to extract the parent's enum
452 enum maple_type mas_parent_type(struct ma_state *mas, struct maple_enode *enode)
456 p_type = (unsigned long)mte_to_node(enode)->parent;
474 * @enode: The encoded maple node.
475 * @parent: The encoded maple node that is the parent of @enode.
476 * @slot: The slot that @enode resides in @parent.
478 * Slot number is encoded in the enode->parent bit 3-6 or 2-6, depending on the
482 void mas_set_parent(struct ma_state *mas, struct maple_enode *enode,
508 mte_to_node(enode)->parent = ma_parent_ptr(val);
512 * mte_parent_slot() - get the parent slot of @enode.
513 * @enode: The encoded maple node.
515 * Return: The slot in the parent node where @enode resides.
517 static inline unsigned int mte_parent_slot(const struct maple_enode *enode)
519 unsigned long val = (unsigned long)mte_to_node(enode)->parent;
537 static inline struct maple_node *mte_parent(const struct maple_enode *enode)
540 (mte_to_node(enode)->parent) & ~MAPLE_NODE_MASK);
544 * ma_dead_node() - check if the @enode is dead.
545 * @enode: The encoded maple node
560 * mte_dead_node() - check if the @enode is dead.
561 * @enode: The encoded maple node
565 static inline bool mte_dead_node(const struct maple_enode *enode)
569 node = mte_to_node(enode);
572 parent = mte_parent(enode);
1002 static void mt_destroy_walk(struct maple_enode *enode, struct maple_tree *mt,
1079 struct maple_enode *p_enode; /* parent enode. */
1080 struct maple_enode *a_enode; /* ancestor enode. */
2215 * @enode: The encoded maple node.
2219 * Return: @enode or MAS_NONE
2221 static inline struct maple_enode *mte_node_or_none(struct maple_enode *enode)
2223 if (enode)
2224 return enode;
2540 * @enode: The encoded maple node
2546 struct maple_enode *enode, bool in_rcu)
2550 if (enode == MAS_NONE)
2553 tmp = mte_to_node(enode);
2554 mte_set_node_dead(enode);
4524 struct maple_enode *enode;
4555 enode = mas_slot(mas, slots, mas->offset);
4564 mas->node = enode;
4568 enode = mas_slot(mas, slots, 0);
4580 mas->node = enode;
5140 unsigned char mte_dead_leaves(struct maple_enode *enode, struct maple_tree *mt,
5148 for (offset = 0; offset < mt_slot_count(enode); offset++) {
5166 * @enode: The maple encoded node
5171 static void __rcu **mte_dead_walk(struct maple_enode **enode, unsigned char offset)
5176 next = mte_to_node(*enode);
5178 *enode = ma_enode_ptr(next);
5179 node = mte_to_node(*enode);
5199 struct maple_enode *enode;
5209 enode = mt_mk_node(node, node->type);
5210 slots = mte_dead_walk(&enode, 0);
5211 node = mte_to_node(enode);
5215 enode = node->piv_parent;
5216 if (mte_to_node(enode) == node)
5219 type = mte_node_type(enode);
5220 slots = ma_slots(mte_to_node(enode), type);
5224 slots = mte_dead_walk(&enode, offset);
5225 node = mte_to_node(enode);
5235 static inline void __rcu **mte_destroy_descend(struct maple_enode **enode,
5239 struct maple_enode *next = *enode;
5245 *enode = next;
5246 node = mte_to_node(*enode);
5247 type = mte_node_type(*enode);
5253 mte_set_node_dead(*enode);
5259 prev = *enode;
5265 static void mt_destroy_walk(struct maple_enode *enode, struct maple_tree *mt,
5269 struct maple_node *node = mte_to_node(enode);
5272 if (mte_is_leaf(enode)) {
5273 node->type = mte_node_type(enode);
5277 start = enode;
5278 slots = mte_destroy_descend(&enode, mt, start, 0);
5279 node = mte_to_node(enode); // Updated in the above call.
5285 node->slot_len = mte_dead_leaves(enode, mt, slots);
5289 enode = node->piv_parent;
5290 if (mte_to_node(enode) == node)
5293 type = mte_node_type(enode);
5294 slots = ma_slots(mte_to_node(enode), type);
5300 parent = enode;
5301 enode = tmp;
5302 slots = mte_destroy_descend(&enode, mt, parent, offset);
5305 node = mte_to_node(enode);
5306 } while (start != enode);
5308 node = mte_to_node(enode);
5309 node->slot_len = mte_dead_leaves(enode, mt, slots);
5322 * @enode: the encoded maple node (maple_enode) to start
5327 static inline void mte_destroy_walk(struct maple_enode *enode,
5330 struct maple_node *node = mte_to_node(enode);
5333 mt_destroy_walk(enode, mt, false);
5336 mt_destroy_walk(enode, mt, true);
5610 struct maple_enode *enode = mas->node;
5650 mas->node = enode;
7240 pr_err("MAS: tree=%p enode=%p ", mas->tree, mas->node);