[PATCH 0/3] Relax break-before-make use with FEAT_BBM

From: Colton Lewis
Date: Fri Jun 02 2023 - 13:02:57 EST


Currently KVM follows the lengthy break-before-make process every time
the page size changes, which requires KVM to do a broadcast TLB
invalidation and data serialization for every affected page table
entry. This is expensive.

FEAT_BBM Level 2 support precludes the need to follow the whole
process when page size is the only thing that changed. This series
detects said support and avoids the unnecessary expensive operations,
speeding up the execution of the stage2 page table walkers.

Considerable time and effort has been spent trying to measure the
performance benefit, mainly using dirty_log_perf_test with huge pages,
but nothing was seen that stood out from ordinary variation between
runs. This is puzzling, but getting the series reviewed anyway may
spark some ideas.

This is based on kvmarm-6.4 + Ricardo's eager page splitting series
[1] to cover the eager splitting case as well. Similar changes were
originally part of that series but it was suggested FEAT_BBM should be
its own series.

[1] https://lore.kernel.org/kvmarm/20230426172330.1439644-1-ricarkol@xxxxxxxxxx/

Colton Lewis (2):
KVM: arm64: Clear possible conflict aborts
KVM: arm64: Skip break phase when we have FEAT_BBM level 2

Ricardo Koller (1):
arm64: Add a capability for FEAT_BBM level 2

arch/arm64/include/asm/esr.h | 1 +
arch/arm64/kernel/cpufeature.c | 11 +++++++
arch/arm64/kvm/hyp/pgtable.c | 58 ++++++++++++++++++++++++++++++----
arch/arm64/kvm/mmu.c | 6 ++++
arch/arm64/tools/cpucaps | 1 +
5 files changed, 70 insertions(+), 7 deletions(-)

--
2.41.0.rc0.172.g3f132b7071-goog