linux_dsm_epyc7002/arch/sparc
Rob Gardner cae9af6a82 sparc64: Don't restrict fp regs for no-fault loads
The function handle_ldf_stq() deals with no-fault ASI
loads and stores, but restricts fp registers to quad
word regs (ie, %f0, %f4 etc). This is valid for the
STQ case, but unnecessarily restricts loads, which
may be single precision, double, or quad. This results
in SIGFPE being raised for this instruction when the
source address is invalid:
	ldda [%g1] ASI_PNF, %f2
but not for this one:
	ldda [%g1] ASI_PNF, %f4
The validation check for quad register is moved to
within the STQ block so that loads are not affected
by the check.

An additional problem is that the calculation for freg
is incorrect when a single precision load is being
handled. This causes %f1 to be seen as %f32 etc,
and the incorrect register ends up being overwritten.
This code sequence demonstrates the problem:
	ldd [%g1], %f32		! g1 = valid address
	lda [%i3] ASI_PNF, %f1  ! i3 = invalid address
	std %f32, [%g1]
This is corrected by basing the freg calculation on
the load size.

Signed-off-by: Rob Gardner <rob.gardner@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-11-04 15:00:49 -05:00
..
boot sparc: Add "install" target 2014-08-04 20:45:59 -07:00
configs sparc: Set CONFIG_NET=y in defconfigs 2014-09-24 13:38:30 -04:00
crypto crypto: sparc/md5 - use md5 IV MD5_HX instead of their raw value 2015-05-18 12:20:20 +08:00
include sparc64: Fix incorrect ASI_ST_BLKINIT_MRU_S value 2015-08-07 15:22:20 -07:00
kernel sparc64: Don't restrict fp regs for no-fault loads 2015-11-04 15:00:49 -05:00
lib sparc64: use ENTRY/ENDPROC in VISsave 2015-08-07 15:22:40 -07:00
math-emu arch/sparc/math-emu/math_32.c: drop stray break operator 2014-08-04 20:29:06 -07:00
mm sparc64: Convert BUG_ON to warning 2015-06-25 06:01:02 -07:00
net module: remove mod arg from module_free, rename module_memfree(). 2015-01-20 11:38:33 +10:30
oprofile sparc: using HZ needs an include of linux/param.h 2009-10-05 00:46:08 -07:00
power Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc 2014-10-11 20:36:34 -04:00
prom sparc64: Fix register corruption in top-most kernel stack frame during boot. 2014-10-24 09:52:49 -07:00
Kbuild sparc64: Add SHA1 driver making use of the 'sha1' instruction. 2012-08-20 15:08:49 -07:00
Kconfig sparc: time: Replace update_persistent_clock() with CONFIG_RTC_SYSTOHC 2015-06-25 01:13:43 +02:00
Kconfig.debug lib: consolidate DEBUG_STACK_USAGE option 2011-05-25 08:39:54 -07:00
Makefile sparc: Add "install" target 2014-08-04 20:45:59 -07:00