s390/boot: Make identity mapping base address explicit
authorAlexander Gordeev <agordeev@linux.ibm.com>
Thu, 10 Aug 2023 19:40:19 +0000 (21:40 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 17 Apr 2024 11:38:00 +0000 (13:38 +0200)
This is a preparatory rework to allow uncoupling virtual
and physical addresses spaces.

Currently the identity mapping base address is implicit
and is always set to zero. Make it explicit by putting
into __identity_base persistent boot variable and use it
in proper context - which is the value of PAGE_OFFSET.

Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/include/asm/page.h
arch/s390/kernel/setup.c

index e2137b6..9540375 100644 (file)
@@ -181,6 +181,7 @@ int arch_make_page_accessible(struct page *page);
 struct vm_layout {
        unsigned long kaslr_offset;
        unsigned long kaslr_offset_phys;
+       unsigned long identity_base;
        unsigned long identity_size;
 };
 
@@ -188,6 +189,7 @@ extern struct vm_layout vm_layout;
 
 #define __kaslr_offset         vm_layout.kaslr_offset
 #define __kaslr_offset_phys    vm_layout.kaslr_offset_phys
+#define __identity_base                vm_layout.identity_base
 #define ident_map_size         vm_layout.identity_size
 
 static inline unsigned long kaslr_offset(void)
@@ -203,8 +205,8 @@ static inline int kaslr_enabled(void)
        return 0;
 }
 
-#define __PAGE_OFFSET          0x0UL
-#define PAGE_OFFSET            0x0UL
+#define __PAGE_OFFSET          __identity_base
+#define PAGE_OFFSET            __PAGE_OFFSET
 
 #define __pa_nodebug(x)                ((unsigned long)(x))
 
index b9d7086..0544830 100644 (file)
@@ -149,6 +149,7 @@ unsigned long __bootdata_preserved(max_mappable);
 struct physmem_info __bootdata(physmem_info);
 
 struct vm_layout __bootdata_preserved(vm_layout);
+EXPORT_SYMBOL_GPL(vm_layout);
 int __bootdata_preserved(__kaslr_enabled);
 unsigned int __bootdata_preserved(zlib_dfltcc_support);
 EXPORT_SYMBOL(zlib_dfltcc_support);