return _mte_get_pivot(mas->node, slot, type);
}
+
/** Private
* mas_get_safe_pivot() - Return the pivot or the mas->max.
*
return _mas_get_safe_pivot(mas, slot, type);
}
+static inline unsigned long mas_get_safe_lower_bound(struct ma_state *mas,
+ unsigned char slot)
+{
+ if (!slot)
+ return mas->min;
+
+ return mas_get_safe_pivot(mas, slot - 1) + 1;
+}
+
static inline void ma_set_pivot(struct maple_node *mn, unsigned char slot,
enum maple_type type, unsigned long val)
{
unsigned long last_pivot;
unsigned long pivot = mas_get_safe_pivot(mas, slot);
- if (slot)
- min = mas_get_safe_pivot(mas, slot - 1) + 1;
- else
- min = mas->min;
-
+ min = mas_get_safe_lower_bound(mas, slot);
if (pivot < limit)
goto no_entry;
unsigned char count = mt_slot_count(mas->node);
void *entry;
- if (slot)
- r_start = mas_get_safe_pivot(mas, slot - 1) + 1;
+ r_start = mas_get_safe_lower_bound(mas, slot);
while (slot < count) {
pivot = mas_get_safe_pivot(mas, slot);
mas->last = max;
slot = mas_get_slot(mas);
- if (slot)
- mas->index = mas_get_safe_pivot(mas, slot - 1) + 1;
- else
- mas->index = mas->min;
-
+ mas->index = mas_get_safe_lower_bound(mas, slot);
return mas_get_rcu_slot(mas, mas_get_slot(mas));
}
}
EXPORT_SYMBOL_GPL(mas_prev);
-static inline unsigned long _mas_rev_awalk_min(struct ma_state *mas,
- unsigned char slot,
- enum maple_type type)
-{
- if (!slot)
- return mas->min;
- return _mte_get_pivot(mas->node, slot - 1, type) + 1;
-}
static inline bool _mas_rev_awalk(struct ma_state *mas, unsigned long size)
{
enum maple_type type;
do {
void *entry = NULL;
- min = _mas_rev_awalk_min(mas, i, type);
+ min = mas_get_safe_lower_bound(mas, i);
/* last is below this range */
if (mas->last < min)
default:
do {
- min = _mas_rev_awalk_min(mas, i, type);
-
+ min = mas_get_safe_lower_bound(mas, i);
/* last is too little for this range */
if (mas->last < min)
goto next;
default:
pivot = 0;
i = mas_get_slot(mas);
- if (i)
- min = _mas_get_safe_pivot(mas, i - 1, type) + 1;
+ min = mas_get_safe_lower_bound(mas, i);
for (; i <= pivot_cnt; i++) {
unsigned long this_gap;
pivot = _mas_get_safe_pivot(mas, i, type);
*/
mas_ascend(mas);
mas->max = mas_get_safe_pivot(mas, pslot);
- if (pslot)
- mas->min = mas_get_safe_pivot(mas, pslot - 1) + 1;
-
+ mas->min = mas_get_safe_lower_bound(mas, pslot);
mas->node = mn;
mas_set_slot(mas, slot);
_mas_store(mas, entry, false);