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

Commit e918a62a authored by Punit Agrawal's avatar Punit Agrawal Committed by Russell King
Browse files

ARM: 8135/1: Fix in-correct barrier usage in SWP{B} emulation



According to the ARM ARMv7, explicit barriers are necessary when using
synchronisation primitives such as SWP{B}. The use of these
instructions does not automatically imply a barrier and any ordering
requirements by the software must be explicitly expressed with the use
of suitable barriers.

Based on this, remove the barriers from SWP{B} emulation.

Acked-by: default avatarWill Deacon <will.deacon@arm.com>
Signed-off-by: default avatarPunit Agrawal <punit.agrawal@arm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent a040803a
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -142,14 +142,6 @@ static int emulate_swpX(unsigned int address, unsigned int *data,
	while (1) {
		unsigned long temp;

		/*
		 * Barrier required between accessing protected resource and
		 * releasing a lock for it. Legacy code might not have done
		 * this, and we cannot determine that this is not the case
		 * being emulated, so insert always.
		 */
		smp_mb();

		if (type == TYPE_SWPB)
			__user_swpb_asm(*data, address, res, temp);
		else
@@ -162,13 +154,6 @@ static int emulate_swpX(unsigned int address, unsigned int *data,
	}

	if (res == 0) {
		/*
		 * Barrier also required between acquiring a lock for a
		 * protected resource and accessing the resource. Inserted for
		 * same reason as above.
		 */
		smp_mb();

		if (type == TYPE_SWPB)
			swpbcounter++;
		else