KVM: arm64: Use guest ID register values for the sake of emulation
authorJing Zhang <jingzhangos@google.com>
Tue, 3 Oct 2023 23:03:59 +0000 (23:03 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Wed, 4 Oct 2023 17:10:15 +0000 (17:10 +0000)
Since KVM now supports per-VM ID registers, use per-VM ID register
values for the sake of emulation for DBGDIDR and LORegion.

Signed-off-by: Jing Zhang <jingzhangos@google.com>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20231003230408.3405722-4-oliver.upton@linux.dev
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/sys_regs.c

index 5b0e94367f749cc98eb6d4774e723363c83cd365..b73f9ff0899b9291ad9bbf4ea37ab61d22e8ca21 100644 (file)
@@ -379,7 +379,7 @@ static bool trap_loregion(struct kvm_vcpu *vcpu,
                          struct sys_reg_params *p,
                          const struct sys_reg_desc *r)
 {
-       u64 val = read_sanitised_ftr_reg(SYS_ID_AA64MMFR1_EL1);
+       u64 val = IDREG(vcpu->kvm, SYS_ID_AA64MMFR1_EL1);
        u32 sr = reg_to_encoding(r);
 
        if (!(val & (0xfUL << ID_AA64MMFR1_EL1_LO_SHIFT))) {
@@ -2445,8 +2445,8 @@ static bool trap_dbgdidr(struct kvm_vcpu *vcpu,
        if (p->is_write) {
                return ignore_write(vcpu, p);
        } else {
-               u64 dfr = read_sanitised_ftr_reg(SYS_ID_AA64DFR0_EL1);
-               u64 pfr = read_sanitised_ftr_reg(SYS_ID_AA64PFR0_EL1);
+               u64 dfr = IDREG(vcpu->kvm, SYS_ID_AA64DFR0_EL1);
+               u64 pfr = IDREG(vcpu->kvm, SYS_ID_AA64PFR0_EL1);
                u32 el3 = !!cpuid_feature_extract_unsigned_field(pfr, ID_AA64PFR0_EL1_EL3_SHIFT);
 
                p->regval = ((((dfr >> ID_AA64DFR0_EL1_WRPs_SHIFT) & 0xf) << 28) |