]> git.dujemihanovic.xyz Git - linux.git/commitdiff
s390/boot: make _diag308_reset_dma() position-independent
authorAlexander Egorenkov <egorenar@linux.ibm.com>
Tue, 15 Jun 2021 14:05:09 +0000 (16:05 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Tue, 27 Jul 2021 07:39:16 +0000 (09:39 +0200)
As a preparation for moving the .dma.data section from the decompressor to
the decompressed kernel, the .dma.data section must be made relocatable
by replacing absolute memory addressing with relative one. This is required
in order to be able to relocate the DMA section to a memory address <= 2G
as required by the hardware architecture. The DMA section must be
relocated in case the decompressed kernel was loaded to an address >= 2G
which can occur if KASAN is enabled. By making the whole DMA section
position-independent we avoid applying relocations to it whenever it is
moved to a different address, which becomes possible as soon as it becomes
a part of the decompressed kernel.

Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/boot/text_dma.S

index 5ff5fee028016158500ebf2ef65d48d283746e32..65e037ab7df56fe4aa4bdc19e04b214c05346ac6 100644 (file)
@@ -127,6 +127,8 @@ restart_part2:
        larl    %r4,.Lprefix            # Restore prefix register
        spx     0(%r4)
        larl    %r4,.Lcontinue_psw      # Restore PSW flags
+       larl    %r2,.Lcontinue
+       stg     %r2,8(%r4)
        lpswe   0(%r4)
 .Lcontinue:
        BR_EX_DMA_r14
@@ -139,7 +141,7 @@ ENDPROC(_diag308_reset_dma)
 
 .align 8
 .Lcontinue_psw:
-       .quad   0,.Lcontinue
+       .quad   0,0
 
 .align 8
 .Lctlreg0: