ARM: 9088/1: Split KERNEL_OFFSET from PAGE_OFFSET
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 3 Jun 2021 08:50:16 +0000 (09:50 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Sun, 13 Jun 2021 17:16:40 +0000 (18:16 +0100)
We want to be able to compile the kernel into an address different
from PAGE_OFFSET (start of lowmem) + TEXT_OFFSET, so start to pry
apart the address of where the kernel is located from the address
where the lowmem is located by defining and using KERNEL_OFFSET in
a few key places.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/memory.h
arch/arm/kernel/head.S
arch/arm/kernel/vmlinux.lds.S

index a711322..a5f1d18 100644 (file)
 #endif
 #include <asm/kasan_def.h>
 
-/* PAGE_OFFSET - the virtual address of the start of the kernel image */
+/*
+ * PAGE_OFFSET: the virtual address of the start of lowmem, memory above
+ *   the virtual address range for userspace.
+ * KERNEL_OFFSET: the virtual address of the start of the kernel image.
+ *   we may further offset this with TEXT_OFFSET in practice.
+ */
 #define PAGE_OFFSET            UL(CONFIG_PAGE_OFFSET)
+#define KERNEL_OFFSET          (PAGE_OFFSET)
 
 #ifdef CONFIG_MMU
 
index 7f62c5e..4e2daaa 100644 (file)
@@ -23,7 +23,6 @@
 #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING)
 #include CONFIG_DEBUG_LL_INCLUDE
 #endif
-
 /*
  * swapper_pg_dir is the virtual address of the initial page table.
  * We place the page tables 16K below KERNEL_RAM_VADDR.  Therefore, we must
@@ -31,7 +30,7 @@
  * the least significant 16 bits to be 0x8000, but we could probably
  * relax this restriction to KERNEL_RAM_VADDR >= PAGE_OFFSET + 0x4000.
  */
-#define KERNEL_RAM_VADDR       (PAGE_OFFSET + TEXT_OFFSET)
+#define KERNEL_RAM_VADDR       (KERNEL_OFFSET + TEXT_OFFSET)
 #if (KERNEL_RAM_VADDR & 0xffff) != 0x8000
 #error KERNEL_RAM_VADDR must start at 0xXXXX8000
 #endif
index f7f4620..20c4f6d 100644 (file)
@@ -47,7 +47,7 @@ SECTIONS
 #endif
        }
 
-       . = PAGE_OFFSET + TEXT_OFFSET;
+       . = KERNEL_OFFSET + TEXT_OFFSET;
        .head.text : {
                _text = .;
                HEAD_TEXT