linux/arch/s390/boot/compressed
Christian Borntraeger adc0b7fbf6 s390/boot/decompression: disable floating point in decompressor
my gcc 5.1 used an ldgr instruction with a register != 0,2,4,6 for
spilling/filling into a floating point register in our decompressor.

This will cause an AFP-register data exception as the decompressor
did not setup the additional floating point registers via cr0.
That causes a program check loop that looked like a hang with
one "Uncompressing Linux... " message (directly booted via kvm)
or a loop of "Uncompressing Linux... " messages (when booted via
zipl boot loader).

The offending code in my build was

   48e400:       e3 c0 af ff ff 71       lay     %r12,-1(%r10)
-->48e406:       b3 c1 00 1c             ldgr    %f1,%r12
   48e40a:       ec 6c 01 22 02 7f       clij    %r6,2,12,0x48e64e

but gcc could do spilling into an fpr at any function. We can
simply disable floating point support at that early stage.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: stable@vger.kernel.org
2015-09-29 14:45:10 +02:00
..
.gitignore s390: add various .gitignore files. 2012-05-16 14:42:41 +02:00
head.S s390: remove "64" suffix from a couple of files 2015-03-25 11:49:34 +01:00
Makefile s390/boot/decompression: disable floating point in decompressor 2015-09-29 14:45:10 +02:00
misc.c lib/decompressors: use real out buf size for gunzip with kernel 2015-09-10 13:29:01 -07:00
vmlinux.lds.S s390: remove 31 bit support 2015-03-25 11:49:33 +01:00
vmlinux.scr