Commit 989fce63 authored by Marc Zyngier's avatar Marc Zyngier

KVM: arm64: Simplify handling of CNTKCTL_EL12

We go trough a great deal of effort to map CNTKCTL_EL12 to CNTKCTL_EL1
while hidding this mapping from userspace via a special visibility helper.

However, it would be far simpler to just provide an accessor doing the
mapping job, removing the need for a visibility helper.

With that done, we can also remove the EL12_REG() macro which serves
no purpose.
Reviewed-by: default avatarOliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20240904082419.1982402-2-maz@kernel.orgSigned-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent 7c626ce4
...@@ -2095,15 +2095,6 @@ static unsigned int hidden_user_visibility(const struct kvm_vcpu *vcpu, ...@@ -2095,15 +2095,6 @@ static unsigned int hidden_user_visibility(const struct kvm_vcpu *vcpu,
return REG_HIDDEN_USER; return REG_HIDDEN_USER;
} }
#define EL12_REG(name, acc, rst, v) { \
SYS_DESC(SYS_##name##_EL12), \
.access = acc, \
.reset = rst, \
.reg = name##_EL1, \
.val = v, \
.visibility = hidden_user_visibility, \
}
/* /*
* Since reset() callback and field val are not used for idregs, they will be * Since reset() callback and field val are not used for idregs, they will be
* used for specific purposes for idregs. * used for specific purposes for idregs.
...@@ -2211,6 +2202,18 @@ static bool access_spsr(struct kvm_vcpu *vcpu, ...@@ -2211,6 +2202,18 @@ static bool access_spsr(struct kvm_vcpu *vcpu,
return true; return true;
} }
static bool access_cntkctl_el12(struct kvm_vcpu *vcpu,
struct sys_reg_params *p,
const struct sys_reg_desc *r)
{
if (p->is_write)
__vcpu_sys_reg(vcpu, CNTKCTL_EL1) = p->regval;
else
p->regval = __vcpu_sys_reg(vcpu, CNTKCTL_EL1);
return true;
}
static u64 reset_hcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) static u64 reset_hcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r)
{ {
u64 val = r->val; u64 val = r->val;
...@@ -2798,7 +2801,7 @@ static const struct sys_reg_desc sys_reg_descs[] = { ...@@ -2798,7 +2801,7 @@ static const struct sys_reg_desc sys_reg_descs[] = {
EL2_REG_VNCR(CNTVOFF_EL2, reset_val, 0), EL2_REG_VNCR(CNTVOFF_EL2, reset_val, 0),
EL2_REG(CNTHCTL_EL2, access_rw, reset_val, 0), EL2_REG(CNTHCTL_EL2, access_rw, reset_val, 0),
EL12_REG(CNTKCTL, access_rw, reset_val, 0), { SYS_DESC(SYS_CNTKCTL_EL12), access_cntkctl_el12 },
EL2_REG(SP_EL2, NULL, reset_unknown, 0), EL2_REG(SP_EL2, NULL, reset_unknown, 0),
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment