[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 10/18] target/riscv/kvm.c: init 'misa_ext_mask' with scrat
From: |
Alistair Francis |
Subject: |
Re: [PATCH v2 10/18] target/riscv/kvm.c: init 'misa_ext_mask' with scratch CPU |
Date: |
Thu, 22 Jun 2023 11:34:27 +1000 |
On Wed, Jun 14, 2023 at 7:00 AM Daniel Henrique Barboza
<dbarboza@ventanamicro.com> wrote:
>
> At this moment we're retrieving env->misa_ext during
> kvm_arch_init_cpu(), leaving env->misa_ext_mask behind.
>
> We want to set env->misa_ext_mask, and we want to set it as early as
> possible. The reason is that we're going to use it in the validation
> process of the KVM MISA properties we're going to add next. Setting it
> during arch_init_cpu() is too late for user validation.
>
> Move the code to a new helper that is going to be called during init()
> time, via kvm_riscv_init_user_properties(), like we're already doing for
> the machine ID properties. Set both misa_ext and misa_ext_mask to the
> same value retrieved by the 'isa' config reg.
>
> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Alistair
> ---
> target/riscv/kvm.c | 34 +++++++++++++++++++++++-----------
> 1 file changed, 23 insertions(+), 11 deletions(-)
>
> diff --git a/target/riscv/kvm.c b/target/riscv/kvm.c
> index 602727cdfd..4d0808cb9a 100644
> --- a/target/riscv/kvm.c
> +++ b/target/riscv/kvm.c
> @@ -396,6 +396,28 @@ static void kvm_riscv_init_machine_ids(RISCVCPU *cpu,
> KVMScratchCPU *kvmcpu)
> }
> }
>
> +static void kvm_riscv_init_misa_ext_mask(RISCVCPU *cpu,
> + KVMScratchCPU *kvmcpu)
> +{
> + CPURISCVState *env = &cpu->env;
> + struct kvm_one_reg reg;
> + int ret;
> +
> + reg.id = kvm_riscv_reg_id(env, KVM_REG_RISCV_CONFIG,
> + KVM_REG_RISCV_CONFIG_REG(isa));
> + reg.addr = (uint64_t)&env->misa_ext_mask;
> + ret = ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, ®);
> +
> + if (ret) {
> + error_report("Unable to fetch ISA register from KVM, "
> + "error %d", ret);
> + kvm_riscv_destroy_scratch_vcpu(kvmcpu);
> + exit(EXIT_FAILURE);
> + }
> +
> + env->misa_ext = env->misa_ext_mask;
> +}
> +
> void kvm_riscv_init_user_properties(Object *cpu_obj)
> {
> RISCVCPU *cpu = RISCV_CPU(cpu_obj);
> @@ -406,6 +428,7 @@ void kvm_riscv_init_user_properties(Object *cpu_obj)
> }
>
> kvm_riscv_init_machine_ids(cpu, &kvmcpu);
> + kvm_riscv_init_misa_ext_mask(cpu, &kvmcpu);
>
> kvm_riscv_destroy_scratch_vcpu(&kvmcpu);
> }
> @@ -525,21 +548,10 @@ static int kvm_vcpu_set_machine_ids(RISCVCPU *cpu,
> CPUState *cs)
> int kvm_arch_init_vcpu(CPUState *cs)
> {
> int ret = 0;
> - target_ulong isa;
> RISCVCPU *cpu = RISCV_CPU(cs);
> - CPURISCVState *env = &cpu->env;
> - uint64_t id;
>
> qemu_add_vm_change_state_handler(kvm_riscv_vm_state_change, cs);
>
> - id = kvm_riscv_reg_id(env, KVM_REG_RISCV_CONFIG,
> - KVM_REG_RISCV_CONFIG_REG(isa));
> - ret = kvm_get_one_reg(cs, id, &isa);
> - if (ret) {
> - return ret;
> - }
> - env->misa_ext = isa;
> -
> if (!object_dynamic_cast(OBJECT(cpu), TYPE_RISCV_CPU_HOST)) {
> ret = kvm_vcpu_set_machine_ids(cpu, cs);
> }
> --
> 2.40.1
>
>
- Re: [PATCH v2 04/18] target/riscv/cpu.c: restrict 'mimpid' value, (continued)
- [PATCH v2 05/18] target/riscv/cpu.c: restrict 'marchid' value, Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 06/18] target/riscv: use KVM scratch CPUs to init KVM properties, Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 07/18] target/riscv: read marchid/mimpid in kvm_riscv_init_machine_ids(), Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 08/18] target/riscv: handle mvendorid/marchid/mimpid for KVM CPUs, Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 09/18] linux-headers: Update to v6.4-rc1, Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 10/18] target/riscv/kvm.c: init 'misa_ext_mask' with scratch CPU, Daniel Henrique Barboza, 2023/06/13
- Re: [PATCH v2 10/18] target/riscv/kvm.c: init 'misa_ext_mask' with scratch CPU,
Alistair Francis <=
- [PATCH v2 11/18] target/riscv/cpu: add misa_ext_infos[], Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 12/18] target/riscv: add KVM specific MISA properties, Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 13/18] target/riscv/kvm.c: update KVM MISA bits, Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 14/18] target/riscv/kvm.c: add multi-letter extension KVM properties, Daniel Henrique Barboza, 2023/06/13
- [PATCH v2 15/18] target/riscv: make riscv_isa_string_ext() KVM compatible, Daniel Henrique Barboza, 2023/06/13