[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