KVM: arm64: Don't BUG_ON() if emulated register table is unsorted
authorAlexandru Elisei <alexandru.elisei@arm.com>
Thu, 28 Apr 2022 10:34:04 +0000 (11:34 +0100)
committerMarc Zyngier <maz@kernel.org>
Wed, 4 May 2022 16:52:50 +0000 (17:52 +0100)
commitf1f0c0cfeaa7c10eb536d9919bf3902af0e17bce
tree5956eeff0782c3336bb3e105a6b0bdbb17c00c3c
parentb2d229d4ddb17db541098b83524d901257e93845
KVM: arm64: Don't BUG_ON() if emulated register table is unsorted

To emulate a register access, KVM uses a table of registers sorted by
register encoding to speed up queries using binary search.

When Linux boots, KVM checks that the table is sorted and uses a BUG_ON()
statement to let the user know if it's not. The unfortunate side effect is
that an unsorted sysreg table brings down the whole kernel, not just KVM,
even though the rest of the kernel can function just fine without KVM. To
make matters worse, on machines which lack a serial console, the user is
left pondering why the machine is taking so long to boot.

Improve this situation by returning an error from kvm_arch_init() if the
sysreg tables are not in the correct order. The machine is still very much
usable for the user, with the exception of virtualization, who can now
easily determine what went wrong.

A minor typo has also been corrected in the check_sysreg_table() function.

Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20220428103405.70884-2-alexandru.elisei@arm.com
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/arm.c
arch/arm64/kvm/sys_regs.c