[libvirt] [PATCH] virsh: use virConnectGetDomainCapabilities with maxvcpus

Shivaprasad G Bhat sbhat at linux.vnet.ibm.com
Tue Sep 6 11:29:09 UTC 2016


virsh maxvcpus --type kvm output is useless on PPC. Also, in
commit e6806d79 we documented not rely on virConnectGetMaxVcpus
output. Fix the  maxvcpus to use virConnectGetDomainCapabilities
now to make it useful. The call is made to use the default emulator
binary and to check for the host machine and arch which is what the
command intends to show anyway.

Signed-off-by: Shivaprasad G Bhat <sbhat at linux.vnet.ibm.com>
---
 tools/virsh-host.c |   28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/tools/virsh-host.c b/tools/virsh-host.c
index 57f0c0e..505cfbb 100644
--- a/tools/virsh-host.c
+++ b/tools/virsh-host.c
@@ -607,16 +607,38 @@ cmdMaxvcpus(vshControl *ctl, const vshCmd *cmd)
 {
     const char *type = NULL;
     int vcpus;
+    char *caps = NULL;
+    const unsigned int flags = 0; /* No flags so far */
+    xmlDocPtr xml = NULL;
+    xmlXPathContextPtr ctxt = NULL;
     virshControlPtr priv = ctl->privData;
 
     if (vshCommandOptStringReq(ctl, cmd, "type", &type) < 0)
         return false;
 
-    if ((vcpus = virConnectGetMaxVcpus(priv->conn, type)) < 0)
-        return false;
+    caps = virConnectGetDomainCapabilities(priv->conn, NULL, NULL, NULL, type, flags);
+    if (caps) {
+        xml = virXMLParseStringCtxt(caps, _("(domainCapabilities)"), &ctxt);
+        if (!xml) {
+            VIR_FREE(caps);
+            return false;
+        }
 
-    vshPrint(ctl, "%d\n", vcpus);
+        virXPathInt("string(./vcpu[1]/@max)", ctxt, &vcpus);
+        xmlXPathFreeContext(ctxt);
+        xmlFreeDoc(xml);
+        VIR_FREE(caps);
+    } else {
+        if (last_error && last_error->code != VIR_ERR_NO_SUPPORT)
+            return false;
+
+        vshResetLibvirtError();
 
+        if ((vcpus = virConnectGetMaxVcpus(priv->conn, type)) < 0)
+            return false;
+    }
+
+    vshPrint(ctl, "%d\n", vcpus);
     return true;
 }
 




More information about the libvir-list mailing list