]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
* src/qemu_conf.[ch] src/qemu_driver.c: add qemu/kvm drivers report
authorDaniel Veillard <veillard@redhat.com>
Mon, 30 Jul 2007 09:59:05 +0000 (09:59 +0000)
committerDaniel Veillard <veillard@redhat.com>
Mon, 30 Jul 2007 09:59:05 +0000 (09:59 +0000)
  features for i686 and x86_64, patch from David Lutterkort
Daniel

ChangeLog
src/qemu_conf.c
src/qemu_conf.h
src/qemu_driver.c

index b72e6a3ffbb680ae542cf1262e29b88f35db6f82..15f4ed3fc23e806f0a674173bdaebd7af0c4ae45 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Jul 30 11:59:51 CEST 2007 Daniel Veillard <veillard@redhat.com>
+
+       * src/qemu_conf.[ch] src/qemu_driver.c: add qemu/kvm drivers report
+         features for i686 and x86_64, patch from David Lutterkort
+
 Fri Jul 27 19:19:31 EST 2007 Daniel P. Berrange <berrange@redhat.com>
 
        * src/test.c: Added impl of networking APIs. Cleanup all other
index 6a112daebf824672f8f644ee43a9cc470b6db6e4..fbd0ba3c6584029085d05d496728e2cbe8a10ed7 100644 (file)
@@ -221,17 +221,31 @@ static const char *arch_info_ppc_machines[] = {
     "g3bw", "mac99", "prep", NULL
 };
 
+/* Feature flags for the architecture info */
+struct qemu_feature_flags arch_info_i686_flags [] = {
+    { "pae",  1, 1 },
+    { "acpi", 1, 1 },
+    { "apic", 1, 0 },
+    { NULL, -1, -1 }
+};
+
+struct qemu_feature_flags arch_info_x86_64_flags [] = {
+    { "acpi", 1, 1 },
+    { "apic", 1, 0 },
+    { NULL, -1, -1 }
+};
+
 /* The archicture tables for supported QEMU archs */
 struct qemu_arch_info qemudArchs[] = { 
     /* i686 must be in position 0 */
-    {  "i686", 32, arch_info_x86_machines, "qemu" },
+    {  "i686", 32, arch_info_x86_machines, "qemu", arch_info_i686_flags },
     /* x86_64 must be in position 1 */
-    {  "x86_64", 64, arch_info_x86_machines, "qemu-system-x86_64" },
-    {  "mips", 32, arch_info_mips_machines, "qemu-system-mips" },
-    {  "mipsel", 32, arch_info_mips_machines, "qemu-system-mipsel" },
-    {  "sparc", 32, arch_info_sparc_machines, "qemu-system-sparc" },
-    {  "ppc", 32, arch_info_ppc_machines, "qemu-system-ppc" },
-    { NULL, -1, NULL, NULL }
+    {  "x86_64", 64, arch_info_x86_machines, "qemu-system-x86_64", arch_info_x86_64_flags },
+    {  "mips", 32, arch_info_mips_machines, "qemu-system-mips", NULL },
+    {  "mipsel", 32, arch_info_mips_machines, "qemu-system-mipsel", NULL },
+    {  "sparc", 32, arch_info_sparc_machines, "qemu-system-sparc", NULL },
+    {  "ppc", 32, arch_info_ppc_machines, "qemu-system-ppc", NULL },
+    { NULL, -1, NULL, NULL, NULL }
 };
 
 /* Return the default architecture if none is explicitly requested*/
index ed7aba243c3c7b06fd8246ace831b569f2b56b39..836bcb0f7178ce71b6828d62203e186465b8a49a 100644 (file)
@@ -384,11 +384,18 @@ char *      qemudGenerateNetworkXML     (virConnectPtr conn,
                                          struct qemud_network *network,
                                          struct qemud_network_def *def);
 
+struct qemu_feature_flags {
+    const char *name;
+    const int default_on;
+    const int toggle;
+};
+
 struct qemu_arch_info {
     const char *arch;
     int wordsize;
     const char **machines;
     const char *binary;
+    const struct qemu_feature_flags *fflags;
 };
 extern struct qemu_arch_info qemudArchs[];
 
index e181e69dc0b8063736ce289189d1ff536a856a1e..7c75d9c45870f4714d5c24205d1ccee04ca81ddb 100644 (file)
@@ -1416,6 +1416,40 @@ static int qemudGetNodeInfo(virConnectPtr conn,
     return virNodeInfoPopulate(conn, nodeinfo);
 }
 
+static int qemudGetFeatures(virBufferPtr xml,
+                            const struct qemu_feature_flags *flags) {
+    int i, r;
+
+    if (flags == NULL)
+        return 0;
+
+    r = virBufferAdd(xml, "\
+    <features>\n", -1);
+    if (r == -1) return r;
+    for (i = 0; flags[i].name; ++i) {
+        if (STREQ(flags[i].name, "pae")) {
+            int pae = flags[i].default_on || flags[i].toggle;
+            int nonpae = flags[i].toggle;
+            if (pae) {
+                r = virBufferAdd(xml, "      <pae/>\n", -1);
+                if (r == -1) return r;
+            }
+            if (nonpae) {
+                r = virBufferAdd(xml, "      <nonpae/>\n", -1);
+                if (r == -1) return r;
+            }
+        } else {
+            r = virBufferVSprintf(xml, "      <%s default='%s' toggle='%s'/>\n",
+                                  flags[i].name,
+                                  flags[i].default_on ? "on" : "off",
+                                  flags[i].toggle ? "yes" : "no");
+            if (r == -1) return r;
+        }
+    }
+    r = virBufferAdd(xml, "    </features>\n", -1);
+    return r;
+}
+
 static char *qemudGetCapabilities(virConnectPtr conn ATTRIBUTE_UNUSED) {
     struct utsname utsname;
     int i, j, r;
@@ -1493,10 +1527,13 @@ static char *qemudGetCapabilities(virConnectPtr conn ATTRIBUTE_UNUSED) {
       </domain>\n", -1);
             if (r == -1) goto vir_buffer_failed;
         }
-        r = virBufferAdd (xml,
-                       "\
-    </arch>\n\
-  </guest>\n", -1);
+        r = virBufferAdd (xml, "    </arch>\n", -1);
+        if (r == -1) goto vir_buffer_failed;
+
+        r = qemudGetFeatures(xml, qemudArchs[i].fflags);
+        if (r == -1) goto vir_buffer_failed;
+
+        r = virBufferAdd (xml, "  </guest>\n", -1);
         if (r == -1) goto vir_buffer_failed;
 
         /* The "other" PC architecture needs emulation. */
@@ -1521,10 +1558,7 @@ static char *qemudGetCapabilities(virConnectPtr conn ATTRIBUTE_UNUSED) {
                                 qemudArchs[i].machines[j]);
             if (r == -1) goto vir_buffer_failed;
         }
-        r = virBufferAdd (xml,
-                       "\
-    </arch>\n\
-  </guest>\n", -1);
+        r = virBufferAdd (xml, "    </arch>\n  </guest>\n", -1);
         if (r == -1) goto vir_buffer_failed;
     }
 
@@ -1550,10 +1584,13 @@ static char *qemudGetCapabilities(virConnectPtr conn ATTRIBUTE_UNUSED) {
                                 qemudArchs[i].machines[j]);
             if (r == -1) goto vir_buffer_failed;
         }
-        r = virBufferAdd (xml,
-                       "\
-    </arch>\n\
-  </guest>\n", -1);
+        r = virBufferAdd (xml, "    </arch>\n", -1);
+        if (r == -1) goto vir_buffer_failed;
+
+        r = qemudGetFeatures(xml, qemudArchs[i].fflags);
+        if (r == -1) goto vir_buffer_failed;
+
+        r = virBufferAdd (xml, "  </guest>\n", -1);
         if (r == -1) goto vir_buffer_failed;
     }