/* Capabilities which may differ depending on the accelerator. */
virQEMUCapsAccel kvm;
+ virQEMUCapsAccel hvf;
virQEMUCapsAccel tcg;
};
static bool
virQEMUCapsHaveAccel(virQEMUCaps *qemuCaps)
{
- return virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM);
+ return virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) ||
+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF);
}
{
if (type == VIR_DOMAIN_VIRT_KVM)
return "kvm";
+ else if (type == VIR_DOMAIN_VIRT_HVF)
+ return "hvf";
return "tcg";
}
{
if (type == VIR_DOMAIN_VIRT_KVM)
return &qemuCaps->kvm;
+ else if (type == VIR_DOMAIN_VIRT_HVF)
+ return &qemuCaps->hvf;
return &qemuCaps->tcg;
}
* take the set of machine types we probed first. */
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
accel = &qemuCaps->kvm;
+ else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
+ accel = &qemuCaps->hvf;
else
accel = &qemuCaps->tcg;
ret->cpuData = virCPUDataNewCopy(qemuCaps->cpuData);
if (virQEMUCapsAccelCopy(&ret->kvm, &qemuCaps->kvm) < 0 ||
+ virQEMUCapsAccelCopy(&ret->hvf, &qemuCaps->hvf) < 0 ||
virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0)
return NULL;
virSEVCapabilitiesFree(qemuCaps->sevCapabilities);
virQEMUCapsAccelClear(&qemuCaps->kvm);
+ virQEMUCapsAccelClear(&qemuCaps->hvf);
virQEMUCapsAccelClear(&qemuCaps->tcg);
}
virQEMUCapsGet(qemuCaps, QEMU_CAPS_TCG))
return true;
+ if (virtType == VIR_DOMAIN_VIRT_HVF &&
+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
+ return true;
+
if (virtType == VIR_DOMAIN_VIRT_KVM &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
return true;
virQEMUCapsHasMachines(virQEMUCaps *qemuCaps)
{
- return !!qemuCaps->kvm.nmachineTypes || !!qemuCaps->tcg.nmachineTypes;
+ return !!qemuCaps->kvm.nmachineTypes ||
+ !!qemuCaps->hvf.nmachineTypes ||
+ !!qemuCaps->tcg.nmachineTypes;
}
virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0) {
return -1;
}
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF) &&
+ virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_HVF) < 0) {
+ return -1;
+ }
if (virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0)
return -1;
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
+ virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HVF);
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
if (virXPathBoolean("boolean(./kvmSupportsNesting)", ctxt) > 0)
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM);
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
+ virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_HVF);
virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU);
for (i = 0; i < qemuCaps->ngicCapabilities; i++) {
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
return VIR_DOMAIN_VIRT_KVM;
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
+ return VIR_DOMAIN_VIRT_HVF;
+
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_TCG))
return VIR_DOMAIN_VIRT_QEMU;
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
+ virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HVF);
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
if (virQEMUCapsHaveAccel(qemuCaps)) {
virQEMUCapsStripMachineAliases(virQEMUCaps *qemuCaps)
{
virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_KVM);
+ virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_HVF);
virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_QEMU);
}