提交 b0b58226 编写于 作者: C Collin Walling 提交者: Jiri Denemark

qemu_monitor: implement query-cpu-model-baseline

Interfaces with QEMU to baseline CPU models. The command takes two
CPU models, A and B, that are given a model name and an optional list
of CPU features. Through the query-cpu-model-baseline command issued
via QMP, a result is produced that contains a new baselined CPU model
that is guaranteed to run on both A and B.
Signed-off-by: NCollin Walling <walling@linux.ibm.com>
Reviewed-by: NDaniel Henrique Barboza <danielh413@gmail.com>
Message-Id: <1568924706-2311-8-git-send-email-walling@linux.ibm.com>
Reviewed-by: NJiri Denemark <jdenemar@redhat.com>
上级 a9e723c8
...@@ -3561,6 +3561,20 @@ qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, ...@@ -3561,6 +3561,20 @@ qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon,
} }
int
qemuMonitorGetCPUModelBaseline(qemuMonitorPtr mon,
virCPUDefPtr cpu_a,
virCPUDefPtr cpu_b,
qemuMonitorCPUModelInfoPtr *baseline)
{
VIR_DEBUG("cpu_a=%p cpu_b=%p", cpu_a, cpu_b);
QEMU_CHECK_MONITOR(mon);
return qemuMonitorJSONGetCPUModelBaseline(mon, cpu_a, cpu_b, baseline);
}
void void
qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info) qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info)
{ {
......
...@@ -1153,6 +1153,11 @@ int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, ...@@ -1153,6 +1153,11 @@ int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon,
void qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info); void qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info);
int qemuMonitorGetCPUModelBaseline(qemuMonitorPtr mon,
virCPUDefPtr cpu_a,
virCPUDefPtr cpu_b,
qemuMonitorCPUModelInfoPtr *baseline);
qemuMonitorCPUModelInfoPtr qemuMonitorCPUModelInfoPtr
qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig); qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig);
......
...@@ -5877,6 +5877,48 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, ...@@ -5877,6 +5877,48 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
} }
int
qemuMonitorJSONGetCPUModelBaseline(qemuMonitorPtr mon,
virCPUDefPtr cpu_a,
virCPUDefPtr cpu_b,
qemuMonitorCPUModelInfoPtr *baseline)
{
VIR_AUTOPTR(virJSONValue) model_a = NULL;
VIR_AUTOPTR(virJSONValue) model_b = NULL;
VIR_AUTOPTR(virJSONValue) cmd = NULL;
VIR_AUTOPTR(virJSONValue) reply = NULL;
virJSONValuePtr data;
virJSONValuePtr cpu_model;
virJSONValuePtr cpu_props = NULL;
const char *cpu_name = "";
if (!(model_a = qemuMonitorJSONMakeCPUModel(cpu_a, true)) ||
!(model_b = qemuMonitorJSONMakeCPUModel(cpu_b, true)))
return -1;
if (!(cmd = qemuMonitorJSONMakeCommand("query-cpu-model-baseline",
"a:modela", &model_a,
"a:modelb", &model_b,
NULL)))
return -1;
if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
return -1;
if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_OBJECT) < 0)
return -1;
data = virJSONValueObjectGetObject(reply, "return");
if (qemuMonitorJSONParseCPUModelData(data, "query-cpu-model-baseline",
false, &cpu_model, &cpu_props,
&cpu_name) < 0)
return -1;
return qemuMonitorJSONParseCPUModel(cpu_name, cpu_props, baseline);
}
int qemuMonitorJSONGetCommands(qemuMonitorPtr mon, int qemuMonitorJSONGetCommands(qemuMonitorPtr mon,
char ***commands) char ***commands)
{ {
......
...@@ -387,6 +387,12 @@ int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon, ...@@ -387,6 +387,12 @@ int qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
qemuMonitorCPUModelInfoPtr *model_info) qemuMonitorCPUModelInfoPtr *model_info)
ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(6); ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(6);
int qemuMonitorJSONGetCPUModelBaseline(qemuMonitorPtr mon,
virCPUDefPtr cpu_a,
virCPUDefPtr cpu_b,
qemuMonitorCPUModelInfoPtr *baseline)
ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
int qemuMonitorJSONGetCommands(qemuMonitorPtr mon, int qemuMonitorJSONGetCommands(qemuMonitorPtr mon,
char ***commands) char ***commands)
ATTRIBUTE_NONNULL(2); ATTRIBUTE_NONNULL(2);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册