Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
2fa7db93
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2fa7db93
编写于
8月 16, 2016
作者:
P
Peter Krempa
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qemu: driver: Extract setting of live vcpu count
The live code does ugly things. Contain it in a separate function.
上级
f10da2f5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
68 addition
and
53 deletion
+68
-53
src/qemu/qemu_driver.c
src/qemu/qemu_driver.c
+68
-53
未找到文件。
src/qemu/qemu_driver.c
浏览文件 @
2fa7db93
...
...
@@ -4791,6 +4791,72 @@ qemuDomainSetVcpusMax(virQEMUDriverPtr driver,
}
static int
qemuDomainSetVcpusLive(virQEMUDriverPtr driver,
virQEMUDriverConfigPtr cfg,
virDomainObjPtr vm,
unsigned int nvcpus)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
size_t i;
virCgroupPtr cgroup_temp = NULL;
char *mem_mask = NULL;
char *all_nodes_str = NULL;
virBitmapPtr all_nodes = NULL;
virErrorPtr err = NULL;
int ret = -1;
if (virNumaIsAvailable() &&
virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0,
false, &cgroup_temp) < 0)
goto cleanup;
if (!(all_nodes = virNumaGetHostNodeset()))
goto cleanup;
if (!(all_nodes_str = virBitmapFormat(all_nodes)))
goto cleanup;
if (virCgroupGetCpusetMems(cgroup_temp, &mem_mask) < 0 ||
virCgroupSetCpusetMems(cgroup_temp, all_nodes_str) < 0)
goto cleanup;
}
if (nvcpus > virDomainDefGetVcpus(vm->def)) {
for (i = virDomainDefGetVcpus(vm->def); i < nvcpus; i++) {
if (qemuDomainHotplugAddVcpu(driver, vm, i) < 0)
goto cleanup;
}
} else {
for (i = virDomainDefGetVcpus(vm->def) - 1; i >= nvcpus; i--) {
if (qemuDomainHotplugDelVcpu(driver, vm, i) < 0)
goto cleanup;
}
}
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
goto cleanup;
ret = 0;
cleanup:
if (mem_mask) {
err = virSaveLastError();
virCgroupSetCpusetMems(cgroup_temp, mem_mask);
virSetError(err);
virFreeError(err);
VIR_FREE(mem_mask);
}
VIR_FREE(all_nodes_str);
virBitmapFree(all_nodes);
virCgroupFree(&cgroup_temp);
return ret;
}
static int
qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
unsigned int flags)
...
...
@@ -4801,13 +4867,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
virDomainDefPtr persistentDef;
int ret = -1;
virQEMUDriverConfigPtr cfg = NULL;
qemuDomainObjPrivatePtr priv;
size_t i;
virCgroupPtr cgroup_temp = NULL;
char *mem_mask = NULL;
char *all_nodes_str = NULL;
virBitmapPtr all_nodes = NULL;
virErrorPtr err = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG |
...
...
@@ -4822,8 +4881,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
if (virDomainSetVcpusFlagsEnsureACL(dom->conn, vm->def, flags) < 0)
goto cleanup;
priv = vm->privateData;
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
...
...
@@ -4860,39 +4917,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
}
}
if (def && virNumaIsAvailable() &&
virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) {
if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_THREAD_EMULATOR, 0,
false, &cgroup_temp) < 0)
goto endjob;
if (!(all_nodes = virNumaGetHostNodeset()))
goto endjob;
if (!(all_nodes_str = virBitmapFormat(all_nodes)))
goto endjob;
if (virCgroupGetCpusetMems(cgroup_temp, &mem_mask) < 0 ||
virCgroupSetCpusetMems(cgroup_temp, all_nodes_str) < 0)
goto endjob;
}
if (def) {
if (nvcpus > virDomainDefGetVcpus(def)) {
for (i = virDomainDefGetVcpus(def); i < nvcpus; i++) {
if (qemuDomainHotplugAddVcpu(driver, vm, i) < 0)
goto endjob;
}
} else {
for (i = virDomainDefGetVcpus(def) - 1; i >= nvcpus; i--) {
if (qemuDomainHotplugDelVcpu(driver, vm, i) < 0)
goto endjob;
}
}
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
goto endjob;
}
if (def && qemuDomainSetVcpusLive(driver, cfg, vm, nvcpus) < 0)
goto endjob;
if (persistentDef) {
if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0)
...
...
@@ -4906,21 +4932,10 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
ret = 0;
endjob:
if (mem_mask) {
err = virSaveLastError();
virCgroupSetCpusetMems(cgroup_temp, mem_mask);
virSetError(err);
virFreeError(err);
}
qemuDomainObjEndJob(driver, vm);
cleanup:
virDomainObjEndAPI(&vm);
VIR_FREE(mem_mask);
VIR_FREE(all_nodes_str);
virBitmapFree(all_nodes);
virCgroupFree(&cgroup_temp);
virObjectUnref(cfg);
return ret;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录