From: Peter Xu <peterx@redhat.com>
To: qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>,
peterx@redhat.com, "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Subject: [Qemu-devel] [PATCH 2/2] ramblock: add new hmp command "info ramblock"
Date: Wed, 26 Apr 2017 15:44:35 +0800 [thread overview]
Message-ID: <1493192675-16104-3-git-send-email-peterx@redhat.com> (raw)
In-Reply-To: <1493192675-16104-1-git-send-email-peterx@redhat.com>
To dump information about ramblocks. It looks like:
(qemu) info ramblock
Block Name PSize Offset Used Total
/objects/mem 2M 0x0000000000000000 0x0000000080000000 0x0000000080000000
vga.vram 4K 0x0000000080060000 0x0000000001000000 0x0000000001000000
/rom@etc/acpi/tables 4K 0x00000000810b0000 0x0000000000020000 0x0000000000200000
pc.bios 4K 0x0000000080000000 0x0000000000040000 0x0000000000040000
0000:00:03.0/e1000.rom 4K 0x0000000081070000 0x0000000000040000 0x0000000000040000
pc.rom 4K 0x0000000080040000 0x0000000000020000 0x0000000000020000
0000:00:02.0/vga.rom 4K 0x0000000081060000 0x0000000000010000 0x0000000000010000
/rom@etc/table-loader 4K 0x00000000812b0000 0x0000000000001000 0x0000000000001000
/rom@etc/acpi/rsdp 4K 0x00000000812b1000 0x0000000000001000 0x0000000000001000
Signed-off-by: Peter Xu <peterx@redhat.com>
---
exec.c | 34 ++++++++++++++++++++++++++++++++++
hmp-commands-info.hx | 14 ++++++++++++++
hmp.c | 6 ++++++
hmp.h | 1 +
include/exec/ramlist.h | 1 +
5 files changed, 56 insertions(+)
diff --git a/exec.c b/exec.c
index 50519ae..85a2c2b 100644
--- a/exec.c
+++ b/exec.c
@@ -71,6 +71,8 @@
#include "qemu/mmap-alloc.h"
#endif
+#include "monitor/monitor.h"
+
//#define DEBUG_SUBPAGE
#if !defined(CONFIG_USER_ONLY)
@@ -1333,6 +1335,38 @@ void qemu_mutex_unlock_ramlist(void)
qemu_mutex_unlock(&ram_list.mutex);
}
+static const char *page_size_to_str(size_t psize)
+{
+ switch (psize) {
+ case 0x1000:
+ return "4K";
+ case 0x10000:
+ return "64K";
+ case 0x200000:
+ return "2M";
+ case 0x40000000:
+ return "1G";
+ default:
+ return "N/A";
+ }
+}
+
+void ram_block_dump(Monitor *mon)
+{
+ RAMBlock *block;
+
+ rcu_read_lock();
+ monitor_printf(mon, "%24s %8s %18s %18s %18s\n",
+ "Block Name", "PSize", "Offset", "Used", "Total");
+ RAMBLOCK_FOREACH(block) {
+ monitor_printf(mon, "%24s %8s 0x%016lx 0x%016lx 0x%016lx\n",
+ block->idstr, page_size_to_str(block->page_size),
+ block->offset, block->used_length,
+ block->max_length);
+ }
+ rcu_read_unlock();
+}
+
#ifdef __linux__
/*
* FIXME TOCTTOU: this iterates over memory backends' mem-path, which
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index a53f105..ae16901 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -788,6 +788,20 @@ 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
+
+ {
.name = "hotpluggable-cpus",
.args_type = "",
.params = "",
diff --git a/hmp.c b/hmp.c
index ab407d6..8369388 100644
--- a/hmp.c
+++ b/hmp.c
@@ -37,6 +37,7 @@
#include "qemu-io.h"
#include "qemu/cutils.h"
#include "qemu/error-report.h"
+#include "exec/ramlist.h"
#include "hw/intc/intc.h"
#ifdef CONFIG_SPICE
@@ -2563,6 +2564,11 @@ void hmp_info_dump(Monitor *mon, const QDict *qdict)
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)
{
Error *err = NULL;
diff --git a/hmp.h b/hmp.h
index 799fd37..7353b67 100644
--- a/hmp.h
+++ b/hmp.h
@@ -136,6 +136,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_groups(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_info_vm_generation_id(Monitor *mon, const QDict *qdict);
diff --git a/include/exec/ramlist.h b/include/exec/ramlist.h
index f1c6b45..2e2ac6c 100644
--- a/include/exec/ramlist.h
+++ b/include/exec/ramlist.h
@@ -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_remove(void *host, size_t size);
+void ram_block_dump(Monitor *mon);
#endif /* RAMLIST_H */
--
2.7.4
next prev parent reply other threads:[~2017-04-26 7:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-26 7:44 [Qemu-devel] [PATCH 0/2] ramblock: add hmp command "info ramblock" Peter Xu
2017-04-26 7:44 ` [Qemu-devel] [PATCH 1/2] ramblock: add RAMBLOCK_FOREACH() Peter Xu
2017-04-26 7:44 ` Peter Xu [this message]
2017-04-26 12:10 ` [Qemu-devel] [PATCH 2/2] ramblock: add new hmp command "info ramblock" Markus Armbruster
2017-04-27 2:09 ` Peter Xu
2017-04-27 7:07 ` Markus Armbruster
2017-04-27 7:39 ` Paolo Bonzini
2017-04-27 7:57 ` Markus Armbruster
2017-04-27 8:06 ` Peter Xu
2017-04-26 10:21 ` [Qemu-devel] [PATCH 0/2] ramblock: add " no-reply
2017-04-26 10:32 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1493192675-16104-3-git-send-email-peterx@redhat.com \
--to=peterx@redhat.com \
--cc=dgilbert@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.