Message ID | 20211120074644.729-4-jiangyifei@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add riscv kvm accel support | expand |
On 11/20/21 8:46 AM, Yifei Jiang wrote: > + 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_mxl |= isa; This doesn't look right. I'm sure you meant env->misa_ext = isa; r~
> -----Original Message----- > From: Richard Henderson [mailto:richard.henderson@linaro.org] > Sent: Sunday, November 21, 2021 6:19 AM > To: Jiangyifei <jiangyifei@huawei.com>; qemu-devel@nongnu.org; > qemu-riscv@nongnu.org > Cc: bin.meng@windriver.com; limingwang (A) <limingwang@huawei.com>; > kvm@vger.kernel.org; libvir-list@redhat.com; anup.patel@wdc.com; wanbo (G) > <wanbo13@huawei.com>; Alistair Francis <alistair.francis@wdc.com>; > kvm-riscv@lists.infradead.org; Wanghaibin (D) > <wanghaibin.wang@huawei.com>; palmer@dabbelt.com; Fanliang (EulerOS) > <fanliang@huawei.com>; Wubin (H) <wu.wubin@huawei.com> > Subject: Re: [PATCH v1 03/12] target/riscv: Implement function > kvm_arch_init_vcpu > > On 11/20/21 8:46 AM, Yifei Jiang wrote: > > + 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_mxl |= isa; > > This doesn't look right. > I'm sure you meant > > env->misa_ext = isa; > > > r~ Thanks, it will be modified in the next series. Yifei
diff --git a/target/riscv/kvm.c b/target/riscv/kvm.c index 687dd4b621..9f9692fb9e 100644 --- a/target/riscv/kvm.c +++ b/target/riscv/kvm.c @@ -38,6 +38,23 @@ #include "qemu/log.h" #include "hw/loader.h" +static uint64_t kvm_riscv_reg_id(CPURISCVState *env, uint64_t type, uint64_t idx) +{ + uint64_t id = KVM_REG_RISCV | type | idx; + + switch (riscv_cpu_mxl(env)) { + case MXL_RV32: + id |= KVM_REG_SIZE_U32; + break; + case MXL_RV64: + id |= KVM_REG_SIZE_U64; + break; + default: + g_assert_not_reached(); + } + return id; +} + const KVMCapabilityInfo kvm_arch_required_capabilities[] = { KVM_CAP_LAST_INFO }; @@ -79,7 +96,20 @@ void kvm_arch_init_irq_routing(KVMState *s) int kvm_arch_init_vcpu(CPUState *cs) { - return 0; + int ret = 0; + target_ulong isa; + RISCVCPU *cpu = RISCV_CPU(cs); + CPURISCVState *env = &cpu->env; + uint64_t id; + + 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_mxl |= isa; + + return ret; } int kvm_arch_msi_data_to_gsi(uint32_t data)