Message ID | 20250220134907.554085-7-maz@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | KVM: arm64: NV userspace ABI | expand |
On 20-02-2025 07:18 pm, Marc Zyngier wrote: > Most of the ID_DESC() users use the same callbacks, with only a few > overrides. Consolidate the common callbacks in a macro, and consistently > use it everywhere. > > Whilst we're at it, give ID_UNALLOCATED() a .name string, so that we can > easily decode traces. > > Signed-off-by: Marc Zyngier <maz@kernel.org> > --- > arch/arm64/kvm/sys_regs.c | 28 ++++++++++------------------ > 1 file changed, 10 insertions(+), 18 deletions(-) > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 9f10dbd26e348..678213dc15513 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -2267,35 +2267,33 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, > * from userspace. > */ > > +#define ID_DESC_DEFAULT_CALLBACKS \ > + .access = access_id_reg, \ > + .get_user = get_id_reg, \ > + .set_user = set_id_reg, \ > + .visibility = id_visibility, \ > + .reset = kvm_read_sanitised_id_reg > + > #define ID_DESC(name) \ > SYS_DESC(SYS_##name), \ > - .access = access_id_reg, \ > - .get_user = get_id_reg \ > + ID_DESC_DEFAULT_CALLBACKS > > /* sys_reg_desc initialiser for known cpufeature ID registers */ > #define ID_SANITISED(name) { \ > ID_DESC(name), \ > - .set_user = set_id_reg, \ > - .visibility = id_visibility, \ > - .reset = kvm_read_sanitised_id_reg, \ > .val = 0, \ > } > > /* sys_reg_desc initialiser for known cpufeature ID registers */ > #define AA32_ID_SANITISED(name) { \ > ID_DESC(name), \ > - .set_user = set_id_reg, \ > .visibility = aa32_id_visibility, \ > - .reset = kvm_read_sanitised_id_reg, \ > .val = 0, \ > } > > /* sys_reg_desc initialiser for writable ID registers */ > #define ID_WRITABLE(name, mask) { \ > ID_DESC(name), \ > - .set_user = set_id_reg, \ > - .visibility = id_visibility, \ > - .reset = kvm_read_sanitised_id_reg, \ > .val = mask, \ > } > > @@ -2303,8 +2301,6 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, > #define ID_FILTERED(sysreg, name, mask) { \ > ID_DESC(sysreg), \ > .set_user = set_##name, \ > - .visibility = id_visibility, \ > - .reset = kvm_read_sanitised_id_reg, \ > .val = (mask), \ > } > > @@ -2314,12 +2310,10 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, > * (1 <= crm < 8, 0 <= Op2 < 8). > */ > #define ID_UNALLOCATED(crm, op2) { \ > + .name = "S3_0_0_" #crm "_" #op2, \ > Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2), \ > - .access = access_id_reg, \ > - .get_user = get_id_reg, \ > - .set_user = set_id_reg, \ > + ID_DESC_DEFAULT_CALLBACKS, \ > .visibility = raz_visibility, \ > - .reset = kvm_read_sanitised_id_reg, \ > .val = 0, \ > } > > @@ -2330,9 +2324,7 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, > */ > #define ID_HIDDEN(name) { \ > ID_DESC(name), \ > - .set_user = set_id_reg, \ > .visibility = raz_visibility, \ > - .reset = kvm_read_sanitised_id_reg, \ > .val = 0, \ > } > Reviewed-by: Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com>
diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 9f10dbd26e348..678213dc15513 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -2267,35 +2267,33 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, * from userspace. */ +#define ID_DESC_DEFAULT_CALLBACKS \ + .access = access_id_reg, \ + .get_user = get_id_reg, \ + .set_user = set_id_reg, \ + .visibility = id_visibility, \ + .reset = kvm_read_sanitised_id_reg + #define ID_DESC(name) \ SYS_DESC(SYS_##name), \ - .access = access_id_reg, \ - .get_user = get_id_reg \ + ID_DESC_DEFAULT_CALLBACKS /* sys_reg_desc initialiser for known cpufeature ID registers */ #define ID_SANITISED(name) { \ ID_DESC(name), \ - .set_user = set_id_reg, \ - .visibility = id_visibility, \ - .reset = kvm_read_sanitised_id_reg, \ .val = 0, \ } /* sys_reg_desc initialiser for known cpufeature ID registers */ #define AA32_ID_SANITISED(name) { \ ID_DESC(name), \ - .set_user = set_id_reg, \ .visibility = aa32_id_visibility, \ - .reset = kvm_read_sanitised_id_reg, \ .val = 0, \ } /* sys_reg_desc initialiser for writable ID registers */ #define ID_WRITABLE(name, mask) { \ ID_DESC(name), \ - .set_user = set_id_reg, \ - .visibility = id_visibility, \ - .reset = kvm_read_sanitised_id_reg, \ .val = mask, \ } @@ -2303,8 +2301,6 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, #define ID_FILTERED(sysreg, name, mask) { \ ID_DESC(sysreg), \ .set_user = set_##name, \ - .visibility = id_visibility, \ - .reset = kvm_read_sanitised_id_reg, \ .val = (mask), \ } @@ -2314,12 +2310,10 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, * (1 <= crm < 8, 0 <= Op2 < 8). */ #define ID_UNALLOCATED(crm, op2) { \ + .name = "S3_0_0_" #crm "_" #op2, \ Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2), \ - .access = access_id_reg, \ - .get_user = get_id_reg, \ - .set_user = set_id_reg, \ + ID_DESC_DEFAULT_CALLBACKS, \ .visibility = raz_visibility, \ - .reset = kvm_read_sanitised_id_reg, \ .val = 0, \ } @@ -2330,9 +2324,7 @@ static bool bad_redir_trap(struct kvm_vcpu *vcpu, */ #define ID_HIDDEN(name) { \ ID_DESC(name), \ - .set_user = set_id_reg, \ .visibility = raz_visibility, \ - .reset = kvm_read_sanitised_id_reg, \ .val = 0, \ }
Most of the ID_DESC() users use the same callbacks, with only a few overrides. Consolidate the common callbacks in a macro, and consistently use it everywhere. Whilst we're at it, give ID_UNALLOCATED() a .name string, so that we can easily decode traces. Signed-off-by: Marc Zyngier <maz@kernel.org> --- arch/arm64/kvm/sys_regs.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-)