From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: qemu-devel@nongnu.org
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
Paolo Bonzini <pbonzini@redhat.com>,
Daniel Henrique Barboza <danielhb413@gmail.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: [Qemu-devel] [PATCH qemu v2] hmp: Print if memory section is registered with an accelerator
Date: Fri, 14 Dec 2018 13:58:49 +1100 [thread overview]
Message-ID: <20181214025849.84274-1-aik@ozlabs.ru> (raw)
This adds an accelerator name to the "into mtree -f" to tell the user if
a particular memory section is registered with the accelerator;
the primary user for this is KVM and such information is useful
for debugging purposes.
This adds a has_memory() callback to the accelerator class allowing any
accelerator to have a label in that memory tree dump.
Since memory sections are passed to memory listeners and get registered
in accelerators (rather than memory regions), this only prints new labels
for flatviews attached to the system address space.
An example:
Root memory region: system
0000000000000000-0000002fffffffff (prio 0, ram): /objects/mem0 kvm
0000003000000000-0000005fffffffff (prio 0, ram): /objects/mem1 kvm
0000200000000020-000020000000003f (prio 1, i/o): virtio-pci
0000200080000000-000020008000003f (prio 0, i/o): capabilities
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---
This supercedes "[PATCH qemu] hmp: Print if memory section is registered in KVM"
---
Changes:
v2:
* added an accelerator callback instead of hardcoding it to kvm only
---
include/sysemu/accel.h | 2 ++
accel/kvm/kvm-all.c | 10 ++++++++++
memory.c | 22 ++++++++++++++++++++++
3 files changed, 34 insertions(+)
diff --git a/include/sysemu/accel.h b/include/sysemu/accel.h
index 637358f..30b456d 100644
--- a/include/sysemu/accel.h
+++ b/include/sysemu/accel.h
@@ -25,6 +25,7 @@
#include "qom/object.h"
#include "hw/qdev-properties.h"
+#include "exec/hwaddr.h"
typedef struct AccelState {
/*< private >*/
@@ -41,6 +42,7 @@ typedef struct AccelClass {
int (*available)(void);
int (*init_machine)(MachineState *ms);
void (*setup_post)(MachineState *ms, AccelState *accel);
+ bool (*has_memory)(MachineState *ms, hwaddr start_addr, hwaddr size);
bool *allowed;
/*
* Array of global properties that would be applied when specific
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 4880a05..634f386 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -2589,11 +2589,21 @@ int kvm_get_one_reg(CPUState *cs, uint64_t id, void *target)
return r;
}
+static bool kvm_accel_has_memory(MachineState *ms, hwaddr start_addr,
+ hwaddr size)
+{
+ KVMState *kvm = KVM_STATE(ms->accelerator);
+ KVMMemoryListener *kml = &kvm->memory_listener;
+
+ return NULL != kvm_lookup_matching_slot(kml, start_addr, size);
+}
+
static void kvm_accel_class_init(ObjectClass *oc, void *data)
{
AccelClass *ac = ACCEL_CLASS(oc);
ac->name = "KVM";
ac->init_machine = kvm_init;
+ ac->has_memory = kvm_accel_has_memory;
ac->allowed = &kvm_allowed;
}
diff --git a/memory.c b/memory.c
index d14c6de..61e758a 100644
--- a/memory.c
+++ b/memory.c
@@ -29,7 +29,9 @@
#include "exec/ram_addr.h"
#include "sysemu/kvm.h"
#include "sysemu/sysemu.h"
+#include "sysemu/accel.h"
#include "hw/qdev-properties.h"
+#include "hw/boards.h"
#include "migration/vmstate.h"
//#define DEBUG_UNASSIGNED
@@ -2924,6 +2926,8 @@ struct FlatViewInfo {
int counter;
bool dispatch_tree;
bool owner;
+ AccelClass *ac;
+ const char *ac_name;
};
static void mtree_print_flatview(gpointer key, gpointer value,
@@ -2939,6 +2943,7 @@ static void mtree_print_flatview(gpointer key, gpointer value,
int n = view->nr;
int i;
AddressSpace *as;
+ bool system_as = false;
p(f, "FlatView #%d\n", fvi->counter);
++fvi->counter;
@@ -2950,6 +2955,9 @@ static void mtree_print_flatview(gpointer key, gpointer value,
p(f, ", alias %s", memory_region_name(as->root->alias));
}
p(f, "\n");
+ if (as == &address_space_memory) {
+ system_as = true;
+ }
}
p(f, " Root memory region: %s\n",
@@ -2985,6 +2993,13 @@ static void mtree_print_flatview(gpointer key, gpointer value,
if (fvi->owner) {
mtree_print_mr_owner(p, f, mr);
}
+
+ if (system_as && fvi->ac &&
+ fvi->ac->has_memory(current_machine,
+ int128_get64(range->addr.start),
+ MR_SIZE(range->addr.size) + 1)) {
+ p(f, " %s", fvi->ac_name);
+ }
p(f, "\n");
range++;
}
@@ -3028,6 +3043,13 @@ void mtree_info(fprintf_function mon_printf, void *f, bool flatview,
};
GArray *fv_address_spaces;
GHashTable *views = g_hash_table_new(g_direct_hash, g_direct_equal);
+ AccelClass *ac = ACCEL_GET_CLASS(current_machine->accelerator);
+
+ if (ac->has_memory) {
+ fvi.ac = ac;
+ fvi.ac_name = current_machine->accel ? current_machine->accel :
+ object_class_get_name(OBJECT_CLASS(ac));
+ }
/* Gather all FVs in one table */
QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) {
--
2.17.1
next reply other threads:[~2018-12-14 2:59 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-14 2:58 Alexey Kardashevskiy [this message]
2018-12-14 11:07 ` [Qemu-devel] [PATCH qemu v2] hmp: Print if memory section is registered with an accelerator Philippe Mathieu-Daudé
2018-12-17 1:27 ` Alexey Kardashevskiy
2018-12-17 12:47 ` Philippe Mathieu-Daudé
2018-12-18 0:58 ` Alexey Kardashevskiy
2019-01-03 17:37 ` Dr. David Alan Gilbert
2019-01-14 1:43 ` Alexey Kardashevskiy
2019-01-29 2:30 ` Alexey Kardashevskiy
2019-02-07 5:20 ` Alexey Kardashevskiy
2019-02-07 11:49 ` Dr. David Alan Gilbert
2019-02-08 17:26 ` Paolo Bonzini
2019-02-11 4:56 ` Alexey Kardashevskiy
[not found] ` <f346fdcb-1849-3397-7f4c-2d6ee07fcd7c@ozlabs.ru>
2019-04-24 5:32 ` Alexey Kardashevskiy
2019-04-24 5:32 ` Alexey Kardashevskiy
2019-05-21 6:37 ` Alexey Kardashevskiy
2019-06-13 5:07 ` Alexey Kardashevskiy
2019-06-13 11:49 ` Dr. David Alan Gilbert
2019-06-13 13:59 ` Paolo Bonzini
2019-06-13 14:04 ` Paolo Bonzini
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=20181214025849.84274-1-aik@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=danielhb413@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).