Hi Vijay, On 23/11/2016 14:01, vijay.kilari@xxxxxxxxx wrote: > From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxx> > > In order to implement vGICv3 CPU interface access, we will need to perform > table lookup of system registers. We would need both index_to_params() and > find_reg() exported for that purpose, but instead we export a single > function which combines them both. > > Signed-off-by: Pavel Fedin <p.fedin@xxxxxxxxxxx> > Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxx> > Reviewed-by: Andre Przywara <andre.przywara@xxxxxxx> > Acked-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> > --- > arch/arm64/kvm/sys_regs.c | 22 +++++++++++++++------- > arch/arm64/kvm/sys_regs.h | 4 ++++ > 2 files changed, 19 insertions(+), 7 deletions(-) > > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c > index f302fdb..1330d4c 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -1789,6 +1789,17 @@ static bool index_to_params(u64 id, struct sys_reg_params *params) > } > } > > +const struct sys_reg_desc *find_reg_by_id(u64 id, > + struct sys_reg_params *params, > + const struct sys_reg_desc table[], > + unsigned int num) > +{ > + if (!index_to_params(id, params)) > + return NULL; > + > + return find_reg(params, table, num); > +} > + Can't you use find_reg_by_id in index_to_sys_reg_desc too? Besides Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> Thanks Eric > /* Decode an index value, and find the sys_reg_desc entry. */ > static const struct sys_reg_desc *index_to_sys_reg_desc(struct kvm_vcpu *vcpu, > u64 id) > @@ -1912,10 +1923,8 @@ static int get_invariant_sys_reg(u64 id, void __user *uaddr) > struct sys_reg_params params; > const struct sys_reg_desc *r; > > - if (!index_to_params(id, ¶ms)) > - return -ENOENT; > - > - r = find_reg(¶ms, invariant_sys_regs, ARRAY_SIZE(invariant_sys_regs)); > + r = find_reg_by_id(id, ¶ms, invariant_sys_regs, > + ARRAY_SIZE(invariant_sys_regs)); > if (!r) > return -ENOENT; > > @@ -1929,9 +1938,8 @@ static int set_invariant_sys_reg(u64 id, void __user *uaddr) > int err; > u64 val = 0; /* Make sure high bits are 0 for 32-bit regs */ > > - if (!index_to_params(id, ¶ms)) > - return -ENOENT; > - r = find_reg(¶ms, invariant_sys_regs, ARRAY_SIZE(invariant_sys_regs)); > + r = find_reg_by_id(id, ¶ms, invariant_sys_regs, > + ARRAY_SIZE(invariant_sys_regs)); > if (!r) > return -ENOENT; > > diff --git a/arch/arm64/kvm/sys_regs.h b/arch/arm64/kvm/sys_regs.h > index dbbb01c..9c6ffd0 100644 > --- a/arch/arm64/kvm/sys_regs.h > +++ b/arch/arm64/kvm/sys_regs.h > @@ -136,6 +136,10 @@ static inline int cmp_sys_reg(const struct sys_reg_desc *i1, > return i1->Op2 - i2->Op2; > } > > +const struct sys_reg_desc *find_reg_by_id(u64 id, > + struct sys_reg_params *params, > + const struct sys_reg_desc table[], > + unsigned int num); > > #define Op0(_x) .Op0 = _x > #define Op1(_x) .Op1 = _x > _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm