[PATCH v5 5/6] KVM: arm64: Introduce ID register specific descriptor
Marc Zyngier
maz at kernel.org
Mon Apr 3 05:27:24 PDT 2023
On Sun, 02 Apr 2023 19:37:34 +0100,
Jing Zhang <jingzhangos at google.com> wrote:
>
> Introduce an ID feature register specific descriptor to include ID
> register specific fields and callbacks besides its corresponding
> general system register descriptor.
>
> No functional change intended.
>
> Co-developed-by: Reiji Watanabe <reijiw at google.com>
> Signed-off-by: Reiji Watanabe <reijiw at google.com>
> Signed-off-by: Jing Zhang <jingzhangos at google.com>
> ---
> arch/arm64/kvm/id_regs.c | 233 ++++++++++++++++++++++++++++----------
> arch/arm64/kvm/sys_regs.c | 2 +-
> arch/arm64/kvm/sys_regs.h | 1 +
> 3 files changed, 178 insertions(+), 58 deletions(-)
>
> diff --git a/arch/arm64/kvm/id_regs.c b/arch/arm64/kvm/id_regs.c
> index e92eacb0ad32..af86001e2686 100644
> --- a/arch/arm64/kvm/id_regs.c
> +++ b/arch/arm64/kvm/id_regs.c
> @@ -18,6 +18,27 @@
>
> #include "sys_regs.h"
>
> +struct id_reg_desc {
> + const struct sys_reg_desc reg_desc;
> + /*
> + * ftr_bits points to the feature bits array defined in cpufeature.c for
> + * writable CPU ID feature register.
> + */
> + const struct arm64_ftr_bits *ftr_bits;
Why do we need to keep this around? we already have all the required
infrastructure to lookup a full arm64_ftr_reg. So why the added stuff?
> + /*
> + * Only bits with 1 are writable from userspace.
> + * This mask might not be necessary in the future whenever all ID
> + * registers are enabled as writable from userspace.
> + */
> + const u64 writable_mask;
> + /*
> + * This function returns the KVM sanitised register value.
> + * The value would be the same as the host kernel sanitised value if
> + * there is no KVM sanitisation for this id register.
> + */
> + u64 (*read_kvm_sanitised_reg)(const struct id_reg_desc *idr);
Why can't this function return both the required value and a mask?
Why can't it live in the sys_reg_desc structure?
Frankly, I don't see a good reason to have this wrapper structure
which makes things pointlessly complicated and prevent code sharing
with the rest of the infrastructure.
M.
--
Without deviation from the norm, progress is not possible.
More information about the linux-arm-kernel
mailing list