lkml.org 
[lkml]   [2015]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16.y-ckt 04/94] s390/boot/decompression: disable floating point in decompressor
    Date
    3.16.7-ckt20 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Christian Borntraeger <borntraeger@de.ibm.com>

    commit adc0b7fbf6fe9967505c0254d9535ec7288186ae upstream.

    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>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    arch/s390/boot/compressed/Makefile | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/arch/s390/boot/compressed/Makefile b/arch/s390/boot/compressed/Makefile
    index f90d1fc6d603..f70b2321071e 100644
    --- a/arch/s390/boot/compressed/Makefile
    +++ b/arch/s390/boot/compressed/Makefile
    @@ -12,7 +12,7 @@ targets += misc.o piggy.o sizes.h head$(BITS).o

    KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2
    KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
    -KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks
    +KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks -msoft-float
    KBUILD_CFLAGS += $(call cc-option,-mpacked-stack)
    KBUILD_CFLAGS += $(call cc-option,-ffreestanding)


    \
     
     \ /
      Last update: 2015-11-13 12:21    [W:4.133 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site