target/loongarch: Add kvm steal time feature detection
Paravirt steal time feature is OnOffAuto type, feature detection is added to check whether it is supported on KVM host. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Bibo Mao <maobibo@loongson.cn>
This commit is contained in:
parent
610babce1e
commit
954cc5c311
@ -288,6 +288,7 @@ enum loongarch_features {
|
|||||||
LOONGARCH_FEATURE_LBT, /* loongson binary translation extension */
|
LOONGARCH_FEATURE_LBT, /* loongson binary translation extension */
|
||||||
LOONGARCH_FEATURE_PMU,
|
LOONGARCH_FEATURE_PMU,
|
||||||
LOONGARCH_FEATURE_PV_IPI,
|
LOONGARCH_FEATURE_PV_IPI,
|
||||||
|
LOONGARCH_FEATURE_STEALTIME,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct LoongArchBT {
|
typedef struct LoongArchBT {
|
||||||
|
@ -924,6 +924,12 @@ static bool kvm_feature_supported(CPUState *cs, enum loongarch_features feature)
|
|||||||
ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr);
|
ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr);
|
||||||
return (ret == 0);
|
return (ret == 0);
|
||||||
|
|
||||||
|
case LOONGARCH_FEATURE_STEALTIME:
|
||||||
|
attr.group = KVM_LOONGARCH_VM_FEAT_CTRL;
|
||||||
|
attr.attr = KVM_LOONGARCH_VM_FEAT_PV_STEALTIME;
|
||||||
|
ret = kvm_vm_ioctl(kvm_state, KVM_HAS_DEVICE_ATTR, &attr);
|
||||||
|
return (ret == 0);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1042,6 +1048,20 @@ static int kvm_cpu_check_pv_features(CPUState *cs, Error **errp)
|
|||||||
env->pv_features |= BIT(KVM_FEATURE_IPI);
|
env->pv_features |= BIT(KVM_FEATURE_IPI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kvm_supported = kvm_feature_supported(cs, LOONGARCH_FEATURE_STEALTIME);
|
||||||
|
if (cpu->kvm_steal_time == ON_OFF_AUTO_ON) {
|
||||||
|
if (!kvm_supported) {
|
||||||
|
error_setg(errp, "'kvm stealtime' feature not supported by KVM host");
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
} else if (cpu->kvm_steal_time != ON_OFF_AUTO_AUTO) {
|
||||||
|
kvm_supported = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kvm_supported) {
|
||||||
|
env->pv_features |= BIT(KVM_FEATURE_STEAL_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user