[libvirt] [PATCH] virsh: use virConnectGetDomainCapabilities with maxvcpus
Peter Krempa
pkrempa at redhat.com
Thu Sep 15 08:17:43 UTC 2016
From: Shivaprasad G Bhat <sbhat at linux.vnet.ibm.com>
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 | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/tools/virsh-host.c b/tools/virsh-host.c
index 57f0c0e..2337ce8 100644
--- a/tools/virsh-host.c
+++ b/tools/virsh-host.c
@@ -606,18 +606,40 @@ static bool
cmdMaxvcpus(vshControl *ctl, const vshCmd *cmd)
{
const char *type = NULL;
- int vcpus;
+ int vcpus = -1;
+ char *caps = NULL;
+ xmlDocPtr xml = NULL;
+ xmlXPathContextPtr ctxt = NULL;
virshControlPtr priv = ctl->privData;
+ bool ret = false;
if (vshCommandOptStringReq(ctl, cmd, "type", &type) < 0)
return false;
- if ((vcpus = virConnectGetMaxVcpus(priv->conn, type)) < 0)
- return false;
+ if ((caps = virConnectGetDomainCapabilities(priv->conn, NULL, NULL, NULL,
+ type, 0))) {
+ if (!(xml = virXMLParseStringCtxt(caps, _("(domainCapabilities)"), &ctxt)))
+ goto cleanup;
+
+ ignore_value(virXPathInt("string(./vcpu[1]/@max)", ctxt, &vcpus));
+ } else {
+ if (last_error && last_error->code != VIR_ERR_NO_SUPPORT)
+ goto cleanup;
+
+ vshResetLibvirtError();
+ }
+
+ if (vcpus < 0 && (vcpus = virConnectGetMaxVcpus(priv->conn, type)) < 0)
+ goto cleanup;
vshPrint(ctl, "%d\n", vcpus);
+ ret = true;
- return true;
+ cleanup:
+ xmlXPathFreeContext(ctxt);
+ xmlFreeDoc(xml);
+ VIR_FREE(caps);
+ return ret;
}
/*
--
2.10.0
More information about the libvir-list
mailing list