KVM: arm64: Normalize cache configuration
authorAkihiko Odaki <akihiko.odaki@daynix.com>
Thu, 12 Jan 2023 02:38:52 +0000 (11:38 +0900)
committerOliver Upton <oliver.upton@linux.dev>
Sat, 21 Jan 2023 18:09:23 +0000 (18:09 +0000)
commit7af0c2534f4c57b16e92dfca8c5f40fa90fbb3f3
tree81a282bcae6f2429eddee8f0a2dc07c8b862d378
parentbf48040cd9b0c4d93c635ce222014a594e4e93f2
KVM: arm64: Normalize cache configuration

Before this change, the cache configuration of the physical CPU was
exposed to vcpus. This is problematic because the cache configuration a
vcpu sees varies when it migrates between vcpus with different cache
configurations.

Fabricate cache configuration from the sanitized value, which holds the
CTR_EL0 value the userspace sees regardless of which physical CPU it
resides on.

CLIDR_EL1 and CCSIDR_EL1 are now writable from the userspace so that
the VMM can restore the values saved with the old kernel.

Suggested-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Link: https://lore.kernel.org/r/20230112023852.42012-8-akihiko.odaki@daynix.com
[ Oliver: Squash Marc's fix for CCSIDR_EL1.LineSize when set from userspace ]
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/include/asm/cache.h
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/reset.c
arch/arm64/kvm/sys_regs.c