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