Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
66acbe60
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
66acbe60
编写于
6月 20, 2016
作者:
P
Peter Krempa
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qemu: Implement virDomainSetGuestVcpus
Allow modification of specific vCPU states via the guest agent.
上级
a24edc48
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
83 addition
and
0 deletion
+83
-0
src/qemu/qemu_driver.c
src/qemu/qemu_driver.c
+83
-0
未找到文件。
src/qemu/qemu_driver.c
浏览文件 @
66acbe60
...
...
@@ -19839,6 +19839,88 @@ qemuDomainGetGuestVcpus(virDomainPtr dom,
}
static int
qemuDomainSetGuestVcpus(virDomainPtr dom,
const char *cpumap,
int state,
unsigned int flags)
{
virQEMUDriverPtr driver = dom->conn->privateData;
virDomainObjPtr vm = NULL;
virBitmapPtr map = NULL;
qemuAgentCPUInfoPtr info = NULL;
int ninfo = 0;
size_t i;
int ret = -1;
virCheckFlags(0, -1);
if (state != 0 && state != 1) {
virReportInvalidArg(state, "%s", _("unsupported state value"));
return -1;
}
if (virBitmapParse(cpumap, &map, QEMU_GUEST_VCPU_MAX_ID) < 0)
goto cleanup;
if (!(vm = qemuDomObjFromDomain(dom)))
goto cleanup;
if (virDomainSetGuestVcpusEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
if (!qemuDomainAgentAvailable(vm, true))
goto endjob;
qemuDomainObjEnterAgent(vm);
ninfo = qemuAgentGetVCPUs(qemuDomainGetAgent(vm), &info);
qemuDomainObjExitAgent(vm);
if (ninfo < 0)
goto endjob;
for (i = 0; i < ninfo; i++) {
if (!virBitmapIsBitSet(map, info[i].id))
continue;
if (!state && !info[i].offlinable) {
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("vCPU '%u' is not offlinable"), info[i].id);
goto endjob;
}
info[i].online = !!state;
info[i].modified = true;
ignore_value(virBitmapClearBit(map, info[i].id));
}
if (!virBitmapIsAllClear(map)) {
char *tmp = virBitmapFormat(map);
virReportError(VIR_ERR_INVALID_ARG,
_("guest is missing vCPUs '%s'"), NULLSTR(tmp));
VIR_FREE(tmp);
goto endjob;
}
qemuDomainObjEnterAgent(vm);
ret = qemuAgentSetVCPUs(qemuDomainGetAgent(vm), info, ninfo);
qemuDomainObjExitAgent(vm);
endjob:
qemuDomainObjEndJob(driver, vm);
cleanup:
VIR_FREE(info);
virBitmapFree(map);
virDomainObjEndAPI(&vm);
return ret;
}
static virHypervisorDriver qemuHypervisorDriver = {
.name = QEMU_DRIVER_NAME,
.connectOpen = qemuConnectOpen, /* 0.2.0 */
...
...
@@ -20051,6 +20133,7 @@ static virHypervisorDriver qemuHypervisorDriver = {
.domainRename = qemuDomainRename, /* 1.2.19 */
.domainMigrateStartPostCopy = qemuDomainMigrateStartPostCopy, /* 1.3.3 */
.domainGetGuestVcpus = qemuDomainGetGuestVcpus, /* 2.0.0 */
.domainSetGuestVcpus = qemuDomainSetGuestVcpus, /* 2.0.0 */
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录