Commit df2ffeda authored by John David Anglin's avatar John David Anglin Committed by Helge Deller
Browse files

parisc: Fix extraction of hash lock bits in syscall.S



The extru instruction leaves the most significant 32 bits of the target
register in an undefined state on PA 2.0 systems. If any of these bits
are nonzero, this will break the calculation of the lock pointer.

Fix by using extrd,u instruction via extru_safe macro on 64-bit kernels.

Signed-off-by: default avatarJohn David Anglin <dave.anglin@bell.net>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 169d1a4a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -566,7 +566,7 @@ lws_compare_and_swap:
	ldo	R%lws_lock_start(%r20), %r28

	/* Extract eight bits from r26 and hash lock (Bits 3-11) */
	extru  %r26, 28, 8, %r20
	extru_safe  %r26, 28, 8, %r20

	/* Find lock to use, the hash is either one of 0 to
	   15, multiplied by 16 (keep it 16-byte aligned)
@@ -751,7 +751,7 @@ cas2_lock_start:
	ldo	R%lws_lock_start(%r20), %r28

	/* Extract eight bits from r26 and hash lock (Bits 3-11) */
	extru  %r26, 28, 8, %r20
	extru_safe  %r26, 28, 8, %r20

	/* Find lock to use, the hash is either one of 0 to
	   15, multiplied by 16 (keep it 16-byte aligned)