[PATCH] kmap_local: don't assume kmap PTEs are linear arrays in memory

Linus Walleij linus.walleij at linaro.org
Tue Nov 9 03:39:32 PST 2021


On Tue, Oct 26, 2021 at 3:13 PM Ard Biesheuvel <ardb at kernel.org> wrote:

> The kmap_local conversion broke the ARM architecture, because the new
> code assumes that all PTEs used for creating kmaps form a linear array
> in memory, and uses array indexing to look up the kmap PTE belonging to
> a certain kmap index.
>
> On ARM, this cannot work, not only because the PTE pages may be
> non-adjacent in memory, but also because ARM/!LPAE interleaves hardware
> entries and extended entries (carrying software-only bits) in a way that
> is not compatible with array indexing.
>
> Fortunately, this only seems to affect configurations with more than 8
> CPUs, due to the way the per-CPU kmap slots are organized in memory.
>
> Work around this by permitting an architecture to set a Kconfig symbol
> that signifies that the kmap PTEs do not form a lineary array in memory,
> and so the only way to locate the appropriate one is to walk the page
> tables.
>
> Reported-by: Quanyang Wang <quanyang.wang at windriver.com>
> Signed-off-by: Ard Biesheuvel <ardb at kernel.org>

Ouch, nice workarounding.
Reviewed-by: Linus Walleij <linus.walleij at linaro.org>

I wonder if there is some Fixes: that applies to this?
Maybe TGLX can add one when he applies it.

Yours,
Linus Walleij



More information about the linux-arm-kernel mailing list