use virBitmap to store cpupin info

This commit is contained in:
Hu Tao 2012-09-14 15:46:58 +08:00 committed by Laine Stump
parent 0fc89098a6
commit f970d8481e
6 changed files with 80 additions and 127 deletions

View File

@ -52,6 +52,7 @@
#include "netdev_bandwidth_conf.h" #include "netdev_bandwidth_conf.h"
#include "netdev_vlan_conf.h" #include "netdev_vlan_conf.h"
#include "device_conf.h" #include "device_conf.h"
#include "bitmap.h"
#define VIR_FROM_THIS VIR_FROM_DOMAIN #define VIR_FROM_THIS VIR_FROM_DOMAIN
@ -1529,10 +1530,9 @@ virDomainVcpuPinDefCopy(virDomainVcpuPinDefPtr *src, int nvcpupin)
for (i = 0; i < nvcpupin; i++) { for (i = 0; i < nvcpupin; i++) {
if (VIR_ALLOC(ret[i]) < 0) if (VIR_ALLOC(ret[i]) < 0)
goto no_memory; goto no_memory;
if (VIR_ALLOC_N(ret[i]->cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0)
goto no_memory;
ret[i]->vcpuid = src[i]->vcpuid; ret[i]->vcpuid = src[i]->vcpuid;
memcpy(ret[i]->cpumask, src[i]->cpumask, VIR_DOMAIN_CPUMASK_LEN); if ((ret[i]->cpumask = virBitmapNewCopy(src[i]->cpumask)) == NULL)
goto no_memory;
} }
return ret; return ret;
@ -1541,7 +1541,7 @@ no_memory:
if (ret) { if (ret) {
for ( ; i >= 0; --i) { for ( ; i >= 0; --i) {
if (ret[i]) { if (ret[i]) {
VIR_FREE(ret[i]->cpumask); virBitmapFree(ret[i]->cpumask);
VIR_FREE(ret[i]); VIR_FREE(ret[i]);
} }
} }
@ -1553,8 +1553,17 @@ no_memory:
} }
void void
virDomainVcpuPinDefFree(virDomainVcpuPinDefPtr *def, virDomainVcpuPinDefFree(virDomainVcpuPinDefPtr def)
int nvcpupin) {
if (def) {
virBitmapFree(def->cpumask);
VIR_FREE(def);
}
}
void
virDomainVcpuPinDefArrayFree(virDomainVcpuPinDefPtr *def,
int nvcpupin)
{ {
int i; int i;
@ -1562,8 +1571,7 @@ virDomainVcpuPinDefFree(virDomainVcpuPinDefPtr *def,
return; return;
for(i = 0; i < nvcpupin; i++) { for(i = 0; i < nvcpupin; i++) {
VIR_FREE(def[i]->cpumask); virDomainVcpuPinDefFree(def[i]);
VIR_FREE(def[i]);
} }
VIR_FREE(def); VIR_FREE(def);
@ -1687,7 +1695,9 @@ void virDomainDefFree(virDomainDefPtr def)
virCPUDefFree(def->cpu); virCPUDefFree(def->cpu);
virDomainVcpuPinDefFree(def->cputune.vcpupin, def->cputune.nvcpupin); virDomainVcpuPinDefArrayFree(def->cputune.vcpupin, def->cputune.nvcpupin);
virDomainVcpuPinDefFree(def->cputune.emulatorpin);
VIR_FREE(def->numatune.memory.nodemask); VIR_FREE(def->numatune.memory.nodemask);
@ -8252,12 +8262,8 @@ virDomainVcpuPinDefParseXML(const xmlNodePtr node,
char *set = tmp; char *set = tmp;
int cpumasklen = VIR_DOMAIN_CPUMASK_LEN; int cpumasklen = VIR_DOMAIN_CPUMASK_LEN;
if (VIR_ALLOC_N(def->cpumask, cpumasklen) < 0) { if (virBitmapParse(set, 0, &def->cpumask,
virReportOOMError(); cpumasklen) < 0)
goto error;
}
if (virDomainCpuSetParse(set, 0, def->cpumask,
cpumasklen) < 0)
goto error; goto error;
VIR_FREE(tmp); VIR_FREE(tmp);
} else { } else {
@ -8692,18 +8698,11 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
goto error; goto error;
} }
if (VIR_ALLOC(def->cputune.emulatorpin) < 0) { def->cputune.emulatorpin = virDomainVcpuPinDefParseXML(nodes[0], ctxt,
goto no_memory; def->maxvcpus, 1);
}
virDomainVcpuPinDefPtr emulatorpin = NULL; if (!def->cputune.emulatorpin)
emulatorpin = virDomainVcpuPinDefParseXML(nodes[0], ctxt,
def->maxvcpus, 1);
if (!emulatorpin)
goto error; goto error;
def->cputune.emulatorpin = emulatorpin;
} }
VIR_FREE(nodes); VIR_FREE(nodes);
@ -11422,34 +11421,6 @@ virDomainVcpuPinFindByVcpu(virDomainVcpuPinDefPtr *def,
return NULL; return NULL;
} }
static char *bitmapFromBytemap(unsigned char *bytemap, int maplen)
{
char *bitmap = NULL;
int i;
if (VIR_ALLOC_N(bitmap, VIR_DOMAIN_CPUMASK_LEN) < 0) {
virReportOOMError();
goto cleanup;
}
/* Reset bitmap to all 0s. */
for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; i++)
bitmap[i] = 0;
/* Convert bitmap (bytemap) to bitmap, which is byte map? */
for (i = 0; i < maplen; i++) {
int cur;
for (cur = 0; cur < 8; cur++) {
if (bytemap[i] & (1 << cur))
bitmap[i * 8 + cur] = 1;
}
}
cleanup:
return bitmap;
}
int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr **vcpupin_list, int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr **vcpupin_list,
int *nvcpupin, int *nvcpupin,
unsigned char *cpumap, unsigned char *cpumap,
@ -11457,20 +11428,21 @@ int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr **vcpupin_list,
int vcpu) int vcpu)
{ {
virDomainVcpuPinDefPtr vcpupin = NULL; virDomainVcpuPinDefPtr vcpupin = NULL;
char *cpumask = NULL;
if (!vcpupin_list) if (!vcpupin_list)
return -1; return -1;
if ((cpumask = bitmapFromBytemap(cpumap, maplen)) == NULL)
return -1;
vcpupin = virDomainVcpuPinFindByVcpu(*vcpupin_list, vcpupin = virDomainVcpuPinFindByVcpu(*vcpupin_list,
*nvcpupin, *nvcpupin,
vcpu); vcpu);
if (vcpupin) { if (vcpupin) {
vcpupin->vcpuid = vcpu; vcpupin->vcpuid = vcpu;
vcpupin->cpumask = cpumask; virBitmapFree(vcpupin->cpumask);
vcpupin->cpumask = virBitmapNewData(cpumap, maplen);
if (!vcpupin->cpumask) {
virReportOOMError();
return -1;
}
return 0; return 0;
} }
@ -11479,16 +11451,17 @@ int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr **vcpupin_list,
if (VIR_ALLOC(vcpupin) < 0) { if (VIR_ALLOC(vcpupin) < 0) {
virReportOOMError(); virReportOOMError();
VIR_FREE(cpumask);
return -1; return -1;
} }
vcpupin->vcpuid = vcpu; vcpupin->vcpuid = vcpu;
vcpupin->cpumask = cpumask; vcpupin->cpumask = virBitmapNewData(cpumap, maplen);
if (!vcpupin->cpumask) {
virReportOOMError();
return -1;
}
if (VIR_REALLOC_N(*vcpupin_list, *nvcpupin + 1) < 0) { if (VIR_REALLOC_N(*vcpupin_list, *nvcpupin + 1) < 0) {
virReportOOMError(); virReportOOMError();
VIR_FREE(cpumask);
VIR_FREE(vcpupin); VIR_FREE(vcpupin);
return -1; return -1;
} }
@ -11543,68 +11516,43 @@ virDomainEmulatorPinAdd(virDomainDefPtr def,
int maplen) int maplen)
{ {
virDomainVcpuPinDefPtr emulatorpin = NULL; virDomainVcpuPinDefPtr emulatorpin = NULL;
char *cpumask = NULL;
int i;
if (VIR_ALLOC_N(cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0) {
virReportOOMError();
goto cleanup;
}
/* Convert bitmap (cpumap) to cpumask, which is byte map. */
for (i = 0; i < maplen; i++) {
int cur;
for (cur = 0; cur < 8; cur++) {
if (cpumap[i] & (1 << cur))
cpumask[i * 8 + cur] = 1;
}
}
if (!def->cputune.emulatorpin) { if (!def->cputune.emulatorpin) {
/* No emulatorpin exists yet. */ /* No emulatorpin exists yet. */
if (VIR_ALLOC(emulatorpin) < 0) { if (VIR_ALLOC(emulatorpin) < 0) {
virReportOOMError(); virReportOOMError();
goto cleanup; return -1;
} }
emulatorpin->vcpuid = -1; emulatorpin->vcpuid = -1;
emulatorpin->cpumask = cpumask; emulatorpin->cpumask = virBitmapNewData(cpumap, maplen);
if (!emulatorpin->cpumask)
return -1;
def->cputune.emulatorpin = emulatorpin; def->cputune.emulatorpin = emulatorpin;
} else { } else {
/* Since there is only 1 emulatorpin for each vm, /* Since there is only 1 emulatorpin for each vm,
* juest replace the old one. * juest replace the old one.
*/ */
VIR_FREE(def->cputune.emulatorpin->cpumask); virBitmapFree(def->cputune.emulatorpin->cpumask);
def->cputune.emulatorpin->cpumask = cpumask; def->cputune.emulatorpin->cpumask = virBitmapNewData(cpumap, maplen);
if (!def->cputune.emulatorpin->cpumask)
return -1;
} }
return 0; return 0;
cleanup:
VIR_FREE(cpumask);
return -1;
} }
int int
virDomainEmulatorPinDel(virDomainDefPtr def) virDomainEmulatorPinDel(virDomainDefPtr def)
{ {
virDomainVcpuPinDefPtr emulatorpin = NULL;
/* No emulatorpin exists yet */
if (!def->cputune.emulatorpin) { if (!def->cputune.emulatorpin) {
return 0; return 0;
} }
emulatorpin = def->cputune.emulatorpin; virDomainVcpuPinDefFree(def->cputune.emulatorpin);
VIR_FREE(emulatorpin->cpumask);
VIR_FREE(emulatorpin);
def->cputune.emulatorpin = NULL; def->cputune.emulatorpin = NULL;
if (def->cputune.emulatorpin)
return -1;
return 0; return 0;
} }
@ -13610,8 +13558,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
def->cputune.vcpupin[i]->vcpuid); def->cputune.vcpupin[i]->vcpuid);
char *cpumask = NULL; char *cpumask = NULL;
cpumask = virDomainCpuSetFormat(def->cputune.vcpupin[i]->cpumask, cpumask = virBitmapFormat(def->cputune.vcpupin[i]->cpumask);
VIR_DOMAIN_CPUMASK_LEN);
if (cpumask == NULL) { if (cpumask == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
@ -13628,8 +13575,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
virBufferAsprintf(buf, " <emulatorpin "); virBufferAsprintf(buf, " <emulatorpin ");
char *cpumask = NULL; char *cpumask = NULL;
cpumask = virDomainCpuSetFormat(def->cputune.emulatorpin->cpumask, cpumask = virBitmapFormat(def->cputune.emulatorpin->cpumask);
VIR_DOMAIN_CPUMASK_LEN);
if (cpumask == NULL) { if (cpumask == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("failed to format cpuset for emulator")); "%s", _("failed to format cpuset for emulator"));

View File

@ -46,6 +46,7 @@
# include "virnetdevvlan.h" # include "virnetdevvlan.h"
# include "virobject.h" # include "virobject.h"
# include "device_conf.h" # include "device_conf.h"
# include "bitmap.h"
/* forward declarations of all device types, required by /* forward declarations of all device types, required by
* virDomainDeviceDef * virDomainDeviceDef
@ -1565,10 +1566,11 @@ typedef struct _virDomainVcpuPinDef virDomainVcpuPinDef;
typedef virDomainVcpuPinDef *virDomainVcpuPinDefPtr; typedef virDomainVcpuPinDef *virDomainVcpuPinDefPtr;
struct _virDomainVcpuPinDef { struct _virDomainVcpuPinDef {
int vcpuid; int vcpuid;
char *cpumask; virBitmapPtr cpumask;
}; };
void virDomainVcpuPinDefFree(virDomainVcpuPinDefPtr *def, int nvcpupin); void virDomainVcpuPinDefFree(virDomainVcpuPinDefPtr def);
void virDomainVcpuPinDefArrayFree(virDomainVcpuPinDefPtr *def, int nvcpupin);
virDomainVcpuPinDefPtr *virDomainVcpuPinDefCopy(virDomainVcpuPinDefPtr *src, virDomainVcpuPinDefPtr *virDomainVcpuPinDefCopy(virDomainVcpuPinDefPtr *src,
int nvcpupin); int nvcpupin);

View File

@ -527,6 +527,7 @@ virDomainTimerTickpolicyTypeToString;
virDomainTimerTrackTypeFromString; virDomainTimerTrackTypeFromString;
virDomainTimerTrackTypeToString; virDomainTimerTrackTypeToString;
virDomainVcpuPinAdd; virDomainVcpuPinAdd;
virDomainVcpuPinDefArrayFree;
virDomainVcpuPinDefCopy; virDomainVcpuPinDefCopy;
virDomainVcpuPinDefFree; virDomainVcpuPinDefFree;
virDomainVcpuPinDel; virDomainVcpuPinDel;

View File

@ -513,8 +513,7 @@ int qemuSetupCgroupEmulatorPin(virCgroupPtr cgroup,
int rc = 0; int rc = 0;
char *new_cpus = NULL; char *new_cpus = NULL;
new_cpus = virDomainCpuSetFormat(vcpupin->cpumask, new_cpus = virBitmapFormat(vcpupin->cpumask);
VIR_DOMAIN_CPUMASK_LEN);
if (!new_cpus) { if (!new_cpus) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to convert cpu mask")); _("failed to convert cpu mask"));

View File

@ -3790,7 +3790,7 @@ qemudDomainPinVcpuFlags(virDomainPtr dom,
if (virDomainVcpuPinAdd(&newVcpuPin, &newVcpuPinNum, cpumap, maplen, vcpu) < 0) { if (virDomainVcpuPinAdd(&newVcpuPin, &newVcpuPinNum, cpumap, maplen, vcpu) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to update vcpupin")); _("failed to update vcpupin"));
virDomainVcpuPinDefFree(newVcpuPin, newVcpuPinNum); virDomainVcpuPinDefArrayFree(newVcpuPin, newVcpuPinNum);
goto cleanup; goto cleanup;
} }
@ -3823,7 +3823,7 @@ qemudDomainPinVcpuFlags(virDomainPtr dom,
} }
} else { } else {
if (vm->def->cputune.vcpupin) if (vm->def->cputune.vcpupin)
virDomainVcpuPinDefFree(vm->def->cputune.vcpupin, vm->def->cputune.nvcpupin); virDomainVcpuPinDefArrayFree(vm->def->cputune.vcpupin, vm->def->cputune.nvcpupin);
vm->def->cputune.vcpupin = newVcpuPin; vm->def->cputune.vcpupin = newVcpuPin;
vm->def->cputune.nvcpupin = newVcpuPinNum; vm->def->cputune.nvcpupin = newVcpuPinNum;
@ -3831,7 +3831,7 @@ qemudDomainPinVcpuFlags(virDomainPtr dom,
} }
if (newVcpuPin) if (newVcpuPin)
virDomainVcpuPinDefFree(newVcpuPin, newVcpuPinNum); virDomainVcpuPinDefArrayFree(newVcpuPin, newVcpuPinNum);
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
goto cleanup; goto cleanup;
@ -3906,8 +3906,9 @@ qemudDomainGetVcpuPinInfo(virDomainPtr dom,
int maxcpu, hostcpus, vcpu, pcpu; int maxcpu, hostcpus, vcpu, pcpu;
int n; int n;
virDomainVcpuPinDefPtr *vcpupin_list; virDomainVcpuPinDefPtr *vcpupin_list;
char *cpumask = NULL; virBitmapPtr cpumask = NULL;
unsigned char *cpumap; unsigned char *cpumap;
bool pinned;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1); VIR_DOMAIN_AFFECT_CONFIG, -1);
@ -3966,7 +3967,9 @@ qemudDomainGetVcpuPinInfo(virDomainPtr dom,
cpumask = vcpupin_list[n]->cpumask; cpumask = vcpupin_list[n]->cpumask;
cpumap = VIR_GET_CPUMAP(cpumaps, maplen, vcpu); cpumap = VIR_GET_CPUMAP(cpumaps, maplen, vcpu);
for (pcpu = 0; pcpu < maxcpu; pcpu++) { for (pcpu = 0; pcpu < maxcpu; pcpu++) {
if (cpumask[pcpu] == 0) if (virBitmapGetBit(cpumask, pcpu, &pinned) < 0)
goto cleanup;
if (!pinned)
VIR_UNUSE_CPU(cpumap, pcpu); VIR_UNUSE_CPU(cpumap, pcpu);
} }
} }
@ -4050,7 +4053,7 @@ qemudDomainPinEmulator(virDomainPtr dom,
if (virDomainVcpuPinAdd(&newVcpuPin, &newVcpuPinNum, cpumap, maplen, -1) < 0) { if (virDomainVcpuPinAdd(&newVcpuPin, &newVcpuPinNum, cpumap, maplen, -1) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to update vcpupin")); _("failed to update vcpupin"));
virDomainVcpuPinDefFree(newVcpuPin, newVcpuPinNum); virDomainVcpuPinDefArrayFree(newVcpuPin, newVcpuPinNum);
goto cleanup; goto cleanup;
} }
@ -4088,16 +4091,13 @@ qemudDomainPinEmulator(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
} else { } else {
if (vm->def->cputune.emulatorpin) { virDomainVcpuPinDefFree(vm->def->cputune.emulatorpin);
VIR_FREE(vm->def->cputune.emulatorpin->cpumask);
VIR_FREE(vm->def->cputune.emulatorpin);
}
vm->def->cputune.emulatorpin = newVcpuPin[0]; vm->def->cputune.emulatorpin = newVcpuPin[0];
VIR_FREE(newVcpuPin); VIR_FREE(newVcpuPin);
} }
if (newVcpuPin) if (newVcpuPin)
virDomainVcpuPinDefFree(newVcpuPin, newVcpuPinNum); virDomainVcpuPinDefArrayFree(newVcpuPin, newVcpuPinNum);
} else { } else {
virReportError(VIR_ERR_OPERATION_INVALID, virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("cpu affinity is not supported")); "%s", _("cpu affinity is not supported"));
@ -4156,7 +4156,8 @@ qemudDomainGetEmulatorPinInfo(virDomainPtr dom,
int ret = -1; int ret = -1;
int maxcpu, hostcpus, pcpu; int maxcpu, hostcpus, pcpu;
virDomainVcpuPinDefPtr emulatorpin = NULL; virDomainVcpuPinDefPtr emulatorpin = NULL;
char *cpumask = NULL; virBitmapPtr cpumask = NULL;
bool pinned;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1); VIR_DOMAIN_AFFECT_CONFIG, -1);
@ -4205,7 +4206,9 @@ qemudDomainGetEmulatorPinInfo(virDomainPtr dom,
cpumask = emulatorpin->cpumask; cpumask = emulatorpin->cpumask;
for (pcpu = 0; pcpu < maxcpu; pcpu++) { for (pcpu = 0; pcpu < maxcpu; pcpu++) {
if (cpumask[pcpu] == 0) if (virBitmapGetBit(cpumask, pcpu, &pinned) < 0)
goto cleanup;
if (!pinned)
VIR_UNUSE_CPU(cpumaps, pcpu); VIR_UNUSE_CPU(cpumaps, pcpu);
} }

View File

@ -1959,7 +1959,7 @@ qemuProcessSetVcpuAffinites(virConnectPtr conn,
virDomainDefPtr def = vm->def; virDomainDefPtr def = vm->def;
virNodeInfo nodeinfo; virNodeInfo nodeinfo;
pid_t vcpupid; pid_t vcpupid;
unsigned char *cpumask; virBitmapPtr cpumask;
int vcpu, cpumaplen, hostcpus, maxcpu, n; int vcpu, cpumaplen, hostcpus, maxcpu, n;
unsigned char *cpumap = NULL; unsigned char *cpumap = NULL;
int ret = -1; int ret = -1;
@ -1994,13 +1994,12 @@ qemuProcessSetVcpuAffinites(virConnectPtr conn,
vcpu = def->cputune.vcpupin[n]->vcpuid; vcpu = def->cputune.vcpupin[n]->vcpuid;
memset(cpumap, 0, cpumaplen); memset(cpumap, 0, cpumaplen);
cpumask = (unsigned char *)def->cputune.vcpupin[n]->cpumask; cpumask = def->cputune.vcpupin[n]->cpumask;
vcpupid = priv->vcpupids[vcpu]; vcpupid = priv->vcpupids[vcpu];
for (i = 0 ; i < VIR_DOMAIN_CPUMASK_LEN ; i++) { i = -1;
if (cpumask[i]) while ((i = virBitmapNextSetBit(cpumask, i)) >= 0)
VIR_USE_CPU(cpumap, i); VIR_USE_CPU(cpumap, i);
}
if (virProcessInfoSetAffinity(vcpupid, if (virProcessInfoSetAffinity(vcpupid,
cpumap, cpumap,
@ -2023,11 +2022,12 @@ qemuProcessSetEmulatorAffinites(virConnectPtr conn,
{ {
virDomainDefPtr def = vm->def; virDomainDefPtr def = vm->def;
pid_t pid = vm->pid; pid_t pid = vm->pid;
unsigned char *cpumask = NULL; virBitmapPtr cpumask = NULL;
unsigned char *cpumap = NULL; unsigned char *cpumap = NULL;
virNodeInfo nodeinfo; virNodeInfo nodeinfo;
int cpumaplen, hostcpus, maxcpu, i; int cpumaplen, hostcpus, maxcpu, i;
int ret = -1; int ret = -1;
bool result;
if (virNodeGetInfo(conn, &nodeinfo) != 0) if (virNodeGetInfo(conn, &nodeinfo) != 0)
return -1; return -1;
@ -2047,9 +2047,11 @@ qemuProcessSetEmulatorAffinites(virConnectPtr conn,
return -1; return -1;
} }
cpumask = (unsigned char *)def->cputune.emulatorpin->cpumask; cpumask = def->cputune.emulatorpin->cpumask;
for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; i++) { for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; i++) {
if (cpumask[i]) if (virBitmapGetBit(cpumask, i, &result) < 0)
goto cleanup;
if (result)
VIR_USE_CPU(cpumap, i); VIR_USE_CPU(cpumap, i);
} }