
On 10/30/2009 09:47 PM, Kaitlin Rupert wrote:
# HG changeset patch # User Kaitlin Rupert<karupert@us.ibm.com> # Date 1256942565 25200 # Node ID fa2c916f6772d7e02ab32f1d167d83826898cacb # Parent a5cfc77fe35238cf4e17f4d09fcd09633f6f3149 Allow user to specify whether ACPI should be enabled.
Signed-off-by: Kaitlin Rupert<karupert@us.ibm.com>
diff -r a5cfc77fe352 -r fa2c916f6772 libxkutil/device_parsing.c --- a/libxkutil/device_parsing.c Fri Oct 30 05:11:06 2009 -0700 +++ b/libxkutil/device_parsing.c Fri Oct 30 15:42:45 2009 -0700 @@ -866,6 +866,18 @@ return 1; }
+static int parse_features(struct domain *dominfo, xmlNode *features) +{ + xmlNode *child; + + for (child = features->children; child != NULL; child = child->next) { + if (XSTREQ(child->name, "acpi")) + dominfo->acpi = true;
You only check for the acpi property here... (rest of the text is below)
+ } + + return 1; +} + static void set_action(int *val, xmlNode *child) { const char *action = (char *)xmlNodeGetContent(child); @@ -910,6 +922,8 @@ set_action(&dominfo->on_crash, child); else if (XSTREQ(child->name, "clock")) dominfo->clock = get_attr_value(child, "offset"); + else if (XSTREQ(child->name, "features")) + parse_features(dominfo, child); }
return 1; diff -r a5cfc77fe352 -r fa2c916f6772 libxkutil/device_parsing.h --- a/libxkutil/device_parsing.h Fri Oct 30 05:11:06 2009 -0700 +++ b/libxkutil/device_parsing.h Fri Oct 30 15:42:45 2009 -0700 @@ -126,6 +126,7 @@ char *bootloader; char *bootloader_args; char *clock; + bool acpi;
union { struct pv_os_info pv; diff -r a5cfc77fe352 -r fa2c916f6772 libxkutil/xmlgen.c --- a/libxkutil/xmlgen.c Fri Oct 30 05:11:06 2009 -0700 +++ b/libxkutil/xmlgen.c Fri Oct 30 15:42:45 2009 -0700 @@ -503,11 +503,6 @@ if (ret == 0) return XML_ERROR;
- tmp = xmlNewChild(root, NULL, BAD_CAST "features", NULL); - xmlNewChild(tmp, NULL, BAD_CAST "pae", NULL); - xmlNewChild(tmp, NULL, BAD_CAST "acpi", NULL); - xmlNewChild(tmp, NULL, BAD_CAST "apic", NULL); - return NULL; }
@@ -576,6 +571,25 @@ return "Unsupported domain type"; }
+static char *features_xml(xmlNodePtr root, struct domain *domain) +{ + xmlNodePtr features; + + features = xmlNewChild(root, NULL, BAD_CAST "features", NULL); + if (features == NULL) + return "Failed to allocate XML memory"; + + if (domain->type == DOMAIN_XENFV) { + xmlNewChild(features, NULL, BAD_CAST "pae", NULL); + xmlNewChild(features, NULL, BAD_CAST "apic", NULL); + }
But you actually create a XML with two more properties (pae and apic). Are these properties always defined for a Xen domain?
+ + if (domain->acpi) + xmlNewChild(features, NULL, BAD_CAST "acpi", NULL); + + return NULL; +} + static char *tree_to_xml(xmlNodePtr root) { xmlBufferPtr buffer = NULL; @@ -748,6 +762,10 @@ if (msg != NULL) goto out;
+ msg = features_xml(root, dominfo); + if (msg != NULL) + goto out; + msg = mem_xml(root, dominfo); if (msg != NULL) goto out; diff -r a5cfc77fe352 -r fa2c916f6772 schema/Virt_VSSD.mof --- a/schema/Virt_VSSD.mof Fri Oct 30 05:11:06 2009 -0700 +++ b/schema/Virt_VSSD.mof Fri Oct 30 15:42:45 2009 -0700 @@ -15,4 +15,7 @@ [Description("UUID assigned to this DomU.")] string UUID;
+ [Description ("Flag to determine whether this guest has acpi enabled")] + boolean EnableACPI; + }; diff -r a5cfc77fe352 -r fa2c916f6772 src/Virt_VSSD.c --- a/src/Virt_VSSD.c Fri Oct 30 05:11:06 2009 -0700 +++ b/src/Virt_VSSD.c Fri Oct 30 15:42:45 2009 -0700 @@ -211,6 +211,9 @@ CMSetProperty(inst, "AutomaticRecoveryAction", (CMPIValue *)&dominfo->on_crash, CMPI_uint16);
+ CMSetProperty(inst, "EnableACPI", + (CMPIValue *)&dominfo->acpi, CMPI_boolean); + if (dominfo->clock != NULL) { uint16_t clock = VSSD_CLOCK_UTC;
diff -r a5cfc77fe352 -r fa2c916f6772 src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Fri Oct 30 05:11:06 2009 -0700 +++ b/src/Virt_VirtualSystemManagementService.c Fri Oct 30 15:42:45 2009 -0700 @@ -425,6 +425,7 @@ const char *val; const char *cn; char *pfx = NULL; + bool bool_val; bool fullvirt; CMPIObjectPath *opathp = NULL;
@@ -470,6 +471,13 @@ if (cu_get_bool_prop(inst, "IsFullVirt",&fullvirt) != CMPI_RC_OK) fullvirt = false;
+ if (cu_get_bool_prop(inst, "EnableACPI",&bool_val) != CMPI_RC_OK) { + if (fullvirt || STREQC(pfx, "KVM")) + bool_val = true; + } + + domain->acpi = bool_val; + if (cu_get_u16_prop(inst, "ClockOffset",&tmp) == CMPI_RC_OK) { if (tmp == VSSD_CLOCK_UTC) domain->clock = strdup("utc");
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
-- Richard Maciel, MSc IBM Linux Technology Center rmaciel@linux.vnet.ibm.com