提交 fd8fd0f9 编写于 作者: H Hu Tao 提交者: Daniel Veillard

refactor virDomainVcpuPinAdd()

上级 1fea5667
...@@ -10963,69 +10963,52 @@ cleanup: ...@@ -10963,69 +10963,52 @@ cleanup:
return bitmap; return bitmap;
} }
int int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr *vcpupin_list,
virDomainVcpuPinAdd(virDomainDefPtr def, int *nvcpupin,
unsigned char *cpumap, unsigned char *cpumap,
int maplen, int maplen,
int vcpu) int vcpu)
{ {
virDomainVcpuPinDefPtr *vcpupin_list = NULL;
virDomainVcpuPinDefPtr vcpupin = NULL; virDomainVcpuPinDefPtr vcpupin = NULL;
char *cpumask = NULL; char *cpumask = NULL;
if (!vcpupin_list)
return -1;
if ((cpumask = bitmapFromBytemap(cpumap, maplen)) == NULL) if ((cpumask = bitmapFromBytemap(cpumap, maplen)) == NULL)
goto cleanup; return -1;
/* No vcpupin exists yet. */ vcpupin = virDomainVcpuPinFindByVcpu(vcpupin_list,
if (!def->cputune.nvcpupin) { *nvcpupin,
if (VIR_ALLOC(vcpupin) < 0) { vcpu);
virReportOOMError(); if (vcpupin) {
goto cleanup; vcpupin->vcpuid = vcpu;
} vcpupin->cpumask = cpumask;
if (VIR_ALLOC(vcpupin_list) < 0) { return 0;
virReportOOMError();
VIR_FREE(vcpupin);
goto cleanup;
} }
vcpupin->vcpuid = vcpu; /* No existing vcpupin matches vcpu, adding a new one */
vcpupin->cpumask = cpumask;
vcpupin_list[def->cputune.nvcpupin++] = vcpupin;
def->cputune.vcpupin = vcpupin_list;
} else {
if (virDomainVcpuPinIsDuplicate(def->cputune.vcpupin,
def->cputune.nvcpupin,
vcpu)) {
vcpupin = virDomainVcpuPinFindByVcpu(def->cputune.vcpupin,
def->cputune.nvcpupin,
vcpu);
vcpupin->vcpuid = vcpu;
vcpupin->cpumask = cpumask;
} else {
if (VIR_ALLOC(vcpupin) < 0) { if (VIR_ALLOC(vcpupin) < 0) {
virReportOOMError(); virReportOOMError();
goto cleanup; VIR_FREE(cpumask);
return -1;
} }
vcpupin->vcpuid = vcpu;
vcpupin->cpumask = cpumask;
if (VIR_REALLOC_N(def->cputune.vcpupin, def->cputune.nvcpupin + 1) < 0) {
if (VIR_REALLOC_N(vcpupin_list, *nvcpupin + 1) < 0) {
virReportOOMError(); virReportOOMError();
VIR_FREE(cpumask);
VIR_FREE(vcpupin); VIR_FREE(vcpupin);
goto cleanup; return -1;
} }
vcpupin->vcpuid = vcpu; vcpupin_list[(*nvcpupin)++] = vcpupin;
vcpupin->cpumask = cpumask;
def->cputune.vcpupin[def->cputune.nvcpupin++] = vcpupin;
}
}
return 0; return 0;
cleanup:
VIR_FREE(cpumask);
return -1;
} }
int int
......
...@@ -1984,7 +1984,8 @@ int virDomainCpuSetParse(const char *str, ...@@ -1984,7 +1984,8 @@ int virDomainCpuSetParse(const char *str,
char *virDomainCpuSetFormat(char *cpuset, char *virDomainCpuSetFormat(char *cpuset,
int maxcpu); int maxcpu);
int virDomainVcpuPinAdd(virDomainDefPtr def, int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr *vcpupin_list,
int *nvcpupin,
unsigned char *cpumap, unsigned char *cpumap,
int maplen, int maplen,
int vcpu); int vcpu);
......
...@@ -2454,7 +2454,18 @@ libxlDomainPinVcpu(virDomainPtr dom, unsigned int vcpu, unsigned char *cpumap, ...@@ -2454,7 +2454,18 @@ libxlDomainPinVcpu(virDomainPtr dom, unsigned int vcpu, unsigned char *cpumap,
goto cleanup; goto cleanup;
} }
if (virDomainVcpuPinAdd(vm->def, cpumap, maplen, vcpu) < 0) { if (!vm->def->cputune.vcpupin) {
if (VIR_ALLOC(vm->def->cputune.vcpupin) < 0) {
virReportOOMError();
goto cleanup;
}
vm->def->cputune.nvcpupin = 0;
}
if (virDomainVcpuPinAdd(vm->def->cputune.vcpupin,
&vm->def->cputune.nvcpupin,
cpumap,
maplen,
vcpu) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("failed to update or add vcpupin xml")); "%s", _("failed to update or add vcpupin xml"));
goto cleanup; goto cleanup;
......
...@@ -3787,7 +3787,18 @@ qemudDomainPinVcpuFlags(virDomainPtr dom, ...@@ -3787,7 +3787,18 @@ qemudDomainPinVcpuFlags(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
} else { } else {
if (virDomainVcpuPinAdd(vm->def, cpumap, maplen, vcpu) < 0) { if (!vm->def->cputune.vcpupin) {
if (VIR_ALLOC(vm->def->cputune.vcpupin) < 0) {
virReportOOMError();
goto cleanup;
}
vm->def->cputune.nvcpupin = 0;
}
if (virDomainVcpuPinAdd(vm->def->cputune.vcpupin,
&vm->def->cputune.nvcpupin,
cpumap,
maplen,
vcpu) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to update or add vcpupin xml of " _("failed to update or add vcpupin xml of "
"a running domain")); "a running domain"));
...@@ -3809,7 +3820,18 @@ qemudDomainPinVcpuFlags(virDomainPtr dom, ...@@ -3809,7 +3820,18 @@ qemudDomainPinVcpuFlags(virDomainPtr dom,
goto cleanup; goto cleanup;
} }
} else { } else {
if (virDomainVcpuPinAdd(persistentDef, cpumap, maplen, vcpu) < 0) { if (!persistentDef->cputune.vcpupin) {
if (VIR_ALLOC(persistentDef->cputune.vcpupin) < 0) {
virReportOOMError();
goto cleanup;
}
persistentDef->cputune.nvcpupin = 0;
}
if (virDomainVcpuPinAdd(persistentDef->cputune.vcpupin,
&persistentDef->cputune.nvcpupin,
cpumap,
maplen,
vcpu) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to update or add vcpupin xml of " _("failed to update or add vcpupin xml of "
"a persistent domain")); "a persistent domain"));
......
...@@ -2296,7 +2296,18 @@ xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu, ...@@ -2296,7 +2296,18 @@ xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
goto cleanup; goto cleanup;
if (ret == 0) { if (ret == 0) {
if (virDomainVcpuPinAdd(def, cpumap, maplen, vcpu) < 0) { if (!def->cputune.vcpupin) {
if (VIR_ALLOC(def->cputune.vcpupin) < 0) {
virReportOOMError();
goto cleanup;
}
def->cputune.nvcpupin = 0;
}
if (virDomainVcpuPinAdd(def->cputune.vcpupin,
&def->cputune.nvcpupin,
cpumap,
maplen,
vcpu) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("failed to add vcpupin xml entry")); "%s", _("failed to add vcpupin xml entry"));
return -1; return -1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册