2020-03-06 18:17:44 +01:00
|
|
|
HXCOMM Use DEFHEADING() to define headings in both help text and rST.
|
|
|
|
HXCOMM Text between SRST and ERST is copied to the rST version and
|
|
|
|
HXCOMM discarded from C version.
|
2015-09-10 17:38:58 +02:00
|
|
|
HXCOMM DEF(command, args, callback, arg_string, help) is used to construct
|
|
|
|
HXCOMM monitor info commands
|
2020-03-06 18:17:44 +01:00
|
|
|
HXCOMM HXCOMM can be used for comments, discarded from both rST and C.
|
2020-02-28 16:36:07 +01:00
|
|
|
HXCOMM
|
|
|
|
HXCOMM In this file, generally SRST fragments should have two extra
|
|
|
|
HXCOMM spaces of indent, so that the documentation list item for "info foo"
|
|
|
|
HXCOMM appears inside the documentation list item for the top level
|
|
|
|
HXCOMM "info" documentation entry. The exception is the first SRST
|
|
|
|
HXCOMM fragment that defines that top level entry.
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info`` *subcommand*
|
|
|
|
Show various information about the system state.
|
|
|
|
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "version",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the version of QEMU",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_version,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info version``
|
|
|
|
Show the version of QEMU.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "network",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the network state",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_network,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info network``
|
|
|
|
Show the network state.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "chardev",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the character devices",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_chardev,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info chardev``
|
|
|
|
Show the character devices.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "block",
|
|
|
|
.args_type = "nodes:-n,verbose:-v,device:B?",
|
|
|
|
.params = "[-n] [-v] [device]",
|
|
|
|
.help = "show info of one block device or all block devices "
|
|
|
|
"(-n: show named nodes; -v: show details)",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_block,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info block``
|
|
|
|
Show info of one block device or all block devices.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "blockstats",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show block device statistics",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_blockstats,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info blockstats``
|
|
|
|
Show block device statistics.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "block-jobs",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show progress of ongoing block device operations",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_block_jobs,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info block-jobs``
|
|
|
|
Show progress of ongoing block device operations.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "registers",
|
2017-06-08 07:41:16 +02:00
|
|
|
.args_type = "cpustate_all:-a",
|
|
|
|
.params = "[-a]",
|
|
|
|
.help = "show the cpu registers (-a: all - show register info for all cpus)",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_registers,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info registers``
|
|
|
|
Show the cpu registers.
|
|
|
|
ERST
|
2015-09-22 15:18:18 +02:00
|
|
|
|
|
|
|
#if defined(TARGET_I386)
|
|
|
|
{
|
|
|
|
.name = "lapic",
|
2017-07-26 08:18:37 +02:00
|
|
|
.args_type = "apic-id:i?",
|
|
|
|
.params = "[apic-id]",
|
|
|
|
.help = "show local apic state (apic-id: local apic to read, default is which of current CPU)",
|
|
|
|
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_local_apic,
|
2015-09-22 15:18:18 +02:00
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info lapic``
|
|
|
|
Show local APIC state
|
|
|
|
ERST
|
2015-09-22 15:18:20 +02:00
|
|
|
|
2015-09-10 17:38:58 +02:00
|
|
|
{
|
|
|
|
.name = "cpus",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show infos for each CPU",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_cpus,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info cpus``
|
|
|
|
Show infos for each CPU.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "history",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the command line history",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_history,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info history``
|
|
|
|
Show the command line history.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "irq",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the interrupts statistics (if available)",
|
2021-09-08 11:35:43 +02:00
|
|
|
.cmd_info_hrt = qmp_x_query_irq,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info irq``
|
|
|
|
Show the interrupts statistics (if available).
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "pic",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
2016-09-26 22:23:28 +02:00
|
|
|
.help = "show PIC state",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_pic,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info pic``
|
|
|
|
Show PIC state.
|
|
|
|
ERST
|
2019-03-11 11:29:09 +01:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "rdma",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show RDMA state",
|
2021-09-08 11:35:43 +02:00
|
|
|
.cmd_info_hrt = qmp_x_query_rdma,
|
2019-03-11 11:29:09 +01:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info rdma``
|
|
|
|
Show RDMA state.
|
|
|
|
ERST
|
2015-09-18 17:18:29 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "pci",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show PCI info",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_pci,
|
2015-09-18 17:18:29 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info pci``
|
|
|
|
Show PCI information.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
#if defined(TARGET_I386) || defined(TARGET_SH4) || defined(TARGET_SPARC) || \
|
2018-01-18 20:38:46 +01:00
|
|
|
defined(TARGET_PPC) || defined(TARGET_XTENSA) || defined(TARGET_M68K)
|
2015-09-10 17:38:58 +02:00
|
|
|
{
|
|
|
|
.name = "tlb",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show virtual to physical memory mappings",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_tlb,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info tlb``
|
|
|
|
Show virtual to physical memory mappings.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2019-08-14 17:33:32 +02:00
|
|
|
#if defined(TARGET_I386) || defined(TARGET_RISCV)
|
2015-09-10 17:38:58 +02:00
|
|
|
{
|
|
|
|
.name = "mem",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the active virtual memory mappings",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_mem,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info mem``
|
|
|
|
Show the active virtual memory mappings.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "mtree",
|
memory: Make 'info mtree' not display disabled regions by default
We might have many disabled memory regions, making the 'info mtree'
output too verbose to be useful.
Remove the disabled regions in the default output, but allow the
monitor user to display them using the '-D' option.
Before:
(qemu) info mtree
memory-region: system
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-0000000007ffffff (prio 0, ram): alias ram-below-4g @pc.ram 0000000000000000-0000000007ffffff
0000000000000000-ffffffffffffffff (prio -1, i/o): pci
00000000000a0000-00000000000bffff (prio 1, i/o): vga-lowmem
00000000000c0000-00000000000dffff (prio 1, rom): pc.rom
00000000000e0000-00000000000fffff (prio 1, rom): alias isa-bios @pc.bios 0000000000020000-000000000003ffff
00000000fffc0000-00000000ffffffff (prio 0, rom): pc.bios
00000000000a0000-00000000000bffff (prio 1, i/o): alias smram-region @pci 00000000000a0000-00000000000bffff
00000000000c0000-00000000000c3fff (prio 1, ram): alias pam-ram @pc.ram 00000000000c0000-00000000000c3fff [disabled]
00000000000c0000-00000000000c3fff (prio 1, ram): alias pam-pci @pc.ram 00000000000c0000-00000000000c3fff [disabled]
00000000000c0000-00000000000c3fff (prio 1, ram): alias pam-rom @pc.ram 00000000000c0000-00000000000c3fff [disabled]
00000000000c0000-00000000000c3fff (prio 1, i/o): alias pam-pci @pci 00000000000c0000-00000000000c3fff
00000000000c4000-00000000000c7fff (prio 1, ram): alias pam-ram @pc.ram 00000000000c4000-00000000000c7fff [disabled]
00000000000c4000-00000000000c7fff (prio 1, ram): alias pam-pci @pc.ram 00000000000c4000-00000000000c7fff [disabled]
00000000000c4000-00000000000c7fff (prio 1, ram): alias pam-rom @pc.ram 00000000000c4000-00000000000c7fff [disabled]
00000000000c4000-00000000000c7fff (prio 1, i/o): alias pam-pci @pci 00000000000c4000-00000000000c7fff
00000000000c8000-00000000000cbfff (prio 1, ram): alias pam-ram @pc.ram 00000000000c8000-00000000000cbfff [disabled]
00000000000c8000-00000000000cbfff (prio 1, ram): alias pam-pci @pc.ram 00000000000c8000-00000000000cbfff [disabled]
00000000000c8000-00000000000cbfff (prio 1, ram): alias pam-rom @pc.ram 00000000000c8000-00000000000cbfff [disabled]
00000000000c8000-00000000000cbfff (prio 1, i/o): alias pam-pci @pci 00000000000c8000-00000000000cbfff
00000000000cc000-00000000000cffff (prio 1, ram): alias pam-ram @pc.ram 00000000000cc000-00000000000cffff [disabled]
00000000000cc000-00000000000cffff (prio 1, ram): alias pam-pci @pc.ram 00000000000cc000-00000000000cffff [disabled]
00000000000cc000-00000000000cffff (prio 1, ram): alias pam-rom @pc.ram 00000000000cc000-00000000000cffff [disabled]
00000000000cc000-00000000000cffff (prio 1, i/o): alias pam-pci @pci 00000000000cc000-00000000000cffff
00000000000d0000-00000000000d3fff (prio 1, ram): alias pam-ram @pc.ram 00000000000d0000-00000000000d3fff [disabled]
00000000000d0000-00000000000d3fff (prio 1, ram): alias pam-pci @pc.ram 00000000000d0000-00000000000d3fff [disabled]
00000000000d0000-00000000000d3fff (prio 1, ram): alias pam-rom @pc.ram 00000000000d0000-00000000000d3fff [disabled]
00000000000d0000-00000000000d3fff (prio 1, i/o): alias pam-pci @pci 00000000000d0000-00000000000d3fff
00000000000d4000-00000000000d7fff (prio 1, ram): alias pam-ram @pc.ram 00000000000d4000-00000000000d7fff [disabled]
00000000000d4000-00000000000d7fff (prio 1, ram): alias pam-pci @pc.ram 00000000000d4000-00000000000d7fff [disabled]
00000000000d4000-00000000000d7fff (prio 1, ram): alias pam-rom @pc.ram 00000000000d4000-00000000000d7fff [disabled]
00000000000d4000-00000000000d7fff (prio 1, i/o): alias pam-pci @pci 00000000000d4000-00000000000d7fff
00000000000d8000-00000000000dbfff (prio 1, ram): alias pam-ram @pc.ram 00000000000d8000-00000000000dbfff [disabled]
00000000000d8000-00000000000dbfff (prio 1, ram): alias pam-pci @pc.ram 00000000000d8000-00000000000dbfff [disabled]
00000000000d8000-00000000000dbfff (prio 1, ram): alias pam-rom @pc.ram 00000000000d8000-00000000000dbfff [disabled]
00000000000d8000-00000000000dbfff (prio 1, i/o): alias pam-pci @pci 00000000000d8000-00000000000dbfff
00000000000dc000-00000000000dffff (prio 1, ram): alias pam-ram @pc.ram 00000000000dc000-00000000000dffff [disabled]
00000000000dc000-00000000000dffff (prio 1, ram): alias pam-pci @pc.ram 00000000000dc000-00000000000dffff [disabled]
00000000000dc000-00000000000dffff (prio 1, ram): alias pam-rom @pc.ram 00000000000dc000-00000000000dffff [disabled]
00000000000dc000-00000000000dffff (prio 1, i/o): alias pam-pci @pci 00000000000dc000-00000000000dffff
00000000000e0000-00000000000e3fff (prio 1, ram): alias pam-ram @pc.ram 00000000000e0000-00000000000e3fff [disabled]
00000000000e0000-00000000000e3fff (prio 1, ram): alias pam-pci @pc.ram 00000000000e0000-00000000000e3fff [disabled]
00000000000e0000-00000000000e3fff (prio 1, ram): alias pam-rom @pc.ram 00000000000e0000-00000000000e3fff [disabled]
00000000000e0000-00000000000e3fff (prio 1, i/o): alias pam-pci @pci 00000000000e0000-00000000000e3fff
00000000000e4000-00000000000e7fff (prio 1, ram): alias pam-ram @pc.ram 00000000000e4000-00000000000e7fff [disabled]
00000000000e4000-00000000000e7fff (prio 1, ram): alias pam-pci @pc.ram 00000000000e4000-00000000000e7fff [disabled]
00000000000e4000-00000000000e7fff (prio 1, ram): alias pam-rom @pc.ram 00000000000e4000-00000000000e7fff [disabled]
00000000000e4000-00000000000e7fff (prio 1, i/o): alias pam-pci @pci 00000000000e4000-00000000000e7fff
00000000000e8000-00000000000ebfff (prio 1, ram): alias pam-ram @pc.ram 00000000000e8000-00000000000ebfff [disabled]
00000000000e8000-00000000000ebfff (prio 1, ram): alias pam-pci @pc.ram 00000000000e8000-00000000000ebfff [disabled]
00000000000e8000-00000000000ebfff (prio 1, ram): alias pam-rom @pc.ram 00000000000e8000-00000000000ebfff [disabled]
00000000000e8000-00000000000ebfff (prio 1, i/o): alias pam-pci @pci 00000000000e8000-00000000000ebfff
00000000000ec000-00000000000effff (prio 1, ram): alias pam-ram @pc.ram 00000000000ec000-00000000000effff [disabled]
00000000000ec000-00000000000effff (prio 1, ram): alias pam-pci @pc.ram 00000000000ec000-00000000000effff [disabled]
00000000000ec000-00000000000effff (prio 1, ram): alias pam-rom @pc.ram 00000000000ec000-00000000000effff [disabled]
00000000000ec000-00000000000effff (prio 1, i/o): alias pam-pci @pci 00000000000ec000-00000000000effff
00000000000f0000-00000000000fffff (prio 1, ram): alias pam-ram @pc.ram 00000000000f0000-00000000000fffff [disabled]
00000000000f0000-00000000000fffff (prio 1, ram): alias pam-pci @pc.ram 00000000000f0000-00000000000fffff [disabled]
00000000000f0000-00000000000fffff (prio 1, ram): alias pam-rom @pc.ram 00000000000f0000-00000000000fffff [disabled]
00000000000f0000-00000000000fffff (prio 1, i/o): alias pam-pci @pci 00000000000f0000-00000000000fffff
00000000fec00000-00000000fec00fff (prio 0, i/o): ioapic
00000000fed00000-00000000fed003ff (prio 0, i/o): hpet
00000000fee00000-00000000feefffff (prio 4096, i/o): apic-msi
After:
(qemu) info mtree
memory-region: system
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-0000000007ffffff (prio 0, ram): alias ram-below-4g @pc.ram 0000000000000000-0000000007ffffff
0000000000000000-ffffffffffffffff (prio -1, i/o): pci
00000000000a0000-00000000000bffff (prio 1, i/o): vga-lowmem
00000000000c0000-00000000000dffff (prio 1, rom): pc.rom
00000000000e0000-00000000000fffff (prio 1, rom): alias isa-bios @pc.bios 0000000000020000-000000000003ffff
00000000fffc0000-00000000ffffffff (prio 0, rom): pc.bios
00000000000a0000-00000000000bffff (prio 1, i/o): alias smram-region @pci 00000000000a0000-00000000000bffff
00000000000c0000-00000000000c3fff (prio 1, i/o): alias pam-pci @pci 00000000000c0000-00000000000c3fff
00000000000c4000-00000000000c7fff (prio 1, i/o): alias pam-pci @pci 00000000000c4000-00000000000c7fff
00000000000c8000-00000000000cbfff (prio 1, i/o): alias pam-pci @pci 00000000000c8000-00000000000cbfff
00000000000cc000-00000000000cffff (prio 1, i/o): alias pam-pci @pci 00000000000cc000-00000000000cffff
00000000000d0000-00000000000d3fff (prio 1, i/o): alias pam-pci @pci 00000000000d0000-00000000000d3fff
00000000000d4000-00000000000d7fff (prio 1, i/o): alias pam-pci @pci 00000000000d4000-00000000000d7fff
00000000000d8000-00000000000dbfff (prio 1, i/o): alias pam-pci @pci 00000000000d8000-00000000000dbfff
00000000000dc000-00000000000dffff (prio 1, i/o): alias pam-pci @pci 00000000000dc000-00000000000dffff
00000000000e0000-00000000000e3fff (prio 1, i/o): alias pam-pci @pci 00000000000e0000-00000000000e3fff
00000000000e4000-00000000000e7fff (prio 1, i/o): alias pam-pci @pci 00000000000e4000-00000000000e7fff
00000000000e8000-00000000000ebfff (prio 1, i/o): alias pam-pci @pci 00000000000e8000-00000000000ebfff
00000000000ec000-00000000000effff (prio 1, i/o): alias pam-pci @pci 00000000000ec000-00000000000effff
00000000000f0000-00000000000fffff (prio 1, i/o): alias pam-pci @pci 00000000000f0000-00000000000fffff
00000000fec00000-00000000fec00fff (prio 0, i/o): ioapic
00000000fed00000-00000000fed003ff (prio 0, i/o): hpet
00000000fee00000-00000000feefffff (prio 4096, i/o): apic-msi
The old behavior is preserved using 'info mtree -D'.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-05-29 14:53:25 +02:00
|
|
|
.args_type = "flatview:-f,dispatch_tree:-d,owner:-o,disabled:-D",
|
|
|
|
.params = "[-f][-d][-o][-D]",
|
2017-09-21 10:51:06 +02:00
|
|
|
.help = "show memory tree (-f: dump flat view for address spaces;"
|
2018-06-04 05:25:11 +02:00
|
|
|
"-d: dump dispatch tree, valid with -f only);"
|
memory: Make 'info mtree' not display disabled regions by default
We might have many disabled memory regions, making the 'info mtree'
output too verbose to be useful.
Remove the disabled regions in the default output, but allow the
monitor user to display them using the '-D' option.
Before:
(qemu) info mtree
memory-region: system
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-0000000007ffffff (prio 0, ram): alias ram-below-4g @pc.ram 0000000000000000-0000000007ffffff
0000000000000000-ffffffffffffffff (prio -1, i/o): pci
00000000000a0000-00000000000bffff (prio 1, i/o): vga-lowmem
00000000000c0000-00000000000dffff (prio 1, rom): pc.rom
00000000000e0000-00000000000fffff (prio 1, rom): alias isa-bios @pc.bios 0000000000020000-000000000003ffff
00000000fffc0000-00000000ffffffff (prio 0, rom): pc.bios
00000000000a0000-00000000000bffff (prio 1, i/o): alias smram-region @pci 00000000000a0000-00000000000bffff
00000000000c0000-00000000000c3fff (prio 1, ram): alias pam-ram @pc.ram 00000000000c0000-00000000000c3fff [disabled]
00000000000c0000-00000000000c3fff (prio 1, ram): alias pam-pci @pc.ram 00000000000c0000-00000000000c3fff [disabled]
00000000000c0000-00000000000c3fff (prio 1, ram): alias pam-rom @pc.ram 00000000000c0000-00000000000c3fff [disabled]
00000000000c0000-00000000000c3fff (prio 1, i/o): alias pam-pci @pci 00000000000c0000-00000000000c3fff
00000000000c4000-00000000000c7fff (prio 1, ram): alias pam-ram @pc.ram 00000000000c4000-00000000000c7fff [disabled]
00000000000c4000-00000000000c7fff (prio 1, ram): alias pam-pci @pc.ram 00000000000c4000-00000000000c7fff [disabled]
00000000000c4000-00000000000c7fff (prio 1, ram): alias pam-rom @pc.ram 00000000000c4000-00000000000c7fff [disabled]
00000000000c4000-00000000000c7fff (prio 1, i/o): alias pam-pci @pci 00000000000c4000-00000000000c7fff
00000000000c8000-00000000000cbfff (prio 1, ram): alias pam-ram @pc.ram 00000000000c8000-00000000000cbfff [disabled]
00000000000c8000-00000000000cbfff (prio 1, ram): alias pam-pci @pc.ram 00000000000c8000-00000000000cbfff [disabled]
00000000000c8000-00000000000cbfff (prio 1, ram): alias pam-rom @pc.ram 00000000000c8000-00000000000cbfff [disabled]
00000000000c8000-00000000000cbfff (prio 1, i/o): alias pam-pci @pci 00000000000c8000-00000000000cbfff
00000000000cc000-00000000000cffff (prio 1, ram): alias pam-ram @pc.ram 00000000000cc000-00000000000cffff [disabled]
00000000000cc000-00000000000cffff (prio 1, ram): alias pam-pci @pc.ram 00000000000cc000-00000000000cffff [disabled]
00000000000cc000-00000000000cffff (prio 1, ram): alias pam-rom @pc.ram 00000000000cc000-00000000000cffff [disabled]
00000000000cc000-00000000000cffff (prio 1, i/o): alias pam-pci @pci 00000000000cc000-00000000000cffff
00000000000d0000-00000000000d3fff (prio 1, ram): alias pam-ram @pc.ram 00000000000d0000-00000000000d3fff [disabled]
00000000000d0000-00000000000d3fff (prio 1, ram): alias pam-pci @pc.ram 00000000000d0000-00000000000d3fff [disabled]
00000000000d0000-00000000000d3fff (prio 1, ram): alias pam-rom @pc.ram 00000000000d0000-00000000000d3fff [disabled]
00000000000d0000-00000000000d3fff (prio 1, i/o): alias pam-pci @pci 00000000000d0000-00000000000d3fff
00000000000d4000-00000000000d7fff (prio 1, ram): alias pam-ram @pc.ram 00000000000d4000-00000000000d7fff [disabled]
00000000000d4000-00000000000d7fff (prio 1, ram): alias pam-pci @pc.ram 00000000000d4000-00000000000d7fff [disabled]
00000000000d4000-00000000000d7fff (prio 1, ram): alias pam-rom @pc.ram 00000000000d4000-00000000000d7fff [disabled]
00000000000d4000-00000000000d7fff (prio 1, i/o): alias pam-pci @pci 00000000000d4000-00000000000d7fff
00000000000d8000-00000000000dbfff (prio 1, ram): alias pam-ram @pc.ram 00000000000d8000-00000000000dbfff [disabled]
00000000000d8000-00000000000dbfff (prio 1, ram): alias pam-pci @pc.ram 00000000000d8000-00000000000dbfff [disabled]
00000000000d8000-00000000000dbfff (prio 1, ram): alias pam-rom @pc.ram 00000000000d8000-00000000000dbfff [disabled]
00000000000d8000-00000000000dbfff (prio 1, i/o): alias pam-pci @pci 00000000000d8000-00000000000dbfff
00000000000dc000-00000000000dffff (prio 1, ram): alias pam-ram @pc.ram 00000000000dc000-00000000000dffff [disabled]
00000000000dc000-00000000000dffff (prio 1, ram): alias pam-pci @pc.ram 00000000000dc000-00000000000dffff [disabled]
00000000000dc000-00000000000dffff (prio 1, ram): alias pam-rom @pc.ram 00000000000dc000-00000000000dffff [disabled]
00000000000dc000-00000000000dffff (prio 1, i/o): alias pam-pci @pci 00000000000dc000-00000000000dffff
00000000000e0000-00000000000e3fff (prio 1, ram): alias pam-ram @pc.ram 00000000000e0000-00000000000e3fff [disabled]
00000000000e0000-00000000000e3fff (prio 1, ram): alias pam-pci @pc.ram 00000000000e0000-00000000000e3fff [disabled]
00000000000e0000-00000000000e3fff (prio 1, ram): alias pam-rom @pc.ram 00000000000e0000-00000000000e3fff [disabled]
00000000000e0000-00000000000e3fff (prio 1, i/o): alias pam-pci @pci 00000000000e0000-00000000000e3fff
00000000000e4000-00000000000e7fff (prio 1, ram): alias pam-ram @pc.ram 00000000000e4000-00000000000e7fff [disabled]
00000000000e4000-00000000000e7fff (prio 1, ram): alias pam-pci @pc.ram 00000000000e4000-00000000000e7fff [disabled]
00000000000e4000-00000000000e7fff (prio 1, ram): alias pam-rom @pc.ram 00000000000e4000-00000000000e7fff [disabled]
00000000000e4000-00000000000e7fff (prio 1, i/o): alias pam-pci @pci 00000000000e4000-00000000000e7fff
00000000000e8000-00000000000ebfff (prio 1, ram): alias pam-ram @pc.ram 00000000000e8000-00000000000ebfff [disabled]
00000000000e8000-00000000000ebfff (prio 1, ram): alias pam-pci @pc.ram 00000000000e8000-00000000000ebfff [disabled]
00000000000e8000-00000000000ebfff (prio 1, ram): alias pam-rom @pc.ram 00000000000e8000-00000000000ebfff [disabled]
00000000000e8000-00000000000ebfff (prio 1, i/o): alias pam-pci @pci 00000000000e8000-00000000000ebfff
00000000000ec000-00000000000effff (prio 1, ram): alias pam-ram @pc.ram 00000000000ec000-00000000000effff [disabled]
00000000000ec000-00000000000effff (prio 1, ram): alias pam-pci @pc.ram 00000000000ec000-00000000000effff [disabled]
00000000000ec000-00000000000effff (prio 1, ram): alias pam-rom @pc.ram 00000000000ec000-00000000000effff [disabled]
00000000000ec000-00000000000effff (prio 1, i/o): alias pam-pci @pci 00000000000ec000-00000000000effff
00000000000f0000-00000000000fffff (prio 1, ram): alias pam-ram @pc.ram 00000000000f0000-00000000000fffff [disabled]
00000000000f0000-00000000000fffff (prio 1, ram): alias pam-pci @pc.ram 00000000000f0000-00000000000fffff [disabled]
00000000000f0000-00000000000fffff (prio 1, ram): alias pam-rom @pc.ram 00000000000f0000-00000000000fffff [disabled]
00000000000f0000-00000000000fffff (prio 1, i/o): alias pam-pci @pci 00000000000f0000-00000000000fffff
00000000fec00000-00000000fec00fff (prio 0, i/o): ioapic
00000000fed00000-00000000fed003ff (prio 0, i/o): hpet
00000000fee00000-00000000feefffff (prio 4096, i/o): apic-msi
After:
(qemu) info mtree
memory-region: system
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-0000000007ffffff (prio 0, ram): alias ram-below-4g @pc.ram 0000000000000000-0000000007ffffff
0000000000000000-ffffffffffffffff (prio -1, i/o): pci
00000000000a0000-00000000000bffff (prio 1, i/o): vga-lowmem
00000000000c0000-00000000000dffff (prio 1, rom): pc.rom
00000000000e0000-00000000000fffff (prio 1, rom): alias isa-bios @pc.bios 0000000000020000-000000000003ffff
00000000fffc0000-00000000ffffffff (prio 0, rom): pc.bios
00000000000a0000-00000000000bffff (prio 1, i/o): alias smram-region @pci 00000000000a0000-00000000000bffff
00000000000c0000-00000000000c3fff (prio 1, i/o): alias pam-pci @pci 00000000000c0000-00000000000c3fff
00000000000c4000-00000000000c7fff (prio 1, i/o): alias pam-pci @pci 00000000000c4000-00000000000c7fff
00000000000c8000-00000000000cbfff (prio 1, i/o): alias pam-pci @pci 00000000000c8000-00000000000cbfff
00000000000cc000-00000000000cffff (prio 1, i/o): alias pam-pci @pci 00000000000cc000-00000000000cffff
00000000000d0000-00000000000d3fff (prio 1, i/o): alias pam-pci @pci 00000000000d0000-00000000000d3fff
00000000000d4000-00000000000d7fff (prio 1, i/o): alias pam-pci @pci 00000000000d4000-00000000000d7fff
00000000000d8000-00000000000dbfff (prio 1, i/o): alias pam-pci @pci 00000000000d8000-00000000000dbfff
00000000000dc000-00000000000dffff (prio 1, i/o): alias pam-pci @pci 00000000000dc000-00000000000dffff
00000000000e0000-00000000000e3fff (prio 1, i/o): alias pam-pci @pci 00000000000e0000-00000000000e3fff
00000000000e4000-00000000000e7fff (prio 1, i/o): alias pam-pci @pci 00000000000e4000-00000000000e7fff
00000000000e8000-00000000000ebfff (prio 1, i/o): alias pam-pci @pci 00000000000e8000-00000000000ebfff
00000000000ec000-00000000000effff (prio 1, i/o): alias pam-pci @pci 00000000000ec000-00000000000effff
00000000000f0000-00000000000fffff (prio 1, i/o): alias pam-pci @pci 00000000000f0000-00000000000fffff
00000000fec00000-00000000fec00fff (prio 0, i/o): ioapic
00000000fed00000-00000000fed003ff (prio 0, i/o): hpet
00000000fee00000-00000000feefffff (prio 4096, i/o): apic-msi
The old behavior is preserved using 'info mtree -D'.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-05-29 14:53:25 +02:00
|
|
|
"-o: dump region owners/parents;"
|
|
|
|
"-D: dump disabled regions",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_mtree,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info mtree``
|
|
|
|
Show memory tree.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2012-09-17 13:42:41 +02:00
|
|
|
#if defined(CONFIG_TCG)
|
2015-09-10 17:38:58 +02:00
|
|
|
{
|
|
|
|
.name = "jit",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show dynamic compiler info",
|
|
|
|
},
|
2012-09-17 13:42:41 +02:00
|
|
|
#endif
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info jit``
|
|
|
|
Show dynamic compiler info.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2012-09-17 13:42:41 +02:00
|
|
|
#if defined(CONFIG_TCG)
|
2015-09-10 17:38:58 +02:00
|
|
|
{
|
|
|
|
.name = "opcount",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show dynamic compiler opcode counters",
|
|
|
|
},
|
2012-09-17 13:42:41 +02:00
|
|
|
#endif
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info opcount``
|
|
|
|
Show dynamic compiler opcode counters
|
|
|
|
ERST
|
2017-08-08 19:54:42 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "sync-profile",
|
|
|
|
.args_type = "mean:-m,no_coalesce:-n,max:i?",
|
|
|
|
.params = "[-m] [-n] [max]",
|
|
|
|
.help = "show synchronization profiling info, up to max entries "
|
|
|
|
"(default: 10), sorted by total wait time. (-m: sort by "
|
|
|
|
"mean wait time; -n: do not coalesce objects with the "
|
|
|
|
"same call site)",
|
|
|
|
.cmd = hmp_info_sync_profile,
|
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info sync-profile [-m|-n]`` [*max*]
|
|
|
|
Show synchronization profiling info, up to *max* entries (default: 10),
|
|
|
|
sorted by total wait time.
|
|
|
|
|
|
|
|
``-m``
|
|
|
|
sort by mean wait time
|
|
|
|
``-n``
|
|
|
|
do not coalesce objects with the same call site
|
|
|
|
|
|
|
|
When different objects that share the same call site are coalesced,
|
|
|
|
the "Object" field shows---enclosed in brackets---the number of objects
|
|
|
|
being coalesced.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "kvm",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show KVM information",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_kvm,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info kvm``
|
|
|
|
Show KVM information.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "numa",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show NUMA information",
|
2021-09-08 11:35:43 +02:00
|
|
|
.cmd_info_hrt = qmp_x_query_numa,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info numa``
|
|
|
|
Show NUMA information.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "usb",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show guest USB devices",
|
2021-09-08 11:35:43 +02:00
|
|
|
.cmd_info_hrt = qmp_x_query_usb,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info usb``
|
|
|
|
Show guest USB devices.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "usbhost",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show host USB devices",
|
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info usbhost``
|
|
|
|
Show host USB devices.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2022-01-05 14:49:57 +01:00
|
|
|
#if defined(CONFIG_TCG)
|
2015-09-10 17:38:58 +02:00
|
|
|
{
|
|
|
|
.name = "profile",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show profiling information",
|
2021-09-08 11:35:43 +02:00
|
|
|
.cmd_info_hrt = qmp_x_query_profile,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
2022-01-05 14:49:57 +01:00
|
|
|
#endif
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info profile``
|
|
|
|
Show profiling information.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "capture",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show capture information",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_capture,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info capture``
|
|
|
|
Show capture information.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "snapshots",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the currently saved VM snapshots",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_snapshots,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info snapshots``
|
|
|
|
Show the currently saved VM snapshots.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "status",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the current VM status (running|paused)",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_status,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info status``
|
|
|
|
Show the current VM status (running|paused).
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "mice",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show which guest mouse is receiving events",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_mice,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info mice``
|
|
|
|
Show which guest mouse is receiving events.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
qapi: add conditions to VNC type/commands/events on the schema
Add #if defined(CONFIG_VNC) in generated code, and adjust the
qmp/hmp code accordingly.
query-qmp-schema no longer reports the command/events etc as
available when disabled at compile.
Commands made conditional:
* query-vnc, query-vnc-servers, change-vnc-password
Before the patch, the commands for !CONFIG_VNC are stubs that fail
like this:
{"error": {"class": "GenericError",
"desc": "The feature 'vnc' is not enabled"}}
Afterwards, they fail like this:
{"error": {"class": "CommandNotFound",
"desc": "The command FOO has not been found"}}
I call that an improvement, because it lets clients distinguish
between command unavailable (class CommandNotFound) and command failed
(class GenericError).
Events made conditional:
* VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED
HMP change:
* info vnc
Will return "unknown command: 'info vnc'" when VNC is compiled
out (same as error for spice when --disable-spice)
Occurrences of VNC (case insensitive) in the schema that aren't
covered by this change:
* add_client
Command has other uses, including "socket bases character devices".
These are unconditional as far as I can tell.
* set_password, expire_password
In theory, these commands could be used for managing any service's
password. In practice, they're used for VNC and SPICE services.
They're documented for "remote display session" / "remote display
server".
The service is selected by argument @protocol. The code special-cases
protocol-specific argument checking, then calls a protocol-specific
function to do the work. If it fails, the command fails with "Could
not set password". It does when the service isn't compiled in (it's a
stub then).
We could make these commands conditional on the conjunction of all
services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)],
but I doubt it's worthwhile.
* change
Command has other uses, namely changing media.
This patch inlines a stub; no functional change.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 17:56:47 +02:00
|
|
|
#if defined(CONFIG_VNC)
|
2015-09-10 17:38:58 +02:00
|
|
|
{
|
|
|
|
.name = "vnc",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the vnc server status",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_vnc,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
qapi: add conditions to VNC type/commands/events on the schema
Add #if defined(CONFIG_VNC) in generated code, and adjust the
qmp/hmp code accordingly.
query-qmp-schema no longer reports the command/events etc as
available when disabled at compile.
Commands made conditional:
* query-vnc, query-vnc-servers, change-vnc-password
Before the patch, the commands for !CONFIG_VNC are stubs that fail
like this:
{"error": {"class": "GenericError",
"desc": "The feature 'vnc' is not enabled"}}
Afterwards, they fail like this:
{"error": {"class": "CommandNotFound",
"desc": "The command FOO has not been found"}}
I call that an improvement, because it lets clients distinguish
between command unavailable (class CommandNotFound) and command failed
(class GenericError).
Events made conditional:
* VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED
HMP change:
* info vnc
Will return "unknown command: 'info vnc'" when VNC is compiled
out (same as error for spice when --disable-spice)
Occurrences of VNC (case insensitive) in the schema that aren't
covered by this change:
* add_client
Command has other uses, including "socket bases character devices".
These are unconditional as far as I can tell.
* set_password, expire_password
In theory, these commands could be used for managing any service's
password. In practice, they're used for VNC and SPICE services.
They're documented for "remote display session" / "remote display
server".
The service is selected by argument @protocol. The code special-cases
protocol-specific argument checking, then calls a protocol-specific
function to do the work. If it fails, the command fails with "Could
not set password". It does when the service isn't compiled in (it's a
stub then).
We could make these commands conditional on the conjunction of all
services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)],
but I doubt it's worthwhile.
* change
Command has other uses, namely changing media.
This patch inlines a stub; no functional change.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2018-07-03 17:56:47 +02:00
|
|
|
#endif
|
2015-09-10 17:38:58 +02:00
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info vnc``
|
|
|
|
Show the vnc server status.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
#if defined(CONFIG_SPICE)
|
|
|
|
{
|
|
|
|
.name = "spice",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the spice server status",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_spice,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info spice``
|
|
|
|
Show the spice server status.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "name",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the current VM name",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_name,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info name``
|
|
|
|
Show the current VM name.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "uuid",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the current VM UUID",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_uuid,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info uuid``
|
|
|
|
Show the current VM UUID.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
#if defined(CONFIG_SLIRP)
|
|
|
|
{
|
|
|
|
.name = "usernet",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show user network stack connection states",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_usernet,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info usernet``
|
|
|
|
Show user network stack connection states.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "migrate",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show migration status",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_migrate,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info migrate``
|
|
|
|
Show migration status.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "migrate_capabilities",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show current migration capabilities",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_migrate_capabilities,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info migrate_capabilities``
|
|
|
|
Show current migration capabilities.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "migrate_parameters",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show current migration parameters",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_migrate_parameters,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info migrate_parameters``
|
|
|
|
Show current migration parameters.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "balloon",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show balloon information",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_balloon,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info balloon``
|
|
|
|
Show balloon information.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "qtree",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show device tree",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_qtree,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info qtree``
|
|
|
|
Show device tree.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "qdm",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show qdev device model list",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_qdm,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info qdm``
|
|
|
|
Show qdev device model list.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "qom-tree",
|
|
|
|
.args_type = "path:s?",
|
|
|
|
.params = "[path]",
|
|
|
|
.help = "show QOM composition tree",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_qom_tree,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info qom-tree``
|
|
|
|
Show QOM composition tree.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "roms",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show roms",
|
2021-09-08 11:35:43 +02:00
|
|
|
.cmd_info_hrt = qmp_x_query_roms,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info roms``
|
|
|
|
Show roms.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "trace-events",
|
2016-07-11 12:53:57 +02:00
|
|
|
.args_type = "name:s?,vcpu:i?",
|
|
|
|
.params = "[name] [vcpu]",
|
2016-07-11 12:53:51 +02:00
|
|
|
.help = "show available trace-events & their state "
|
2016-07-11 12:53:57 +02:00
|
|
|
"(name: event name pattern; vcpu: vCPU to query, default is any)",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_trace_events,
|
2016-07-11 12:53:51 +02:00
|
|
|
.command_completion = info_trace_events_completion,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info trace-events``
|
|
|
|
Show available trace-events & their state.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "tpm",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the TPM device",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_tpm,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info tpm``
|
|
|
|
Show the TPM device.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "memdev",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show memory backends",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_memdev,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info memdev``
|
|
|
|
Show memory backends
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "memory-devices",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show memory devices",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_memory_devices,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info memory-devices``
|
|
|
|
Show memory devices.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "iothreads",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show iothreads",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_iothreads,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info iothreads``
|
|
|
|
Show iothread's identifiers.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "rocker",
|
|
|
|
.args_type = "name:s",
|
|
|
|
.params = "name",
|
|
|
|
.help = "Show rocker switch",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_rocker,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info rocker`` *name*
|
|
|
|
Show rocker switch.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "rocker-ports",
|
|
|
|
.args_type = "name:s",
|
|
|
|
.params = "name",
|
|
|
|
.help = "Show rocker ports",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_rocker_ports,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info rocker-ports`` *name*-ports
|
|
|
|
Show rocker ports.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "rocker-of-dpa-flows",
|
|
|
|
.args_type = "name:s,tbl_id:i?",
|
|
|
|
.params = "name [tbl_id]",
|
|
|
|
.help = "Show rocker OF-DPA flow tables",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_rocker_of_dpa_flows,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info rocker-of-dpa-flows`` *name* [*tbl_id*]
|
|
|
|
Show rocker OF-DPA flow tables.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "rocker-of-dpa-groups",
|
|
|
|
.args_type = "name:s,type:i?",
|
|
|
|
.params = "name [type]",
|
|
|
|
.help = "Show rocker OF-DPA groups",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_rocker_of_dpa_groups,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info rocker-of-dpa-groups`` *name* [*type*]
|
|
|
|
Show rocker OF-DPA groups.
|
|
|
|
ERST
|
2015-09-10 17:38:58 +02:00
|
|
|
|
|
|
|
#if defined(TARGET_S390X)
|
|
|
|
{
|
|
|
|
.name = "skeys",
|
|
|
|
.args_type = "addr:l",
|
|
|
|
.params = "address",
|
|
|
|
.help = "Display the value of a storage key",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_skeys,
|
2015-09-10 17:38:58 +02:00
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info skeys`` *address*
|
|
|
|
Display the value of a storage key (s390 only)
|
|
|
|
ERST
|
2016-08-15 18:44:04 +02:00
|
|
|
|
|
|
|
#if defined(TARGET_S390X)
|
|
|
|
{
|
|
|
|
.name = "cmma",
|
|
|
|
.args_type = "addr:l,count:l?",
|
|
|
|
.params = "address [count]",
|
|
|
|
.help = "Display the values of the CMMA storage attributes for a range of pages",
|
|
|
|
.cmd = hmp_info_cmma,
|
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info cmma`` *address*
|
|
|
|
Display the values of the CMMA storage attributes for a range of
|
|
|
|
pages (s390 only)
|
|
|
|
ERST
|
2016-02-18 06:16:55 +01:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "dump",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "Display the latest dump status",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_info_dump,
|
2016-02-18 06:16:55 +01:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info dump``
|
|
|
|
Display the latest dump status.
|
|
|
|
ERST
|
2017-05-12 06:17:41 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "ramblock",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "Display system ramblock information",
|
2021-09-08 11:35:43 +02:00
|
|
|
.cmd_info_hrt = qmp_x_query_ramblock,
|
2017-05-12 06:17:41 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info ramblock``
|
|
|
|
Dump all the ramblocks of the system.
|
|
|
|
ERST
|
2016-06-10 02:59:07 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "hotpluggable-cpus",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "Show information about hotpluggable CPUs",
|
2016-09-12 11:19:06 +02:00
|
|
|
.cmd = hmp_hotpluggable_cpus,
|
2018-06-20 17:39:45 +02:00
|
|
|
.flags = "p",
|
2016-06-10 02:59:07 +02:00
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info hotpluggable-cpus``
|
|
|
|
Show information about hotpluggable CPUs
|
|
|
|
ERST
|
2017-02-17 00:15:37 +01:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "vm-generation-id",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "Show Virtual Machine Generation ID",
|
|
|
|
.cmd = hmp_info_vm_generation_id,
|
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info vm-generation-id``
|
|
|
|
Show Virtual Machine Generation ID
|
|
|
|
ERST
|
2017-08-29 17:30:22 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "memory_size_summary",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show the amount of initially allocated and "
|
|
|
|
"present hotpluggable (if enabled) memory in bytes.",
|
|
|
|
.cmd = hmp_info_memory_size_summary,
|
|
|
|
},
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info memory_size_summary``
|
|
|
|
Display the amount of initially allocated and present hotpluggable (if
|
|
|
|
enabled) memory in bytes.
|
|
|
|
ERST
|
2017-10-02 15:45:37 +02:00
|
|
|
|
2018-03-08 13:48:47 +01:00
|
|
|
#if defined(TARGET_I386)
|
|
|
|
{
|
|
|
|
.name = "sev",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show SEV information",
|
|
|
|
.cmd = hmp_info_sev,
|
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
2020-02-28 16:36:07 +01:00
|
|
|
SRST
|
|
|
|
``info sev``
|
|
|
|
Show SEV information.
|
|
|
|
ERST
|
2018-03-08 13:48:47 +01:00
|
|
|
|
2020-10-03 19:13:20 +02:00
|
|
|
{
|
|
|
|
.name = "replay",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show record/replay information",
|
|
|
|
.cmd = hmp_info_replay,
|
|
|
|
},
|
2015-09-10 17:39:01 +02:00
|
|
|
|
2020-10-03 19:13:20 +02:00
|
|
|
SRST
|
|
|
|
``info replay``
|
|
|
|
Display the record/replay information: mode and the current icount.
|
|
|
|
ERST
|
2021-06-07 03:11:57 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "dirty_rate",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show dirty rate information",
|
|
|
|
.cmd = hmp_info_dirty_rate,
|
|
|
|
},
|
|
|
|
|
|
|
|
SRST
|
|
|
|
``info dirty_rate``
|
|
|
|
Display the vcpu dirty rate information.
|
|
|
|
ERST
|
2021-09-10 12:22:56 +02:00
|
|
|
|
2022-06-25 19:38:36 +02:00
|
|
|
{
|
|
|
|
.name = "vcpu_dirty_limit",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show dirty page limit information of all vCPU",
|
|
|
|
.cmd = hmp_info_vcpu_dirty_limit,
|
|
|
|
},
|
|
|
|
|
|
|
|
SRST
|
|
|
|
``info vcpu_dirty_limit``
|
|
|
|
Display the vcpu dirty page limit information.
|
|
|
|
ERST
|
|
|
|
|
2021-09-10 12:22:56 +02:00
|
|
|
#if defined(TARGET_I386)
|
|
|
|
{
|
|
|
|
.name = "sgx",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show intel SGX information",
|
|
|
|
.cmd = hmp_info_sgx,
|
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
SRST
|
|
|
|
``info sgx``
|
|
|
|
Show intel SGX information.
|
|
|
|
ERST
|
2022-03-05 16:09:53 +01:00
|
|
|
|
2022-05-11 01:54:39 +02:00
|
|
|
#if defined(CONFIG_MOS6522)
|
2022-03-05 16:09:53 +01:00
|
|
|
{
|
|
|
|
.name = "via",
|
|
|
|
.args_type = "",
|
|
|
|
.params = "",
|
|
|
|
.help = "show guest mos6522 VIA devices",
|
|
|
|
.cmd = hmp_info_via,
|
|
|
|
},
|
|
|
|
#endif
|
|
|
|
|
|
|
|
SRST
|
|
|
|
``info via``
|
|
|
|
Show guest mos6522 VIA devices.
|
|
|
|
ERST
|
2022-04-26 12:17:35 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
.name = "stats",
|
2022-04-26 14:09:31 +02:00
|
|
|
.args_type = "target:s,names:s?,provider:s?",
|
|
|
|
.params = "target [names] [provider]",
|
|
|
|
.help = "show statistics for the given target (vm or vcpu); optionally filter by"
|
|
|
|
"name (comma-separated list, or * for all) and provider",
|
2022-04-26 12:17:35 +02:00
|
|
|
.cmd = hmp_info_stats,
|
|
|
|
},
|
|
|
|
|
|
|
|
SRST
|
|
|
|
``stats``
|
|
|
|
Show runtime-collected statistics
|
|
|
|
ERST
|