mirror of https://github.com/xqemu/xqemu.git
Merge remote-tracking branch 'luiz/queue/qmp' into staging
# By Corey Bryant (2) and others # Via Luiz Capitulino * luiz/queue/qmp: New QMP command query-cpu-max and HMP command cpu_max qmp: fix handling of boolean values in qmp-shell QMP: TPM QMP and man page documentation updates QMP: Remove duplicate TPM type from query-tpm
This commit is contained in:
commit
2fd1a053e3
|
@ -101,7 +101,12 @@ class QMPShell(qmp.QEMUMonitorProtocol):
|
||||||
try:
|
try:
|
||||||
value = int(opt[1])
|
value = int(opt[1])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
value = opt[1]
|
if opt[1] == 'true':
|
||||||
|
value = True
|
||||||
|
elif opt[1] == 'false':
|
||||||
|
value = False
|
||||||
|
else:
|
||||||
|
value = opt[1]
|
||||||
qmpcmd['arguments'][opt[0]] = value
|
qmpcmd['arguments'][opt[0]] = value
|
||||||
return qmpcmd
|
return qmpcmd
|
||||||
|
|
||||||
|
|
|
@ -1643,6 +1643,8 @@ show qdev device model list
|
||||||
show roms
|
show roms
|
||||||
@item info tpm
|
@item info tpm
|
||||||
show the TPM device
|
show the TPM device
|
||||||
|
@item info cpu_max
|
||||||
|
show the number of CPUs supported by the machine being emulated.
|
||||||
@end table
|
@end table
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
|
|
16
hmp.c
16
hmp.c
|
@ -631,11 +631,11 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict)
|
||||||
c, TpmModel_lookup[ti->model]);
|
c, TpmModel_lookup[ti->model]);
|
||||||
|
|
||||||
monitor_printf(mon, " \\ %s: type=%s",
|
monitor_printf(mon, " \\ %s: type=%s",
|
||||||
ti->id, TpmType_lookup[ti->type]);
|
ti->id, TpmTypeOptionsKind_lookup[ti->options->kind]);
|
||||||
|
|
||||||
switch (ti->tpm_options->kind) {
|
switch (ti->options->kind) {
|
||||||
case TPM_TYPE_OPTIONS_KIND_TPM_PASSTHROUGH_OPTIONS:
|
case TPM_TYPE_OPTIONS_KIND_PASSTHROUGH:
|
||||||
tpo = ti->tpm_options->tpm_passthrough_options;
|
tpo = ti->options->passthrough;
|
||||||
monitor_printf(mon, "%s%s%s%s",
|
monitor_printf(mon, "%s%s%s%s",
|
||||||
tpo->has_path ? ",path=" : "",
|
tpo->has_path ? ",path=" : "",
|
||||||
tpo->has_path ? tpo->path : "",
|
tpo->has_path ? tpo->path : "",
|
||||||
|
@ -748,6 +748,14 @@ void hmp_ringbuf_read(Monitor *mon, const QDict *qdict)
|
||||||
g_free(data);
|
g_free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hmp_query_cpu_max(Monitor *mon, const QDict *qdict)
|
||||||
|
{
|
||||||
|
int cpu_max;
|
||||||
|
|
||||||
|
cpu_max = qmp_query_cpu_max(NULL);
|
||||||
|
monitor_printf(mon, "Maximum number of CPUs is %d\n", cpu_max);
|
||||||
|
}
|
||||||
|
|
||||||
static void hmp_cont_cb(void *opaque, int err)
|
static void hmp_cont_cb(void *opaque, int err)
|
||||||
{
|
{
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
|
1
hmp.h
1
hmp.h
|
@ -42,6 +42,7 @@ void hmp_stop(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_system_reset(Monitor *mon, const QDict *qdict);
|
void hmp_system_reset(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_system_powerdown(Monitor *mon, const QDict *qdict);
|
void hmp_system_powerdown(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_cpu(Monitor *mon, const QDict *qdict);
|
void hmp_cpu(Monitor *mon, const QDict *qdict);
|
||||||
|
void hmp_query_cpu_max(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_memsave(Monitor *mon, const QDict *qdict);
|
void hmp_memsave(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_pmemsave(Monitor *mon, const QDict *qdict);
|
void hmp_pmemsave(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_ringbuf_write(Monitor *mon, const QDict *qdict);
|
void hmp_ringbuf_write(Monitor *mon, const QDict *qdict);
|
||||||
|
|
|
@ -2745,6 +2745,13 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.help = "show the TPM device",
|
.help = "show the TPM device",
|
||||||
.mhandler.cmd = hmp_info_tpm,
|
.mhandler.cmd = hmp_info_tpm,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "cpu_max",
|
||||||
|
.args_type = "",
|
||||||
|
.params = "",
|
||||||
|
.help = "Get maximum number of VCPUs supported by machine",
|
||||||
|
.mhandler.cmd = hmp_query_cpu_max,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = NULL,
|
.name = NULL,
|
||||||
},
|
},
|
||||||
|
|
|
@ -1831,6 +1831,17 @@
|
||||||
##
|
##
|
||||||
{ 'command': 'query-migrate-cache-size', 'returns': 'int' }
|
{ 'command': 'query-migrate-cache-size', 'returns': 'int' }
|
||||||
|
|
||||||
|
##
|
||||||
|
## @query-cpu-max
|
||||||
|
##
|
||||||
|
## query maximum number of CPUs supported by machine
|
||||||
|
##
|
||||||
|
## Returns: number of CPUs
|
||||||
|
##
|
||||||
|
## Since: 1.5
|
||||||
|
###
|
||||||
|
{ 'command': 'query-cpu-max', 'returns': 'int' }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @ObjectPropertyInfo:
|
# @ObjectPropertyInfo:
|
||||||
#
|
#
|
||||||
|
@ -3403,13 +3414,12 @@
|
||||||
#
|
#
|
||||||
# A union referencing different TPM backend types' configuration options
|
# A union referencing different TPM backend types' configuration options
|
||||||
#
|
#
|
||||||
# @tpm-passthough-options: TPMPassthroughOptions describing the TPM
|
# @passthrough: The configuration options for the TPM passthrough type
|
||||||
# passthrough configuration options
|
|
||||||
#
|
#
|
||||||
# Since: 1.5
|
# Since: 1.5
|
||||||
##
|
##
|
||||||
{ 'union': 'TpmTypeOptions',
|
{ 'union': 'TpmTypeOptions',
|
||||||
'data': { 'tpm-passthrough-options' : 'TPMPassthroughOptions' } }
|
'data': { 'passthrough' : 'TPMPassthroughOptions' } }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @TpmInfo:
|
# @TpmInfo:
|
||||||
|
@ -3420,17 +3430,14 @@
|
||||||
#
|
#
|
||||||
# @model: The TPM frontend model
|
# @model: The TPM frontend model
|
||||||
#
|
#
|
||||||
# @type: The TPM (backend) type being used
|
# @options: The TPM (backend) type configuration options
|
||||||
#
|
|
||||||
# @tpm-options: The TPM (backend) type configuration options
|
|
||||||
#
|
#
|
||||||
# Since: 1.5
|
# Since: 1.5
|
||||||
##
|
##
|
||||||
{ 'type': 'TPMInfo',
|
{ 'type': 'TPMInfo',
|
||||||
'data': {'id': 'str',
|
'data': {'id': 'str',
|
||||||
'model': 'TpmModel',
|
'model': 'TpmModel',
|
||||||
'type': 'TpmType',
|
'options': 'TpmTypeOptions' } }
|
||||||
'tpm-options': 'TpmTypeOptions' } }
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# @query-tpm:
|
# @query-tpm:
|
||||||
|
|
|
@ -2241,7 +2241,8 @@ Backend type must be:
|
||||||
@option{passthrough}.
|
@option{passthrough}.
|
||||||
|
|
||||||
The specific backend type will determine the applicable options.
|
The specific backend type will determine the applicable options.
|
||||||
The @code{-tpmdev} option requires a @code{-device} option.
|
The @code{-tpmdev} option creates the TPM backend and requires a
|
||||||
|
@code{-device} option that specifies the TPM frontend interface model.
|
||||||
|
|
||||||
Options to each backend are described below.
|
Options to each backend are described below.
|
||||||
|
|
||||||
|
|
|
@ -382,6 +382,28 @@ Example:
|
||||||
|
|
||||||
Note: CPUs' indexes are obtained with the 'query-cpus' command.
|
Note: CPUs' indexes are obtained with the 'query-cpus' command.
|
||||||
|
|
||||||
|
EQMP
|
||||||
|
|
||||||
|
{
|
||||||
|
.name = "query-cpu-max",
|
||||||
|
.args_type = "",
|
||||||
|
.mhandler.cmd_new = qmp_marshal_input_query_cpu_max,
|
||||||
|
},
|
||||||
|
|
||||||
|
SQMP
|
||||||
|
query-cpu-max
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Get the maximum CPUs supported by the machine being currently
|
||||||
|
emulated.
|
||||||
|
|
||||||
|
Returns json-int.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
-> { "execute": "query-cpu-max" }
|
||||||
|
<- { "return": 255 }
|
||||||
|
|
||||||
EQMP
|
EQMP
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -2721,18 +2743,76 @@ EQMP
|
||||||
.mhandler.cmd_new = qmp_marshal_input_query_tpm,
|
.mhandler.cmd_new = qmp_marshal_input_query_tpm,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
SQMP
|
||||||
|
query-tpm
|
||||||
|
---------
|
||||||
|
|
||||||
|
Return information about the TPM device.
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
-> { "execute": "query-tpm" }
|
||||||
|
<- { "return":
|
||||||
|
[
|
||||||
|
{ "model": "tpm-tis",
|
||||||
|
"options":
|
||||||
|
{ "type": "passthrough",
|
||||||
|
"data":
|
||||||
|
{ "cancel-path": "/sys/class/misc/tpm0/device/cancel",
|
||||||
|
"path": "/dev/tpm0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"id": "tpm0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
EQMP
|
||||||
|
|
||||||
{
|
{
|
||||||
.name = "query-tpm-models",
|
.name = "query-tpm-models",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.mhandler.cmd_new = qmp_marshal_input_query_tpm_models,
|
.mhandler.cmd_new = qmp_marshal_input_query_tpm_models,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
SQMP
|
||||||
|
query-tpm-models
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Return a list of supported TPM models.
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
-> { "execute": "query-tpm-models" }
|
||||||
|
<- { "return": [ "tpm-tis" ] }
|
||||||
|
|
||||||
|
EQMP
|
||||||
|
|
||||||
{
|
{
|
||||||
.name = "query-tpm-types",
|
.name = "query-tpm-types",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.mhandler.cmd_new = qmp_marshal_input_query_tpm_types,
|
.mhandler.cmd_new = qmp_marshal_input_query_tpm_types,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
SQMP
|
||||||
|
query-tpm-types
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Return a list of supported TPM types.
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
-> { "execute": "query-tpm-types" }
|
||||||
|
<- { "return": [ "passthrough" ] }
|
||||||
|
|
||||||
|
EQMP
|
||||||
|
|
||||||
{
|
{
|
||||||
.name = "chardev-add",
|
.name = "chardev-add",
|
||||||
.args_type = "id:s,backend:q",
|
.args_type = "id:s,backend:q",
|
||||||
|
|
|
@ -257,14 +257,13 @@ static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv)
|
||||||
|
|
||||||
res->id = g_strdup(drv->id);
|
res->id = g_strdup(drv->id);
|
||||||
res->model = drv->fe_model;
|
res->model = drv->fe_model;
|
||||||
res->type = drv->ops->type;
|
res->options = g_new0(TpmTypeOptions, 1);
|
||||||
res->tpm_options = g_new0(TpmTypeOptions, 1);
|
|
||||||
|
|
||||||
switch (res->type) {
|
switch (drv->ops->type) {
|
||||||
case TPM_TYPE_PASSTHROUGH:
|
case TPM_TYPE_PASSTHROUGH:
|
||||||
res->tpm_options->kind = TPM_TYPE_OPTIONS_KIND_TPM_PASSTHROUGH_OPTIONS;
|
res->options->kind = TPM_TYPE_OPTIONS_KIND_PASSTHROUGH;
|
||||||
tpo = g_new0(TPMPassthroughOptions, 1);
|
tpo = g_new0(TPMPassthroughOptions, 1);
|
||||||
res->tpm_options->tpm_passthrough_options = tpo;
|
res->options->passthrough = tpo;
|
||||||
if (drv->path) {
|
if (drv->path) {
|
||||||
tpo->path = g_strdup(drv->path);
|
tpo->path = g_strdup(drv->path);
|
||||||
tpo->has_path = true;
|
tpo->has_path = true;
|
||||||
|
|
5
vl.c
5
vl.c
|
@ -662,6 +662,11 @@ StatusInfo *qmp_query_status(Error **errp)
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t qmp_query_cpu_max(Error **errp)
|
||||||
|
{
|
||||||
|
return current_machine->max_cpus;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************/
|
/***********************************************************/
|
||||||
/* real time host monotonic timer */
|
/* real time host monotonic timer */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue