On 04/09/15 13:40, Pavel Fedin wrote: > 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> Reviewed-by: Andre Przywara <andre.przywara@xxxxxxx> > --- > 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 fe6b517..21403fa 100644 > --- a/arch/arm64/kvm/sys_regs.c > +++ b/arch/arm64/kvm/sys_regs.c > @@ -1283,6 +1283,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); > +} > + > /* 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) > @@ -1410,10 +1421,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; > > @@ -1427,9 +1436,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 3267518..0646108 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 > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html