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

Commit 9ea0f043 authored by Ralf Baechle's avatar Ralf Baechle
Browse files

[MIPS] Terminally fix local_{dec,sub}_if_positive



They contain 64-bit instructions so wouldn't work on 32-bit kernels or
32-bit hardware.  Since there are no users, blow them away.  They
probably were only ever created because there are atomic_sub_if_positive
and atomic_dec_if_positive which exist only for sake of semaphores.

Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent fef74705
Loading
Loading
Loading
Loading
+0 −68
Original line number Diff line number Diff line
@@ -115,68 +115,6 @@ static __inline__ long local_sub_return(long i, local_t * l)
	return result;
}

/*
 * local_sub_if_positive - conditionally subtract integer from atomic variable
 * @i: integer value to subtract
 * @l: pointer of type local_t
 *
 * Atomically test @l and subtract @i if @l is greater or equal than @i.
 * The function returns the old value of @l minus @i.
 */
static __inline__ long local_sub_if_positive(long i, local_t * l)
{
	unsigned long result;

	if (cpu_has_llsc && R10000_LLSC_WAR) {
		unsigned long temp;

		__asm__ __volatile__(
		"	.set	mips3					\n"
		"1:"	__LL	"%1, %2		# local_sub_if_positive\n"
		"	dsubu	%0, %1, %3				\n"
		"	bltz	%0, 1f					\n"
			__SC	"%0, %2					\n"
		"	.set	noreorder				\n"
		"	beqzl	%0, 1b					\n"
		"	 dsubu	%0, %1, %3				\n"
		"	.set	reorder					\n"
		"1:							\n"
		"	.set	mips0					\n"
		: "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
		: "Ir" (i), "m" (l->a.counter)
		: "memory");
	} else if (cpu_has_llsc) {
		unsigned long temp;

		__asm__ __volatile__(
		"	.set	mips3					\n"
		"1:"	__LL	"%1, %2		# local_sub_if_positive\n"
		"	dsubu	%0, %1, %3				\n"
		"	bltz	%0, 1f					\n"
			__SC	"%0, %2					\n"
		"	.set	noreorder				\n"
		"	beqz	%0, 1b					\n"
		"	 dsubu	%0, %1, %3				\n"
		"	.set	reorder					\n"
		"1:							\n"
		"	.set	mips0					\n"
		: "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
		: "Ir" (i), "m" (l->a.counter)
		: "memory");
	} else {
		unsigned long flags;

		local_irq_save(flags);
		result = l->a.counter;
		result -= i;
		if (result >= 0)
			l->a.counter = result;
		local_irq_restore(flags);
	}

	return result;
}

#define local_cmpxchg(l, o, n) \
	((long)cmpxchg_local(&((l)->a.counter), (o), (n)))
#define local_xchg(l, n) (xchg_local(&((l)->a.counter),(n)))
@@ -234,12 +172,6 @@ static __inline__ long local_sub_if_positive(long i, local_t * l)
 */
#define local_dec_and_test(l) (local_sub_return(1, (l)) == 0)

/*
 * local_dec_if_positive - decrement by 1 if old value positive
 * @l: pointer of type local_t
 */
#define local_dec_if_positive(l)	local_sub_if_positive(1, l)

/*
 * local_add_negative - add and test if negative
 * @l: pointer of type local_t