arm64: Reduce add_map() complexity
authorMarc Zyngier <maz@kernel.org>
Tue, 14 Feb 2023 13:38:13 +0000 (21:38 +0800)
committerTom Rini <trini@konsulko.com>
Mon, 6 Mar 2023 22:03:56 +0000 (17:03 -0500)
commit41e2787f5ec4249cb2e77a3ebd3c49035e3c6535
tree8d32fdd814157d6c9466106d60a0abdbae94bb9a
parent2c0bdcacf3bb4045d96d567c114606acf1a9b257
arm64: Reduce add_map() complexity

In the add_map() function, for each level it populates, it iterates from
the root of the PT tree, making it ineficient if a mapping needs to occur
past level 1.

Instead, replace it with a recursive (and much simpler) algorithm
that keeps the complexity as low as possible. With this, mapping
512GB at level 2 goes from several seconds down to not measurable
on an A55 machine.

We keep the block mappings at level 1 for now though.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Pierre-Clément Tosi <ptosi@google.com>
[ Paul: pick from the Android tree. Fixup Pierre's commit. Rebase to the
  upstream ]
Signed-off-by: Ying-Chun Liu (PaulLiu) <paul.liu@linaro.org>
Cc: Tom Rini <trini@konsulko.com>
Link: https://android.googlesource.com/platform/external/u-boot/+/96ad729cf4cab53bdff8222bb3eb256f38b5c3a6
Link: https://android.googlesource.com/platform/external/u-boot/+/6be9330601d81545c7c941e3609f35bf68a09059
arch/arm/cpu/armv8/cache_v8.c