Skip to content
  • Christian Borntraeger's avatar
    s390/boot/decompression: disable floating point in decompressor · adc0b7fb
    Christian Borntraeger authored
    
    
    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: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Acked-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Cc: stable@vger.kernel.org
    adc0b7fb