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

Commit a5a737e0 authored by David S. Miller's avatar David S. Miller
Browse files

sparc64: Do not clobber %g2 in xcall_fetch_glob_regs().



%g2 is meant to hold the CPUID number throughout this routine, since
at the very beginning, and at the very end, we use %g2 to calculate
indexes into per-cpu arrays.

However we erroneously clobber it in order to hold the %cwp register
value mid-stream.

Fix this code to use %g3 for the %cwp read and related calulcations
instead.

Reported-by: default avatarMeelis Roos <mroos@linux.ee>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bc46f937
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -269,4 +269,4 @@ static int __init sunfire_init(void)
	return 0;
}

subsys_initcall(sunfire_init);
fs_initcall(sunfire_init);
+3 −3
Original line number Diff line number Diff line
@@ -495,11 +495,11 @@ xcall_fetch_glob_regs:
	stx		%o7, [%g1 + GR_SNAP_O7]
	stx		%i7, [%g1 + GR_SNAP_I7]
	/* Don't try this at home kids... */
	rdpr		%cwp, %g2
	sub		%g2, 1, %g7
	rdpr		%cwp, %g3
	sub		%g3, 1, %g7
	wrpr		%g7, %cwp
	mov		%i7, %g7
	wrpr		%g2, %cwp
	wrpr		%g3, %cwp
	stx		%g7, [%g1 + GR_SNAP_RPC]
	sethi		%hi(trap_block), %g7
	or		%g7, %lo(trap_block), %g7