[PATCH v2 0/2] ARM: move FDT mapping out of linear region
Ard Biesheuvel
ardb at kernel.org
Sun Oct 11 12:39:34 EDT 2020
On Wed, 7 Oct 2020 at 10:39, Ard Biesheuvel <ardb at kernel.org> wrote:
>
> For the ARM kernel, setting up the kernel's virtual address space at boot
> is tricky, given the risk of collision between 1:1 mapped regions and
> virtually remapped regions. There is also a concern regarding the exact
> mapping attributes that are needed for each region, which differs between
> ARM architecture revisions, UP vs SMP etc
>
> For this reason, the kernel VA space is set up in two stages: at early
> boot, only the kernel itself and the DT are mapped using section mappings
> and later on, all existing mappings are torn down except the one covering
> the first memblock covering the kernel, and remapped again using the full
> fledged mapping routines that can map at page granularity and use all the
> right mapping attributes.
>
> There are cases where this may result in the DT getting unmapped at
> this point, and not remapped again. For instance, if the first memblock
> is not PMD aligned, we will align it up, and mark the memory below it
> as MEMBLOCK_NOMAP, to avoid having to allocate page tables to create
> the mapping before we have a mapped memblock to allocate from. If the
> DT happens to reside in this region, it will not be mapped at all when
> the permanent kernel VA mappings are in place, resulting in crashes.
>
> As we happen to have a 4 MB hole in the kernel VA space (between the
> end of the VMALLOC space and the start of the FIXMAP region), let's
> use it to create a permanent, read-only mapping of the DT that is not
> affected by any such issues.
>
> Changes since v1:
> - bump the start of the fixmap region by 512 KB so we still have a full
> guard region even on LPAE builds, which will use the entire 4 MB window
> for the read-only mapping of the DT
> - update Documentation/arm/memory.rst accordingly
> - add Linus's ack
>
> Cc: Linus Walleij <linus.walleij at linaro.org>
> Cc: Florian Fainelli <f.fainelli at gmail.com>
> Cc: Russell King <linux at armlinux.org.uk>
> Cc: Nicolas Pitre <nico at fluxnic.net>
> Cc: Rob Herring <robh+dt at kernel.org>
>
> Ard Biesheuvel (2):
> ARM: centralize phys-to-virt conversion of DT/ATAGS address
> ARM: move device tree mapping out of linear region
>
I've dropped these into Russell's patch tracker.
Thanks all,
> Documentation/arm/memory.rst | 7 ++++++-
> arch/arm/include/asm/fixmap.h | 2 +-
> arch/arm/include/asm/memory.h | 5 +++++
> arch/arm/include/asm/prom.h | 4 ++--
> arch/arm/kernel/atags.h | 4 ++--
> arch/arm/kernel/atags_parse.c | 6 +++---
> arch/arm/kernel/devtree.c | 6 +++---
> arch/arm/kernel/head.S | 5 ++---
> arch/arm/kernel/setup.c | 19 ++++++++++++++-----
> arch/arm/mm/init.c | 1 -
> arch/arm/mm/mmu.c | 20 ++++++++++++++------
> arch/arm/mm/pv-fixup-asm.S | 4 ++--
> 12 files changed, 54 insertions(+), 29 deletions(-)
>
> --
> 2.17.1
>
More information about the linux-arm-kernel
mailing list