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

Commit ac71275c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "arm64: fix SWP instruction emulation"

parents 42a92bbc 64eb0f41
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -40,12 +40,13 @@ static int swpb(u8 in, u8 *out, u8 *addr)
{
	u8 _out;
	int res;
	int err = 0;
	int err;

	do {
		__asm__ __volatile__(
		"0:	ldxrb	%w1, %4\n"
		"1:	stxrb	%w0, %w3, %4\n"
		"	mov	%w2, #0\n"
		"2:\n"
		"	.section	 .fixup,\"ax\"\n"
		"	.align		2\n"
@@ -58,7 +59,7 @@ static int swpb(u8 in, u8 *out, u8 *addr)
		"	.quad		1b, 3b\n"
		"	.previous"
		: "=&r" (res), "=r" (_out), "=r" (err)
		: "r" (in), "Q" (addr), "i" (-EFAULT)
		: "r" (in), "Q" (*addr), "i" (-EFAULT)
		: "cc", "memory");
	} while (err == 0 && res != 0);

@@ -77,6 +78,7 @@ static int swp(u32 in, u32 *out, u32 *addr)
		__asm__ __volatile__(
		"0:	ldxr	%w1, %4\n"
		"1:	stxr	%w0, %w3, %4\n"
		"	mov	%w2, #0\n"
		"2:\n"
		"	.section	 .fixup,\"ax\"\n"
		"	.align		2\n"
@@ -89,7 +91,7 @@ static int swp(u32 in, u32 *out, u32 *addr)
		"	.quad		1b, 3b\n"
		"	.previous"
		: "=&r" (res), "=r" (_out), "=r" (err)
		: "r" (in), "Q" (addr), "i" (-EFAULT)
		: "r" (in), "Q" (*addr), "i" (-EFAULT)
		: "cc", "memory");
	} while (err == 0 && res != 0);