target/loongarch: Enable paravirt ipi feature
The similiar with cpucfg register, paravirt ipi feature is set in function kvm_arch_put_registers(). Instead the paravirt feature can be enabled only once, it cannot be changed dynamically. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Bibo Mao <maobibo@loongson.cn>
This commit is contained in:
parent
620d9bd002
commit
2698cc7c99
1 changed files with 36 additions and 0 deletions
|
|
@ -83,6 +83,33 @@ static int kvm_set_stealtime(CPUState *cs)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int kvm_set_pv_features(CPUState *cs)
|
||||
{
|
||||
CPULoongArchState *env = cpu_env(cs);
|
||||
int err;
|
||||
uint64_t val;
|
||||
struct kvm_device_attr attr = {
|
||||
.group = KVM_LOONGARCH_VCPU_CPUCFG,
|
||||
.attr = CPUCFG_KVM_FEATURE,
|
||||
.addr = (uint64_t)&val,
|
||||
};
|
||||
|
||||
err = kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr);
|
||||
if (err) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
val = env->pv_features;
|
||||
err = kvm_vcpu_ioctl(cs, KVM_SET_DEVICE_ATTR, attr);
|
||||
if (err) {
|
||||
error_report("Fail to set pv feature "TARGET_FMT_lx " with error %s",
|
||||
val, strerror(errno));
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int kvm_loongarch_get_regs_core(CPUState *cs)
|
||||
{
|
||||
int ret = 0;
|
||||
|
|
@ -738,6 +765,7 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp)
|
|||
int kvm_arch_put_registers(CPUState *cs, int level, Error **errp)
|
||||
{
|
||||
int ret;
|
||||
static int once;
|
||||
|
||||
ret = kvm_loongarch_put_regs_core(cs);
|
||||
if (ret) {
|
||||
|
|
@ -764,6 +792,14 @@ int kvm_arch_put_registers(CPUState *cs, int level, Error **errp)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (!once) {
|
||||
ret = kvm_set_pv_features(cs);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
once = 1;
|
||||
}
|
||||
|
||||
if (level >= KVM_PUT_FULL_STATE) {
|
||||
/*
|
||||
* only KVM_PUT_FULL_STATE is required, kvm kernel will clear
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue