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:
Anthony Liguori 2013-03-26 09:25:45 -05:00
commit 2fd1a053e3
10 changed files with 134 additions and 19 deletions

View file

@ -101,7 +101,12 @@ class QMPShell(qmp.QEMUMonitorProtocol):
try:
value = int(opt[1])
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
return qmpcmd

View file

@ -1643,6 +1643,8 @@ show qdev device model list
show roms
@item info tpm
show the TPM device
@item info cpu_max
show the number of CPUs supported by the machine being emulated.
@end table
ETEXI

16
hmp.c
View file

@ -631,11 +631,11 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict)
c, TpmModel_lookup[ti->model]);
monitor_printf(mon, " \\ %s: type=%s",
ti->id, TpmType_lookup[ti->type]);
ti->id, TpmTypeOptionsKind_lookup[ti->options->kind]);
switch (ti->tpm_options->kind) {
case TPM_TYPE_OPTIONS_KIND_TPM_PASSTHROUGH_OPTIONS:
tpo = ti->tpm_options->tpm_passthrough_options;
switch (ti->options->kind) {
case TPM_TYPE_OPTIONS_KIND_PASSTHROUGH:
tpo = ti->options->passthrough;
monitor_printf(mon, "%s%s%s%s",
tpo->has_path ? ",path=" : "",
tpo->has_path ? tpo->path : "",
@ -748,6 +748,14 @@ void hmp_ringbuf_read(Monitor *mon, const QDict *qdict)
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)
{
if (!err) {

1
hmp.h
View file

@ -42,6 +42,7 @@ void hmp_stop(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_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_pmemsave(Monitor *mon, const QDict *qdict);
void hmp_ringbuf_write(Monitor *mon, const QDict *qdict);

View file

@ -2745,6 +2745,13 @@ static mon_cmd_t info_cmds[] = {
.help = "show the TPM device",
.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,
},

View file

@ -1831,6 +1831,17 @@
##
{ '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:
#
@ -3403,13 +3414,12 @@
#
# A union referencing different TPM backend types' configuration options
#
# @tpm-passthough-options: TPMPassthroughOptions describing the TPM
# passthrough configuration options
# @passthrough: The configuration options for the TPM passthrough type
#
# Since: 1.5
##
{ 'union': 'TpmTypeOptions',
'data': { 'tpm-passthrough-options' : 'TPMPassthroughOptions' } }
'data': { 'passthrough' : 'TPMPassthroughOptions' } }
##
# @TpmInfo:
@ -3420,17 +3430,14 @@
#
# @model: The TPM frontend model
#
# @type: The TPM (backend) type being used
#
# @tpm-options: The TPM (backend) type configuration options
# @options: The TPM (backend) type configuration options
#
# Since: 1.5
##
{ 'type': 'TPMInfo',
'data': {'id': 'str',
'model': 'TpmModel',
'type': 'TpmType',
'tpm-options': 'TpmTypeOptions' } }
'options': 'TpmTypeOptions' } }
##
# @query-tpm:

View file

@ -2241,7 +2241,8 @@ Backend type must be:
@option{passthrough}.
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.

View file

@ -382,6 +382,28 @@ Example:
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
{
@ -2721,18 +2743,76 @@ EQMP
.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",
.args_type = "",
.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",
.args_type = "",
.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",
.args_type = "id:s,backend:q",

View file

@ -257,14 +257,13 @@ static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv)
res->id = g_strdup(drv->id);
res->model = drv->fe_model;
res->type = drv->ops->type;
res->tpm_options = g_new0(TpmTypeOptions, 1);
res->options = g_new0(TpmTypeOptions, 1);
switch (res->type) {
switch (drv->ops->type) {
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);
res->tpm_options->tpm_passthrough_options = tpo;
res->options->passthrough = tpo;
if (drv->path) {
tpo->path = g_strdup(drv->path);
tpo->has_path = true;

5
vl.c
View file

@ -662,6 +662,11 @@ StatusInfo *qmp_query_status(Error **errp)
return info;
}
int64_t qmp_query_cpu_max(Error **errp)
{
return current_machine->max_cpus;
}
/***********************************************************/
/* real time host monotonic timer */