Message ID | 20250619131319.47301-8-philmd@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | arm: Fixes and preparatory cleanups for split-accel | expand |
On 19/6/25 15:13, Philippe Mathieu-Daudé wrote: > Trace memory mapped / unmapped in the guest. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > meson.build | 1 + > accel/hvf/trace.h | 2 ++ > accel/hvf/hvf-accel-ops.c | 6 ++++++ > accel/hvf/trace-events | 7 +++++++ > 4 files changed, 16 insertions(+) > create mode 100644 accel/hvf/trace.h > create mode 100644 accel/hvf/trace-events > > diff --git a/meson.build b/meson.build > index 34729c2a3dd..5004678a26b 100644 > --- a/meson.build > +++ b/meson.build > @@ -3633,6 +3633,7 @@ if have_block > endif > if have_system > trace_events_subdirs += [ > + 'accel/hvf', > 'accel/kvm', > 'audio', > 'backends', > diff --git a/accel/hvf/trace.h b/accel/hvf/trace.h > new file mode 100644 > index 00000000000..83a1883343a > --- /dev/null > +++ b/accel/hvf/trace.h > @@ -0,0 +1,2 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +#include "trace/trace-accel_hvf.h" > diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c > index d60446b85b8..b38977207d2 100644 > --- a/accel/hvf/hvf-accel-ops.c > +++ b/accel/hvf/hvf-accel-ops.c > @@ -59,6 +59,7 @@ > #include "system/hvf_int.h" > #include "system/runstate.h" > #include "qemu/guest-random.h" > +#include "trace.h" > > HVFState *hvf_state; > > @@ -97,6 +98,7 @@ static int do_hvf_set_memory(hvf_slot *slot, hv_memory_flags_t flags) > if (macslot->present) { > if (macslot->size != slot->size) { > macslot->present = 0; > + trace_hvf_vm_unmap(macslot->gpa_start, macslot->size); > ret = hv_vm_unmap(macslot->gpa_start, macslot->size); > assert_hvf_ok(ret); > } > @@ -109,6 +111,10 @@ static int do_hvf_set_memory(hvf_slot *slot, hv_memory_flags_t flags) > macslot->present = 1; > macslot->gpa_start = slot->start; > macslot->size = slot->size; > + trace_hvf_vm_map(slot->start, slot->size, slot->mem, flags, > + flags & HV_MEMORY_READ ? 'R' : '-', > + flags & HV_MEMORY_WRITE ? 'W' : '-', > + flags & HV_MEMORY_EXEC ? 'E' : '-'); > ret = hv_vm_map(slot->mem, slot->start, slot->size, flags); > assert_hvf_ok(ret); > return 0; > diff --git a/accel/hvf/trace-events b/accel/hvf/trace-events > new file mode 100644 > index 00000000000..3c11f69f305 > --- /dev/null > +++ b/accel/hvf/trace-events > @@ -0,0 +1,7 @@ > +# SPDX-License-Identifier: GPL-2.0-or-later > +# > +# See docs/devel/tracing.rst for syntax documentation. > + > +# hvf-accel-ops.c > +hvf_vm_map(uint64_t paddr, uint64_t size, void *vaddr, uint8_t flags, const char r, const char w, const char e) "paddr:0x%016llx size:0x%08llx vaddr:%p flags:0x%02x/%c%c%c" > +hvf_vm_unmap(uint64_t paddr, uint64_t size) "paddr:0x%016llx size:0x%08llx" For some reason this is still cross-built as 32-bit (although HVF isn't supported there, see commit 7f800d34aa9c from 2021). Anyway, please read instead (and thanks Pierrick): hvf_vm_map(uint64_t paddr, uint64_t size, void *vaddr, uint8_t flags, const char r, const char w, const char e) "paddr:0x%016"PRIx64" size:0x%08"PRIx64" vaddr:%p flags:0x%02x/%c%c%c" hvf_vm_unmap(uint64_t paddr, uint64_t size) "paddr:0x%016"PRIx64" size:0x%08"PRIx64
diff --git a/meson.build b/meson.build index 34729c2a3dd..5004678a26b 100644 --- a/meson.build +++ b/meson.build @@ -3633,6 +3633,7 @@ if have_block endif if have_system trace_events_subdirs += [ + 'accel/hvf', 'accel/kvm', 'audio', 'backends', diff --git a/accel/hvf/trace.h b/accel/hvf/trace.h new file mode 100644 index 00000000000..83a1883343a --- /dev/null +++ b/accel/hvf/trace.h @@ -0,0 +1,2 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#include "trace/trace-accel_hvf.h" diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c index d60446b85b8..b38977207d2 100644 --- a/accel/hvf/hvf-accel-ops.c +++ b/accel/hvf/hvf-accel-ops.c @@ -59,6 +59,7 @@ #include "system/hvf_int.h" #include "system/runstate.h" #include "qemu/guest-random.h" +#include "trace.h" HVFState *hvf_state; @@ -97,6 +98,7 @@ static int do_hvf_set_memory(hvf_slot *slot, hv_memory_flags_t flags) if (macslot->present) { if (macslot->size != slot->size) { macslot->present = 0; + trace_hvf_vm_unmap(macslot->gpa_start, macslot->size); ret = hv_vm_unmap(macslot->gpa_start, macslot->size); assert_hvf_ok(ret); } @@ -109,6 +111,10 @@ static int do_hvf_set_memory(hvf_slot *slot, hv_memory_flags_t flags) macslot->present = 1; macslot->gpa_start = slot->start; macslot->size = slot->size; + trace_hvf_vm_map(slot->start, slot->size, slot->mem, flags, + flags & HV_MEMORY_READ ? 'R' : '-', + flags & HV_MEMORY_WRITE ? 'W' : '-', + flags & HV_MEMORY_EXEC ? 'E' : '-'); ret = hv_vm_map(slot->mem, slot->start, slot->size, flags); assert_hvf_ok(ret); return 0; diff --git a/accel/hvf/trace-events b/accel/hvf/trace-events new file mode 100644 index 00000000000..3c11f69f305 --- /dev/null +++ b/accel/hvf/trace-events @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# See docs/devel/tracing.rst for syntax documentation. + +# hvf-accel-ops.c +hvf_vm_map(uint64_t paddr, uint64_t size, void *vaddr, uint8_t flags, const char r, const char w, const char e) "paddr:0x%016llx size:0x%08llx vaddr:%p flags:0x%02x/%c%c%c" +hvf_vm_unmap(uint64_t paddr, uint64_t size) "paddr:0x%016llx size:0x%08llx"
Trace memory mapped / unmapped in the guest. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- meson.build | 1 + accel/hvf/trace.h | 2 ++ accel/hvf/hvf-accel-ops.c | 6 ++++++ accel/hvf/trace-events | 7 +++++++ 4 files changed, 16 insertions(+) create mode 100644 accel/hvf/trace.h create mode 100644 accel/hvf/trace-events