s390/boot: pin amode31 default lma
authorVasily Gorbik <gor@linux.ibm.com>
Wed, 15 Mar 2023 10:00:19 +0000 (11:00 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 13 Apr 2023 15:36:27 +0000 (17:36 +0200)
The special amode31 part of the kernel must always remain below 2Gb. Place
it just under vmlinux.default_lma by default, which makes it easier to
debug amode31 as its default lma is known 0x10000 - 0x3000 (currently,
amode31's size is 3 pages). This location is always available as it is
originally occupied by the vmlinux archive.

Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/boot/startup.c

index e1edb61..45c30c2 100644 (file)
@@ -278,6 +278,7 @@ void startup_kernel(void)
 {
        unsigned long max_physmem_end;
        unsigned long vmlinux_lma = 0;
+       unsigned long amode31_lma;
        unsigned long asce_limit;
        unsigned long safe_addr;
        void *img;
@@ -335,7 +336,8 @@ void startup_kernel(void)
 
        /* vmlinux decompression is done, shrink reserved low memory */
        physmem_reserve(RR_DECOMPRESSOR, 0, (unsigned long)_decompressor_end);
-       physmem_alloc_range(RR_AMODE31, vmlinux.amode31_size, PAGE_SIZE, 0, SZ_2G, true);
+       amode31_lma = vmlinux.default_lma - vmlinux.amode31_size;
+       physmem_reserve(RR_AMODE31, amode31_lma, vmlinux.amode31_size);
 
        /*
         * The order of the following operations is important: