Skip to content

Commit c70a402

Browse files
Marc Zyngieroupton
authored andcommitted
KVM: arm64: Don't advertise ICH_*_EL2 registers through GET_ONE_REG
It appears that exposing the GICv3 EL2 registers through the usual sysreg interface is not consistent with the way we expose the EL1 registers. The latter are exposed via the GICv3 device interface instead, and there is no reason why the EL2 registers should get a different treatement. Hide the registers from userspace until the GICv3 code grows the required infrastructure. Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20250714122634.3334816-3-maz@kernel.org Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
1 parent 1095b32 commit c70a402

1 file changed

Lines changed: 37 additions & 27 deletions

File tree

arch/arm64/kvm/sys_regs.c

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,12 @@ static u64 reset_mpidr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r)
772772
return mpidr;
773773
}
774774

775+
static unsigned int hidden_visibility(const struct kvm_vcpu *vcpu,
776+
const struct sys_reg_desc *r)
777+
{
778+
return REG_HIDDEN;
779+
}
780+
775781
static unsigned int pmu_visibility(const struct kvm_vcpu *vcpu,
776782
const struct sys_reg_desc *r)
777783
{
@@ -2324,6 +2330,10 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu,
23242330
EL2_REG_FILTERED(name, acc, rst, v, el2_visibility)
23252331

23262332
#define EL2_REG_VNCR(name, rst, v) EL2_REG(name, bad_vncr_trap, rst, v)
2333+
#define EL2_REG_VNCR_FILT(name, vis) \
2334+
EL2_REG_FILTERED(name, bad_vncr_trap, reset_val, 0, vis)
2335+
#define EL2_REG_VNCR_GICv3(name) \
2336+
EL2_REG_VNCR_FILT(name, hidden_visibility)
23272337
#define EL2_REG_REDIR(name, rst, v) EL2_REG(name, bad_redir_trap, rst, v)
23282338

23292339
/*
@@ -3372,40 +3382,40 @@ static const struct sys_reg_desc sys_reg_descs[] = {
33723382
{ SYS_DESC(SYS_RVBAR_EL2), undef_access },
33733383
{ SYS_DESC(SYS_RMR_EL2), undef_access },
33743384

3375-
EL2_REG_VNCR(ICH_AP0R0_EL2, reset_val, 0),
3376-
EL2_REG_VNCR(ICH_AP0R1_EL2, reset_val, 0),
3377-
EL2_REG_VNCR(ICH_AP0R2_EL2, reset_val, 0),
3378-
EL2_REG_VNCR(ICH_AP0R3_EL2, reset_val, 0),
3379-
EL2_REG_VNCR(ICH_AP1R0_EL2, reset_val, 0),
3380-
EL2_REG_VNCR(ICH_AP1R1_EL2, reset_val, 0),
3381-
EL2_REG_VNCR(ICH_AP1R2_EL2, reset_val, 0),
3382-
EL2_REG_VNCR(ICH_AP1R3_EL2, reset_val, 0),
3385+
EL2_REG_VNCR_GICv3(ICH_AP0R0_EL2),
3386+
EL2_REG_VNCR_GICv3(ICH_AP0R1_EL2),
3387+
EL2_REG_VNCR_GICv3(ICH_AP0R2_EL2),
3388+
EL2_REG_VNCR_GICv3(ICH_AP0R3_EL2),
3389+
EL2_REG_VNCR_GICv3(ICH_AP1R0_EL2),
3390+
EL2_REG_VNCR_GICv3(ICH_AP1R1_EL2),
3391+
EL2_REG_VNCR_GICv3(ICH_AP1R2_EL2),
3392+
EL2_REG_VNCR_GICv3(ICH_AP1R3_EL2),
33833393

33843394
{ SYS_DESC(SYS_ICC_SRE_EL2), access_gic_sre },
33853395

3386-
EL2_REG_VNCR(ICH_HCR_EL2, reset_val, 0),
3396+
EL2_REG_VNCR_GICv3(ICH_HCR_EL2),
33873397
{ SYS_DESC(SYS_ICH_VTR_EL2), access_gic_vtr },
33883398
{ SYS_DESC(SYS_ICH_MISR_EL2), access_gic_misr },
33893399
{ SYS_DESC(SYS_ICH_EISR_EL2), access_gic_eisr },
33903400
{ SYS_DESC(SYS_ICH_ELRSR_EL2), access_gic_elrsr },
3391-
EL2_REG_VNCR(ICH_VMCR_EL2, reset_val, 0),
3392-
3393-
EL2_REG_VNCR(ICH_LR0_EL2, reset_val, 0),
3394-
EL2_REG_VNCR(ICH_LR1_EL2, reset_val, 0),
3395-
EL2_REG_VNCR(ICH_LR2_EL2, reset_val, 0),
3396-
EL2_REG_VNCR(ICH_LR3_EL2, reset_val, 0),
3397-
EL2_REG_VNCR(ICH_LR4_EL2, reset_val, 0),
3398-
EL2_REG_VNCR(ICH_LR5_EL2, reset_val, 0),
3399-
EL2_REG_VNCR(ICH_LR6_EL2, reset_val, 0),
3400-
EL2_REG_VNCR(ICH_LR7_EL2, reset_val, 0),
3401-
EL2_REG_VNCR(ICH_LR8_EL2, reset_val, 0),
3402-
EL2_REG_VNCR(ICH_LR9_EL2, reset_val, 0),
3403-
EL2_REG_VNCR(ICH_LR10_EL2, reset_val, 0),
3404-
EL2_REG_VNCR(ICH_LR11_EL2, reset_val, 0),
3405-
EL2_REG_VNCR(ICH_LR12_EL2, reset_val, 0),
3406-
EL2_REG_VNCR(ICH_LR13_EL2, reset_val, 0),
3407-
EL2_REG_VNCR(ICH_LR14_EL2, reset_val, 0),
3408-
EL2_REG_VNCR(ICH_LR15_EL2, reset_val, 0),
3401+
EL2_REG_VNCR_GICv3(ICH_VMCR_EL2),
3402+
3403+
EL2_REG_VNCR_GICv3(ICH_LR0_EL2),
3404+
EL2_REG_VNCR_GICv3(ICH_LR1_EL2),
3405+
EL2_REG_VNCR_GICv3(ICH_LR2_EL2),
3406+
EL2_REG_VNCR_GICv3(ICH_LR3_EL2),
3407+
EL2_REG_VNCR_GICv3(ICH_LR4_EL2),
3408+
EL2_REG_VNCR_GICv3(ICH_LR5_EL2),
3409+
EL2_REG_VNCR_GICv3(ICH_LR6_EL2),
3410+
EL2_REG_VNCR_GICv3(ICH_LR7_EL2),
3411+
EL2_REG_VNCR_GICv3(ICH_LR8_EL2),
3412+
EL2_REG_VNCR_GICv3(ICH_LR9_EL2),
3413+
EL2_REG_VNCR_GICv3(ICH_LR10_EL2),
3414+
EL2_REG_VNCR_GICv3(ICH_LR11_EL2),
3415+
EL2_REG_VNCR_GICv3(ICH_LR12_EL2),
3416+
EL2_REG_VNCR_GICv3(ICH_LR13_EL2),
3417+
EL2_REG_VNCR_GICv3(ICH_LR14_EL2),
3418+
EL2_REG_VNCR_GICv3(ICH_LR15_EL2),
34093419

34103420
EL2_REG(CONTEXTIDR_EL2, access_rw, reset_val, 0),
34113421
EL2_REG(TPIDR_EL2, access_rw, reset_val, 0),

0 commit comments

Comments
 (0)