Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1df89519 authored by Matthew Wilcox's avatar Matthew Wilcox
Browse files

ida: Change ida_get_new_above to return the id



This calling convention makes more sense for the implementation as well
as the callers.  It even shaves 32 bytes off the compiled code size.

Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
parent b03f8e43
Loading
Loading
Loading
Loading
+12 −18
Original line number Diff line number Diff line
@@ -363,7 +363,7 @@ EXPORT_SYMBOL(idr_replace);

#define IDA_MAX (0x80000000U / IDA_BITMAP_BITS - 1)

static int ida_get_new_above(struct ida *ida, int start, int *id)
static int ida_get_new_above(struct ida *ida, int start)
{
	struct radix_tree_root *root = &ida->ida_rt;
	void __rcu **slot;
@@ -402,8 +402,8 @@ static int ida_get_new_above(struct ida *ida, int start, int *id)
			if (ebit < BITS_PER_LONG) {
				tmp |= 1UL << ebit;
				rcu_assign_pointer(*slot, (void *)tmp);
				*id = new + ebit - RADIX_TREE_EXCEPTIONAL_SHIFT;
				return 0;
				return new + ebit -
					RADIX_TREE_EXCEPTIONAL_SHIFT;
			}
			bitmap = this_cpu_xchg(ida_bitmap, NULL);
			if (!bitmap)
@@ -434,8 +434,7 @@ static int ida_get_new_above(struct ida *ida, int start, int *id)
						RADIX_TREE_EXCEPTIONAL_ENTRY);
				radix_tree_iter_replace(root, &iter, slot,
						bitmap);
				*id = new;
				return 0;
				return new;
			}
			bitmap = this_cpu_xchg(ida_bitmap, NULL);
			if (!bitmap)
@@ -444,8 +443,7 @@ static int ida_get_new_above(struct ida *ida, int start, int *id)
			radix_tree_iter_replace(root, &iter, slot, bitmap);
		}

		*id = new;
		return 0;
		return new;
	}
}

@@ -534,7 +532,7 @@ EXPORT_SYMBOL(ida_destroy);
int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max,
			gfp_t gfp)
{
	int ret, id = 0;
	int id = 0;
	unsigned long flags;

	if ((int)min < 0)
@@ -545,24 +543,20 @@ int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max,

again:
	xa_lock_irqsave(&ida->ida_rt, flags);
	ret = ida_get_new_above(ida, min, &id);
	if (!ret) {
		if (id > max) {
	id = ida_get_new_above(ida, min);
	if (id > (int)max) {
		ida_remove(ida, id);
			ret = -ENOSPC;
		} else {
			ret = id;
		}
		id = -ENOSPC;
	}
	xa_unlock_irqrestore(&ida->ida_rt, flags);

	if (unlikely(ret == -EAGAIN)) {
	if (unlikely(id == -EAGAIN)) {
		if (!ida_pre_get(ida, gfp))
			return -ENOMEM;
		goto again;
	}

	return ret;
	return id;
}
EXPORT_SYMBOL(ida_alloc_range);