Lines Matching refs:b_node
1764 static inline void mab_shift_right(struct maple_big_node *b_node, in mab_shift_right() argument
1767 unsigned long size = b_node->b_end * sizeof(unsigned long); in mab_shift_right()
1769 memmove(b_node->pivot + shift, b_node->pivot, size); in mab_shift_right()
1770 memmove(b_node->slot + shift, b_node->slot, size); in mab_shift_right()
1771 if (b_node->type == maple_arange_64) in mab_shift_right()
1772 memmove(b_node->gap + shift, b_node->gap, size); in mab_shift_right()
1784 static inline bool mab_middle_node(struct maple_big_node *b_node, int split, in mab_middle_node() argument
1787 unsigned char size = b_node->b_end; in mab_middle_node()
1792 if (!b_node->slot[split] && (size >= 2 * slot_count - 1)) in mab_middle_node()
1806 static inline int mab_no_null_split(struct maple_big_node *b_node, in mab_no_null_split() argument
1809 if (!b_node->slot[split]) { in mab_no_null_split()
1815 (b_node->b_end - split) > (mt_min_slots[b_node->type])) in mab_no_null_split()
1902 unsigned char mas_end, struct maple_big_node *b_node, in mas_mab_cp() argument
1916 b_node->pivot[j] = pivots[i++]; in mas_mab_cp()
1924 b_node->pivot[j] = pivots[i]; in mas_mab_cp()
1925 if (unlikely(!b_node->pivot[j])) in mas_mab_cp()
1928 if (unlikely(mas->max == b_node->pivot[j])) in mas_mab_cp()
1933 b_node->pivot[j] = mas_safe_pivot(mas, pivots, i, mt); in mas_mab_cp()
1936 b_node->b_end = ++j; in mas_mab_cp()
1939 memcpy(b_node->slot + mab_start, slots + mas_start, sizeof(void *) * j); in mas_mab_cp()
1942 memcpy(b_node->gap + mab_start, gaps + mas_start, in mas_mab_cp()
1981 static inline void mab_mas_cp(struct maple_big_node *b_node, in mab_mas_cp() argument
2001 pivots[j++] = b_node->pivot[i++]; in mab_mas_cp()
2002 } while (i <= mab_end && likely(b_node->pivot[i])); in mab_mas_cp()
2004 memcpy(slots, b_node->slot + mab_start, in mab_mas_cp()
2008 mas->max = b_node->pivot[i - 1]; in mab_mas_cp()
2017 gaps[--j] = b_node->gap[--i]; in mab_mas_cp()
2111 struct maple_big_node *b_node, unsigned char offset_end) in mas_store_b_node() argument
2119 b_node->type = wr_mas->type; in mas_store_b_node()
2124 mas_mab_cp(mas, 0, slot - 1, b_node, 0); in mas_store_b_node()
2125 b_end = b_node->b_end; in mas_store_b_node()
2126 piv = b_node->pivot[b_end - 1]; in mas_store_b_node()
2132 b_node->slot[b_end] = wr_mas->content; in mas_store_b_node()
2134 b_node->gap[b_end] = mas->index - 1 - piv; in mas_store_b_node()
2135 b_node->pivot[b_end++] = mas->index - 1; in mas_store_b_node()
2140 b_node->slot[b_end] = wr_mas->entry; in mas_store_b_node()
2141 b_node->pivot[b_end] = mas->last; in mas_store_b_node()
2151 mas_bulk_rebalance(mas, b_node->b_end, wr_mas->type); in mas_store_b_node()
2157 b_node->slot[++b_end] = wr_mas->content; in mas_store_b_node()
2159 b_node->gap[b_end] = piv - mas->last + 1; in mas_store_b_node()
2160 b_node->pivot[b_end] = piv; in mas_store_b_node()
2168 mas_mab_cp(mas, slot, wr_mas->node_end + 1, b_node, ++b_end); in mas_store_b_node()
2169 b_node->b_end--; in mas_store_b_node()
2173 b_node->b_end = b_end; in mas_store_b_node()
2583 *mas_new_ma_node(struct ma_state *mas, struct maple_big_node *b_node) in mas_new_ma_node() argument
2585 return mt_mk_node(ma_mnode_ptr(mas_pop_node(mas)), b_node->type); in mas_new_ma_node()
2601 struct maple_big_node *b_node, struct maple_enode **left, in mas_mab_to_node() argument
2606 unsigned char slot_count = mt_slots[b_node->type]; in mas_mab_to_node()
2608 *left = mas_new_ma_node(mas, b_node); in mas_mab_to_node()
2613 if (b_node->b_end < slot_count) { in mas_mab_to_node()
2614 split = b_node->b_end; in mas_mab_to_node()
2616 split = mab_calc_split(mas, b_node, mid_split, min); in mas_mab_to_node()
2617 *right = mas_new_ma_node(mas, b_node); in mas_mab_to_node()
2621 *middle = mas_new_ma_node(mas, b_node); in mas_mab_to_node()
2634 static inline void mab_set_b_end(struct maple_big_node *b_node, in mab_set_b_end() argument
2641 b_node->slot[b_node->b_end] = entry; in mab_set_b_end()
2643 b_node->gap[b_node->b_end] = mas_max_gap(mas); in mab_set_b_end()
2644 b_node->pivot[b_node->b_end++] = mas->max; in mab_set_b_end()
3104 struct maple_big_node *b_node) in mas_rebalance() argument
3108 unsigned char shift, b_end = ++b_node->b_end; in mas_rebalance()
3130 mast.bn = b_node; in mas_rebalance()
3136 mas_mab_cp(&r_mas, 0, mt_slot_count(r_mas.node), b_node, b_end); in mas_rebalance()
3141 mab_shift_right(b_node, shift); in mas_rebalance()
3143 mas_mab_cp(&l_mas, 0, shift - 1, b_node, 0); in mas_rebalance()
3144 b_node->b_end = shift + b_end; in mas_rebalance()
3460 static int mas_split(struct ma_state *mas, struct maple_big_node *b_node) in mas_split() argument
3502 mast.bn = b_node; in mas_split()
3505 if (mt_slots[b_node->type] > b_node->b_end) { in mas_split()
3511 l_mas.node = mas_new_ma_node(mas, b_node); in mas_split()
3512 r_mas.node = mas_new_ma_node(mas, b_node); in mas_split()
3528 split = mab_calc_split(mas, b_node, &mid_split, prev_l_mas.min); in mas_split()
3582 struct maple_big_node *b_node, unsigned char end) in mas_commit_b_node() argument
3585 unsigned char b_end = b_node->b_end; in mas_commit_b_node()
3586 enum maple_type b_type = b_node->type; in mas_commit_b_node()
3591 return mas_rebalance(wr_mas->mas, b_node); in mas_commit_b_node()
3594 return mas_split(wr_mas->mas, b_node); in mas_commit_b_node()
3596 if (mas_reuse_node(wr_mas, b_node, end)) in mas_commit_b_node()
3606 mab_mas_cp(b_node, 0, b_end, wr_mas->mas, false); in mas_commit_b_node()
3955 struct maple_big_node b_node; in mas_wr_spanning_store() local
4023 memset(&b_node, 0, sizeof(struct maple_big_node)); in mas_wr_spanning_store()
4025 mas_store_b_node(&l_wr_mas, &b_node, l_wr_mas.node_end); in mas_wr_spanning_store()
4029 &b_node, b_node.b_end + 1); in mas_wr_spanning_store()
4031 b_node.b_end++; in mas_wr_spanning_store()
4036 mast.bn = &b_node; in mas_wr_spanning_store()
4313 struct maple_big_node b_node; in mas_wr_bnode() local
4316 memset(&b_node, 0, sizeof(struct maple_big_node)); in mas_wr_bnode()
4317 mas_store_b_node(wr_mas, &b_node, wr_mas->offset_end); in mas_wr_bnode()
4318 mas_commit_b_node(wr_mas, &b_node, wr_mas->node_end); in mas_wr_bnode()