mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Fill in GIC capabilities
Take the GIC capabilities stored in a virQEMUCaps instance and update a virDomainCaps instance appropriately.
This commit is contained in:
parent
4e2d82f72b
commit
e087aa7545
@ -4082,6 +4082,60 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virQEMUCapsFillDomainFeatureGICCaps:
|
||||||
|
* @qemuCaps: QEMU capabilities
|
||||||
|
* @domCaps: domain capabilities
|
||||||
|
*
|
||||||
|
* Take the information about GIC capabilities that has been obtained
|
||||||
|
* using the 'query-gic-capabilities' QMP command and stored in @qemuCaps
|
||||||
|
* and convert it to a form suitable for @domCaps.
|
||||||
|
*
|
||||||
|
* @qemuCaps contains complete information about the GIC capabilities for
|
||||||
|
* the corresponding QEMU binary, stored as custom objects; @domCaps, on
|
||||||
|
* the other hand, should only contain information about the GIC versions
|
||||||
|
* available for the specific combination of architecture, machine type
|
||||||
|
* and virtualization type. Moreover, a common format is used to store
|
||||||
|
* information about enumerations in @domCaps, so further processing is
|
||||||
|
* required.
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, <0 on failure
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
virQEMUCapsFillDomainFeatureGICCaps(virQEMUCapsPtr qemuCaps,
|
||||||
|
virDomainCapsPtr domCaps)
|
||||||
|
{
|
||||||
|
virDomainCapsFeatureGICPtr gic = &domCaps->gic;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (domCaps->arch != VIR_ARCH_ARMV7L &&
|
||||||
|
domCaps->arch != VIR_ARCH_AARCH64)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (STRNEQ(domCaps->machine, "virt") &&
|
||||||
|
!STRPREFIX(domCaps->machine, "virt-"))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < qemuCaps->ngicCapabilities; i++) {
|
||||||
|
virGICCapabilityPtr cap = &qemuCaps->gicCapabilities[i];
|
||||||
|
|
||||||
|
if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM &&
|
||||||
|
!(cap->implementation & VIR_GIC_IMPLEMENTATION_KERNEL))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (domCaps->virttype == VIR_DOMAIN_VIRT_QEMU &&
|
||||||
|
!(cap->implementation & VIR_GIC_IMPLEMENTATION_EMULATED))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
gic->supported = true;
|
||||||
|
VIR_DOMAIN_CAPS_ENUM_SET(gic->version,
|
||||||
|
cap->version);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
|
virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
@ -4098,7 +4152,8 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
|
|||||||
if (virQEMUCapsFillDomainOSCaps(qemuCaps, os,
|
if (virQEMUCapsFillDomainOSCaps(qemuCaps, os,
|
||||||
loader, nloader) < 0 ||
|
loader, nloader) < 0 ||
|
||||||
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk) < 0 ||
|
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk) < 0 ||
|
||||||
virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0)
|
virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0 ||
|
||||||
|
virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user