* May return NULL.
*
*/
-static inline void *__mas_next(struct ma_state *mas, unsigned long limit,
- unsigned long *range_start)
+static inline void *__mas_next(struct ma_state *mas, unsigned long limit)
{
void *entry = NULL;
struct maple_enode *prev_node = mas->node;
mas->offset++;
retry:
- r_start = mas->last + 1;
-
if (unlikely(mas->offset >= mt_slots[mt]))
goto next_node;
if (unlikely(mas_dead_node(mas, index)))
goto retry;
- *range_start = r_start;
+ mas->index = r_start;
return entry;
}
mt = mte_node_type(mas->node);
}
- *range_start = limit;
- mas->last = mas->index = limit;
+ mas->index = mas->last = limit;
mas->offset = offset;
mas->node = prev_node;
return NULL;
* _mas_next() - Finds the next entry, sets index to the start of the range.
*
*/
-static void *_mas_next(struct ma_state *mas, unsigned long limit,
- unsigned long *range_start)
+static void *_mas_next(struct ma_state *mas, unsigned long limit)
{
void *entry = NULL;
if (unlikely(mas_is_start(mas))) {// First run.
unsigned long range_max;
+ unsigned long range_start;
mas_start(mas);
- *range_start = 0;
- entry = mas_range_load(mas, range_start, &range_max);
+ entry = mas_range_load(mas, &range_start, &range_max);
mas->last = range_max;
- mas->index = *range_start;
+ mas->index = range_start;
if (entry)
return entry;
}
if (unlikely(!mas_searchable(mas)))
return NULL;
- entry = __mas_next(mas, limit, range_start);
- mas->index = *range_start;
+ entry = __mas_next(mas, limit);
return entry;
}
*/
void *mas_find(struct ma_state *mas, unsigned long max)
{
- unsigned long index = mas->min;
void *entry = NULL;
- while (mas_search_cont(mas, index, max, entry))
- entry = _mas_next(mas, max, &index);
+ while (mas_search_cont(mas, mas->index, max, entry))
+ entry = _mas_next(mas, max);
return entry;
}
entry = NULL;
while (mas_search_cont(&mas, range_start, max, entry)) {
- entry = _mas_next(&mas, max, &range_start);
+ entry = _mas_next(&mas, max);
+ range_start = mas.index;
if (!entry || xa_is_zero(entry))
entry = NULL;
}
*/
void *mas_next(struct ma_state *mas, unsigned long max)
{
- unsigned long index = 0;
-
if (mas_is_none(mas))
mas->node = MAS_START;
- return _mas_next(mas, max, &index);
+ return _mas_next(mas, max);
}
EXPORT_SYMBOL_GPL(mas_next);
/*