Message ID | 20240514072252.5657-6-sebott@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | KVM: arm64: emulation for CTR_EL0 | expand |
Hi Sebastian, On 5/14/24 09:22, Sebastian Ott wrote: > Invariant system id registers are populated with host values > at initialization time using their .reset function cb. get_##reg call read_sysreg(). I don't really understand the above sentence. Please could you elaborate? Thanks Eric > > These are currently called get_* which is usually used by > the functions implementing the .get_user callback. > > Change their function names to reset_* to reflect what they > are used for. > > Signed-off-by: Sebastian Ott <sebott@redhat.com> > --- > arch/arm64/kvm/sys_regs.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index 1b6ab483e21e..bae72a4ce72b 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -3795,8 +3795,8 @@ id_to_sys_reg_desc(struct kvm_vcpu *vcpu, u64 id, > */ > > #define FUNCTION_INVARIANT(reg) \ > - static u64 get_##reg(struct kvm_vcpu *v, \ > - const struct sys_reg_desc *r) \ > + static u64 reset_##reg(struct kvm_vcpu *v, \ > + const struct sys_reg_desc *r) \ > { \ > ((struct sys_reg_desc *)r)->val = read_sysreg(reg); \ > return ((struct sys_reg_desc *)r)->val; \ > @@ -3808,9 +3808,9 @@ FUNCTION_INVARIANT(aidr_el1) > > /* ->val is filled in by kvm_sys_reg_table_init() */ > static struct sys_reg_desc invariant_sys_regs[] __ro_after_init = { > - { SYS_DESC(SYS_MIDR_EL1), NULL, get_midr_el1 }, > - { SYS_DESC(SYS_REVIDR_EL1), NULL, get_revidr_el1 }, > - { SYS_DESC(SYS_AIDR_EL1), NULL, get_aidr_el1 }, > + { SYS_DESC(SYS_MIDR_EL1), NULL, reset_midr_el1 }, > + { SYS_DESC(SYS_REVIDR_EL1), NULL, reset_revidr_el1 }, > + { SYS_DESC(SYS_AIDR_EL1), NULL, reset_aidr_el1 }, > }; > > static int get_invariant_sys_reg(u64 id, u64 __user *uaddr)
Hej Eric, On Wed, 29 May 2024, Eric Auger wrote: > On 5/14/24 09:22, Sebastian Ott wrote: >> Invariant system id registers are populated with host values >> at initialization time using their .reset function cb. > get_##reg call read_sysreg(). I don't really understand the above > sentence. Please could you elaborate? > struct sys_reg_desc has 2 function pointers (among others): .reset and .get_user . The functions implementing these are usually named accordingly. For invariant registers only .reset is used but set to functions that are called get_* (which is usually used to implement .get_user). E.g.: invariant_sys_regs[0].reset == get_midr_el1 When trying to figure out this code I was confused by this, hence this patch.. Sebastian
Hi Sebastian, On 5/29/24 17:29, Sebastian Ott wrote: > Hej Eric, > > On Wed, 29 May 2024, Eric Auger wrote: >> On 5/14/24 09:22, Sebastian Ott wrote: >>> Invariant system id registers are populated with host values >>> at initialization time using their .reset function cb. >> get_##reg call read_sysreg(). I don't really understand the above >> sentence. Please could you elaborate? >> > > struct sys_reg_desc has 2 function pointers (among others): > .reset and .get_user . The functions implementing these are > usually named accordingly. For invariant registers only > .reset is used but set to functions that are called get_* > (which is usually used to implement .get_user). > > E.g.: invariant_sys_regs[0].reset == get_midr_el1 > > When trying to figure out this code I was confused by this, hence > this patch.. Ah OK, since ".reset=" was not used in the initilization I missed that. feel free to add my Reviewed-by: Eric Auger <eric.auger@redhat.com> Eric > > Sebastian >
diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 1b6ab483e21e..bae72a4ce72b 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -3795,8 +3795,8 @@ id_to_sys_reg_desc(struct kvm_vcpu *vcpu, u64 id, */ #define FUNCTION_INVARIANT(reg) \ - static u64 get_##reg(struct kvm_vcpu *v, \ - const struct sys_reg_desc *r) \ + static u64 reset_##reg(struct kvm_vcpu *v, \ + const struct sys_reg_desc *r) \ { \ ((struct sys_reg_desc *)r)->val = read_sysreg(reg); \ return ((struct sys_reg_desc *)r)->val; \ @@ -3808,9 +3808,9 @@ FUNCTION_INVARIANT(aidr_el1) /* ->val is filled in by kvm_sys_reg_table_init() */ static struct sys_reg_desc invariant_sys_regs[] __ro_after_init = { - { SYS_DESC(SYS_MIDR_EL1), NULL, get_midr_el1 }, - { SYS_DESC(SYS_REVIDR_EL1), NULL, get_revidr_el1 }, - { SYS_DESC(SYS_AIDR_EL1), NULL, get_aidr_el1 }, + { SYS_DESC(SYS_MIDR_EL1), NULL, reset_midr_el1 }, + { SYS_DESC(SYS_REVIDR_EL1), NULL, reset_revidr_el1 }, + { SYS_DESC(SYS_AIDR_EL1), NULL, reset_aidr_el1 }, }; static int get_invariant_sys_reg(u64 id, u64 __user *uaddr)
Invariant system id registers are populated with host values at initialization time using their .reset function cb. These are currently called get_* which is usually used by the functions implementing the .get_user callback. Change their function names to reset_* to reflect what they are used for. Signed-off-by: Sebastian Ott <sebott@redhat.com> --- arch/arm64/kvm/sys_regs.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)