/* Enable all PV features by default */
kvm->arch.pv_features = BIT(KVM_FEATURE_IPI); if (kvm_pvtime_supported())
kvm->arch.pv_features |= BIT(KVM_FEATURE_STEAL_TIME);
int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
{ int r;
switch (ext) { case KVM_CAP_IRQCHIP: case KVM_CAP_ONE_REG: case KVM_CAP_ENABLE_CAP: case KVM_CAP_READONLY_MEM: case KVM_CAP_SYNC_MMU: case KVM_CAP_IMMEDIATE_EXIT: case KVM_CAP_IOEVENTFD: case KVM_CAP_MP_STATE: case KVM_CAP_SET_GUEST_DEBUG:
r = 1; break; case KVM_CAP_NR_VCPUS:
r = num_online_cpus(); break; case KVM_CAP_MAX_VCPUS:
r = KVM_MAX_VCPUS; break; case KVM_CAP_MAX_VCPU_ID:
r = KVM_MAX_VCPU_IDS; break; case KVM_CAP_NR_MEMSLOTS:
r = KVM_USER_MEM_SLOTS; break; default:
r = 0; break;
}
return r;
}
staticint kvm_vm_feature_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
{ switch (attr->attr) { case KVM_LOONGARCH_VM_FEAT_LSX: if (cpu_has_lsx) return0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_LASX: if (cpu_has_lasx) return0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_X86BT: if (cpu_has_lbt_x86) return0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_ARMBT: if (cpu_has_lbt_arm) return0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_MIPSBT: if (cpu_has_lbt_mips) return0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_PMU: if (cpu_has_pmp) return0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_PV_IPI: return0; case KVM_LOONGARCH_VM_FEAT_PV_STEALTIME: if (kvm_pvtime_supported()) return0; return -ENXIO; default: return -ENXIO;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.