/* 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);
/* * cpu_vabits means user address space only (a half of total). * GPA size of VM is the same with the size of user address space.
*/
kvm->arch.gpa_size = BIT(cpu_vabits);
kvm->arch.root_level = CONFIG_PGTABLE_LEVELS - 1;
kvm->arch.invalid_ptes[0] = 0;
kvm->arch.invalid_ptes[1] = (unsignedlong)invalid_pte_table; #if CONFIG_PGTABLE_LEVELS > 2
kvm->arch.invalid_ptes[2] = (unsignedlong)invalid_pmd_table; #endif #if CONFIG_PGTABLE_LEVELS > 3
kvm->arch.invalid_ptes[3] = (unsignedlong)invalid_pud_table; #endif for (i = 0; i <= kvm->arch.root_level; i++)
kvm->arch.pte_shifts[i] = PAGE_SHIFT + i * (PAGE_SHIFT - 3);
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) return 0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_LASX: if (cpu_has_lasx) return 0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_X86BT: if (cpu_has_lbt_x86) return 0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_ARMBT: if (cpu_has_lbt_arm) return 0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_MIPSBT: if (cpu_has_lbt_mips) return 0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_PMU: if (cpu_has_pmp) return 0; return -ENXIO; case KVM_LOONGARCH_VM_FEAT_PV_IPI: return 0; case KVM_LOONGARCH_VM_FEAT_PV_STEALTIME: if (kvm_pvtime_supported()) return 0; 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.