mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 14:15:28 +00:00
qemu: Add virQEMUCapsSupportsGICVersion()
This utility function extracts some of the logic from virQEMUCapsFillDomainFeatureGICCaps() so that it can be used in a different context.
This commit is contained in:
parent
f2b4609723
commit
58f0152f3b
@ -4233,6 +4233,44 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virQEMUCapsSupportsGICVersion:
|
||||
* @qemuCaps: QEMU capabilities
|
||||
* @virtType: domain type
|
||||
* @version: GIC version
|
||||
*
|
||||
* Checks the QEMU binary with capabilities @qemuCaps supports a specific
|
||||
* GIC version for a domain of type @virtType.
|
||||
*
|
||||
* Returns: true if the binary supports the requested GIC version, false
|
||||
* otherwise
|
||||
*/
|
||||
bool
|
||||
virQEMUCapsSupportsGICVersion(virQEMUCapsPtr qemuCaps,
|
||||
virDomainVirtType virtType,
|
||||
virGICVersion version)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < qemuCaps->ngicCapabilities; i++) {
|
||||
virGICCapabilityPtr cap = &(qemuCaps->gicCapabilities[i]);
|
||||
|
||||
if (cap->version != version)
|
||||
continue;
|
||||
|
||||
if (virtType == VIR_DOMAIN_VIRT_KVM &&
|
||||
cap->implementation & VIR_GIC_IMPLEMENTATION_KERNEL)
|
||||
return true;
|
||||
|
||||
if (virtType == VIR_DOMAIN_VIRT_QEMU &&
|
||||
cap->implementation & VIR_GIC_IMPLEMENTATION_EMULATED)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virQEMUCapsFillDomainFeatureGICCaps:
|
||||
* @qemuCaps: QEMU capabilities
|
||||
@ -4257,7 +4295,7 @@ virQEMUCapsFillDomainFeatureGICCaps(virQEMUCapsPtr qemuCaps,
|
||||
virDomainCapsPtr domCaps)
|
||||
{
|
||||
virDomainCapsFeatureGICPtr gic = &domCaps->gic;
|
||||
size_t i;
|
||||
virGICVersion version;
|
||||
|
||||
if (domCaps->arch != VIR_ARCH_ARMV7L &&
|
||||
domCaps->arch != VIR_ARCH_AARCH64)
|
||||
@ -4267,20 +4305,17 @@ virQEMUCapsFillDomainFeatureGICCaps(virQEMUCapsPtr qemuCaps,
|
||||
!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))
|
||||
for (version = VIR_GIC_VERSION_LAST - 1;
|
||||
version > VIR_GIC_VERSION_NONE;
|
||||
version--) {
|
||||
if (!virQEMUCapsSupportsGICVersion(qemuCaps,
|
||||
domCaps->virttype,
|
||||
version))
|
||||
continue;
|
||||
|
||||
gic->supported = true;
|
||||
VIR_DOMAIN_CAPS_ENUM_SET(gic->version,
|
||||
cap->version);
|
||||
version);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -463,6 +463,10 @@ bool virQEMUCapsSupportsChardev(const virDomainDef *def,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
virDomainChrDefPtr chr);
|
||||
|
||||
bool virQEMUCapsSupportsGICVersion(virQEMUCapsPtr qemuCaps,
|
||||
virDomainVirtType virtType,
|
||||
virGICVersion version);
|
||||
|
||||
bool virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps,
|
||||
const char *canonical_machine);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user