mirror of https://github.com/xemu-project/xemu.git
ramblock: add new hmp command "info ramblock"
To dump information about ramblocks. It looks like: (qemu) info ramblock Block Name PSize Offset Used Total /objects/mem 2 MiB 0x0000000000000000 0x0000000080000000 0x0000000080000000 vga.vram 4 KiB 0x0000000080060000 0x0000000001000000 0x0000000001000000 /rom@etc/acpi/tables 4 KiB 0x00000000810b0000 0x0000000000020000 0x0000000000200000 pc.bios 4 KiB 0x0000000080000000 0x0000000000040000 0x0000000000040000 0000:00:03.0/e1000.rom 4 KiB 0x0000000081070000 0x0000000000040000 0x0000000000040000 pc.rom 4 KiB 0x0000000080040000 0x0000000000020000 0x0000000000020000 0000:00:02.0/vga.rom 4 KiB 0x0000000081060000 0x0000000000010000 0x0000000000010000 /rom@etc/table-loader 4 KiB 0x00000000812b0000 0x0000000000001000 0x0000000000001000 /rom@etc/acpi/rsdp 4 KiB 0x00000000812b1000 0x0000000000001000 0x0000000000001000 Ramblock is something hidden internally in QEMU implementation, and this command should only be used by mostly QEMU developers on RAM stuff. It is not a command suitable for QMP interface. So only HMP interface is provided for it. Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <1494562661-9063-4-git-send-email-peterx@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
22951aaaeb
commit
be9b23c4a5
22
exec.c
22
exec.c
|
@ -71,6 +71,8 @@
|
||||||
#include "qemu/mmap-alloc.h"
|
#include "qemu/mmap-alloc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "monitor/monitor.h"
|
||||||
|
|
||||||
//#define DEBUG_SUBPAGE
|
//#define DEBUG_SUBPAGE
|
||||||
|
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
|
@ -1333,6 +1335,26 @@ void qemu_mutex_unlock_ramlist(void)
|
||||||
qemu_mutex_unlock(&ram_list.mutex);
|
qemu_mutex_unlock(&ram_list.mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ram_block_dump(Monitor *mon)
|
||||||
|
{
|
||||||
|
RAMBlock *block;
|
||||||
|
char *psize;
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
|
monitor_printf(mon, "%24s %8s %18s %18s %18s\n",
|
||||||
|
"Block Name", "PSize", "Offset", "Used", "Total");
|
||||||
|
RAMBLOCK_FOREACH(block) {
|
||||||
|
psize = size_to_str(block->page_size);
|
||||||
|
monitor_printf(mon, "%24s %8s 0x%016" PRIx64 " 0x%016" PRIx64
|
||||||
|
" 0x%016" PRIx64 "\n", block->idstr, psize,
|
||||||
|
(uint64_t)block->offset,
|
||||||
|
(uint64_t)block->used_length,
|
||||||
|
(uint64_t)block->max_length);
|
||||||
|
g_free(psize);
|
||||||
|
}
|
||||||
|
rcu_read_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
/*
|
/*
|
||||||
* FIXME TOCTTOU: this iterates over memory backends' mem-path, which
|
* FIXME TOCTTOU: this iterates over memory backends' mem-path, which
|
||||||
|
|
|
@ -785,6 +785,20 @@ STEXI
|
||||||
@item info dump
|
@item info dump
|
||||||
@findex dump
|
@findex dump
|
||||||
Display the latest dump status.
|
Display the latest dump status.
|
||||||
|
ETEXI
|
||||||
|
|
||||||
|
{
|
||||||
|
.name = "ramblock",
|
||||||
|
.args_type = "",
|
||||||
|
.params = "",
|
||||||
|
.help = "Display system ramblock information",
|
||||||
|
.cmd = hmp_info_ramblock,
|
||||||
|
},
|
||||||
|
|
||||||
|
STEXI
|
||||||
|
@item info ramblock
|
||||||
|
@findex ramblock
|
||||||
|
Dump all the ramblocks of the system.
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
6
hmp.c
6
hmp.c
|
@ -39,6 +39,7 @@
|
||||||
#include "qemu-io.h"
|
#include "qemu-io.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
|
#include "exec/ramlist.h"
|
||||||
#include "hw/intc/intc.h"
|
#include "hw/intc/intc.h"
|
||||||
|
|
||||||
#ifdef CONFIG_SPICE
|
#ifdef CONFIG_SPICE
|
||||||
|
@ -2738,6 +2739,11 @@ void hmp_info_dump(Monitor *mon, const QDict *qdict)
|
||||||
qapi_free_DumpQueryResult(result);
|
qapi_free_DumpQueryResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hmp_info_ramblock(Monitor *mon, const QDict *qdict)
|
||||||
|
{
|
||||||
|
ram_block_dump(mon);
|
||||||
|
}
|
||||||
|
|
||||||
void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
|
void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
1
hmp.h
1
hmp.h
|
@ -140,6 +140,7 @@ void hmp_rocker_ports(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_rocker_of_dpa_flows(Monitor *mon, const QDict *qdict);
|
void hmp_rocker_of_dpa_flows(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_rocker_of_dpa_groups(Monitor *mon, const QDict *qdict);
|
void hmp_rocker_of_dpa_groups(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_dump(Monitor *mon, const QDict *qdict);
|
void hmp_info_dump(Monitor *mon, const QDict *qdict);
|
||||||
|
void hmp_info_ramblock(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict);
|
void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_vm_generation_id(Monitor *mon, const QDict *qdict);
|
void hmp_info_vm_generation_id(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
|
|
|
@ -73,5 +73,6 @@ void ram_block_notifier_remove(RAMBlockNotifier *n);
|
||||||
void ram_block_notify_add(void *host, size_t size);
|
void ram_block_notify_add(void *host, size_t size);
|
||||||
void ram_block_notify_remove(void *host, size_t size);
|
void ram_block_notify_remove(void *host, size_t size);
|
||||||
|
|
||||||
|
void ram_block_dump(Monitor *mon);
|
||||||
|
|
||||||
#endif /* RAMLIST_H */
|
#endif /* RAMLIST_H */
|
||||||
|
|
Loading…
Reference in New Issue