return N_("no state");
}
+/*
+ * Determine number of CPU nodes present by trying
+ * virNodeGetCPUMap and falling back to virNodeGetInfo
+ * if needed.
+ */
+static int
+vshNodeGetCPUCount(virConnectPtr conn)
+{
+ int ret;
+ virNodeInfo nodeinfo;
+
+ if ((ret = virNodeGetCPUMap(conn, NULL, NULL, 0)) < 0) {
+ /* fall back to nodeinfo */
+ vshResetLibvirtError();
+ if (virNodeGetInfo(conn, &nodeinfo) == 0) {
+ ret = VIR_NODEINFO_MAXCPUS(nodeinfo);
+ }
+ }
+ return ret;
+}
+
/*
* "attach-device" command
*/
{
virDomainInfo info;
virDomainPtr dom;
- virNodeInfo nodeinfo;
virVcpuInfoPtr cpuinfo;
unsigned char *cpumaps;
int ncpus, maxcpu;
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return false;
- if (virNodeGetInfo(ctl->conn, &nodeinfo) != 0) {
+ if ((maxcpu = vshNodeGetCPUCount(ctl->conn)) < 0) {
virDomainFree(dom);
return false;
}
}
cpuinfo = vshMalloc(ctl, sizeof(virVcpuInfo)*info.nrVirtCpu);
- maxcpu = VIR_NODEINFO_MAXCPUS(nodeinfo);
cpumaplen = VIR_CPU_MAPLEN(maxcpu);
cpumaps = vshMalloc(ctl, info.nrVirtCpu * cpumaplen);
{
virDomainInfo info;
virDomainPtr dom;
- virNodeInfo nodeinfo;
int vcpu = -1;
const char *cpulist = NULL;
bool ret = true;
return false;
}
- if (virNodeGetInfo(ctl->conn, &nodeinfo) != 0) {
+ if ((maxcpu = vshNodeGetCPUCount(ctl->conn)) < 0) {
virDomainFree(dom);
return false;
}
return false;
}
- maxcpu = VIR_NODEINFO_MAXCPUS(nodeinfo);
cpumaplen = VIR_CPU_MAPLEN(maxcpu);
/* Query mode: show CPU affinity information then exit.*/
cmdEmulatorPin(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- virNodeInfo nodeinfo;
const char *cpulist = NULL;
bool ret = true;
unsigned char *cpumap = NULL;
}
query = !cpulist;
- if (virNodeGetInfo(ctl->conn, &nodeinfo) != 0) {
+ if ((maxcpu = vshNodeGetCPUCount(ctl->conn)) < 0) {
virDomainFree(dom);
return false;
}
- maxcpu = VIR_NODEINFO_MAXCPUS(nodeinfo);
cpumaplen = VIR_CPU_MAPLEN(maxcpu);
/* Query mode: show CPU affinity information then exit.*/