Remove powerMgmt_valid field from capabilities struct

If we ensure that virNodeSuspendGetTargetMask always resets
*bitmask to zero upon failure, there is no need for the
powerMgmt_valid field.

* src/util/virnodesuspend.c: Ensure *bitmask is zero upon
  failure
* src/conf/capabilities.c, src/conf/capabilities.h: Remove
  powerMgmt_valid field
* src/qemu/qemu_capabilities.c: Remove powerMgmt_valid
This commit is contained in:
Daniel P. Berrange 2011-11-29 14:50:04 +00:00
parent f5272027c3
commit f1f28611f1
5 changed files with 24 additions and 29 deletions

View File

@ -74,12 +74,9 @@ BIOS you will see</p>
description). Further, the power management features description). Further, the power management features
supported by the host are shown, such as Suspend-to-RAM (S3), supported by the host are shown, such as Suspend-to-RAM (S3),
Suspend-to-Disk (S4) and Hybrid-Suspend (a combination of S3 Suspend-to-Disk (S4) and Hybrid-Suspend (a combination of S3
and S4). In case the query for power and S4). In case the host does not support
management features succeeded but the host does not support
any such feature, then an empty &lt;power_management/&gt; any such feature, then an empty &lt;power_management/&gt;
tag will be shown. Otherwise, if the query itself failed, no tag will be shown. </p>
such tag will be displayed (i.e., there will not be any
power_management block or empty tag in the XML).</p>
<p>The second block (in blue) indicates the paravirtualization <p>The second block (in blue) indicates the paravirtualization
support of the Xen support, you will see the os_type of xen support of the Xen support, you will see the os_type of xen
to indicate a paravirtual kernel, then architecture to indicate a paravirtual kernel, then architecture

View File

@ -696,23 +696,21 @@ virCapabilitiesFormatXML(virCapsPtr caps)
virBufferAddLit(&xml, " </cpu>\n"); virBufferAddLit(&xml, " </cpu>\n");
if (caps->host.powerMgmt_valid) { /* The PM query was successful. */
/* The PM query was successful. */ if (caps->host.powerMgmt) {
if (caps->host.powerMgmt) { /* The host supports some PM features. */
/* The host supports some PM features. */ unsigned int pm = caps->host.powerMgmt;
unsigned int pm = caps->host.powerMgmt; virBufferAddLit(&xml, " <power_management>\n");
virBufferAddLit(&xml, " <power_management>\n"); while (pm) {
while (pm) { int bit = ffs(pm) - 1;
int bit = ffs(pm) - 1; virBufferAsprintf(&xml, " <%s/>\n",
virBufferAsprintf(&xml, " <%s/>\n", virCapsHostPMTargetTypeToString(bit));
virCapsHostPMTargetTypeToString(bit)); pm &= ~(1U << bit);
pm &= ~(1U << bit);
}
virBufferAddLit(&xml, " </power_management>\n");
} else {
/* The host does not support any PM feature. */
virBufferAddLit(&xml, " <power_management/>\n");
} }
virBufferAddLit(&xml, " </power_management>\n");
} else {
/* The host does not support any PM feature. */
virBufferAddLit(&xml, " <power_management/>\n");
} }
if (caps->host.offlineMigrate) { if (caps->host.offlineMigrate) {

View File

@ -105,7 +105,6 @@ struct _virCapsHost {
size_t nfeatures; size_t nfeatures;
size_t nfeatures_max; size_t nfeatures_max;
char **features; char **features;
bool powerMgmt_valid;
unsigned int powerMgmt; /* Bitmask of the PM capabilities. unsigned int powerMgmt; /* Bitmask of the PM capabilities.
* See enum virHostPMCapability. * See enum virHostPMCapability.
*/ */

View File

@ -851,11 +851,8 @@ virCapsPtr qemuCapsInit(virCapsPtr old_caps)
/* Add the power management features of the host */ /* Add the power management features of the host */
if (virNodeSuspendGetTargetMask(&caps->host.powerMgmt) < 0) { if (virNodeSuspendGetTargetMask(&caps->host.powerMgmt) < 0)
VIR_WARN("Failed to get host power management capabilities"); VIR_WARN("Failed to get host power management capabilities");
caps->host.powerMgmt_valid = false;
} else
caps->host.powerMgmt_valid = true; /* The PM query succeeded. */
virCapabilitiesAddHostMigrateTransport(caps, virCapabilitiesAddHostMigrateTransport(caps,
"tcp"); "tcp");

View File

@ -346,23 +346,27 @@ virNodeSuspendGetTargetMask(unsigned int *bitmask)
/* Check support for Suspend-to-RAM (S3) */ /* Check support for Suspend-to-RAM (S3) */
ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_MEM, &supported); ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_MEM, &supported);
if (ret < 0) if (ret < 0)
return -1; goto error;
if (supported) if (supported)
*bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_MEM); *bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_MEM);
/* Check support for Suspend-to-Disk (S4) */ /* Check support for Suspend-to-Disk (S4) */
ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_DISK, &supported); ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_DISK, &supported);
if (ret < 0) if (ret < 0)
return -1; goto error;
if (supported) if (supported)
*bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_DISK); *bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_DISK);
/* Check support for Hybrid-Suspend */ /* Check support for Hybrid-Suspend */
ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_HYBRID, &supported); ret = virNodeSuspendSupportsTarget(VIR_NODE_SUSPEND_TARGET_HYBRID, &supported);
if (ret < 0) if (ret < 0)
return -1; goto error;
if (supported) if (supported)
*bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_HYBRID); *bitmask |= (1 << VIR_NODE_SUSPEND_TARGET_HYBRID);
return 0; return 0;
error:
*bitmask = 0;
return -1;
} }