From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Ashish Kalra <Ashish.Kalra@amd.com>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, rth@twiddle.net,
armbru@redhat.com, ehabkost@redhat.com, kvm@vger.kernel.org,
mst@redhat.com, marcel.apfelbaum@gmail.com, mtosatti@redhat.com,
Thomas.Lendacky@amd.com, brijesh.singh@amd.com,
ssg.sos.patches@amd.com
Subject: Re: [PATCH 02/11] exec: Add new MemoryDebugOps.
Date: Tue, 1 Dec 2020 11:37:02 +0000 [thread overview]
Message-ID: <20201201113702.GE4338@work-vm> (raw)
In-Reply-To: <4393d426ae8f070c6be45ff0252bae2dca8bbd42.1605316268.git.ashish.kalra@amd.com>
* Ashish Kalra (Ashish.Kalra@amd.com) wrote:
> From: Ashish Kalra <ashish.kalra@amd.com>
>
> Introduce new MemoryDebugOps which hook into guest virtual and physical
> memory debug interfaces such as cpu_memory_rw_debug, to allow vendor specific
> assist/hooks for debugging and delegating accessing the guest memory.
> This is required for example in case of AMD SEV platform where the guest
> memory is encrypted and a SEV specific debug assist/hook will be required
> to access the guest memory.
>
> The MemoryDebugOps are used by cpu_memory_rw_debug() and default to
> address_space_read and address_space_write_rom.
>
> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> include/exec/memory.h | 11 +++++++++++
> softmmu/physmem.c | 24 ++++++++++++++++++++----
> 2 files changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index aff6ef7605..73deb4b456 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -2394,6 +2394,17 @@ MemTxResult address_space_write_cached_slow(MemoryRegionCache *cache,
> hwaddr addr, const void *buf,
> hwaddr len);
>
> +typedef struct MemoryDebugOps {
> + MemTxResult (*read)(AddressSpace *as, hwaddr phys_addr,
> + MemTxAttrs attrs, void *buf,
> + hwaddr len);
> + MemTxResult (*write)(AddressSpace *as, hwaddr phys_addr,
> + MemTxAttrs attrs, const void *buf,
> + hwaddr len);
> +} MemoryDebugOps;
> +
> +void address_space_set_debug_ops(const MemoryDebugOps *ops);
> +
> static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
> {
> if (is_write) {
> diff --git a/softmmu/physmem.c b/softmmu/physmem.c
> index a9adedb9f8..057d6d4ce1 100644
> --- a/softmmu/physmem.c
> +++ b/softmmu/physmem.c
> @@ -166,6 +166,18 @@ struct DirtyBitmapSnapshot {
> unsigned long dirty[];
> };
>
> +static const MemoryDebugOps default_debug_ops = {
> + .read = address_space_read,
> + .write = address_space_write_rom
> +};
> +
> +static const MemoryDebugOps *debug_ops = &default_debug_ops;
> +
> +void address_space_set_debug_ops(const MemoryDebugOps *ops)
> +{
> + debug_ops = ops;
> +}
> +
> static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
> {
> static unsigned alloc_hint = 16;
> @@ -3407,6 +3419,10 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
> page = addr & TARGET_PAGE_MASK;
> phys_addr = cpu_get_phys_page_attrs_debug(cpu, page, &attrs);
> asidx = cpu_asidx_from_attrs(cpu, attrs);
> +
> + /* set debug attrs to indicate memory access is from the debugger */
> + attrs.debug = 1;
> +
> /* if no physical page mapped, return an error */
> if (phys_addr == -1)
> return -1;
> @@ -3415,11 +3431,11 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
> l = len;
> phys_addr += (addr & ~TARGET_PAGE_MASK);
> if (is_write) {
> - res = address_space_write_rom(cpu->cpu_ases[asidx].as, phys_addr,
> - attrs, buf, l);
> + res = debug_ops->write(cpu->cpu_ases[asidx].as, phys_addr,
> + attrs, buf, l);
> } else {
> - res = address_space_read(cpu->cpu_ases[asidx].as, phys_addr,
> - attrs, buf, l);
> + res = debug_ops->read(cpu->cpu_ases[asidx].as, phys_addr,
> + attrs, buf, l);
> }
> if (res != MEMTX_OK) {
> return -1;
> --
> 2.17.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
WARNING: multiple messages have this Message-ID (diff)
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Ashish Kalra <Ashish.Kalra@amd.com>
Cc: Thomas.Lendacky@amd.com, brijesh.singh@amd.com,
ehabkost@redhat.com, kvm@vger.kernel.org, mst@redhat.com,
mtosatti@redhat.com, ssg.sos.patches@amd.com,
qemu-devel@nongnu.org, armbru@redhat.com, pbonzini@redhat.com,
rth@twiddle.net
Subject: Re: [PATCH 02/11] exec: Add new MemoryDebugOps.
Date: Tue, 1 Dec 2020 11:37:02 +0000 [thread overview]
Message-ID: <20201201113702.GE4338@work-vm> (raw)
In-Reply-To: <4393d426ae8f070c6be45ff0252bae2dca8bbd42.1605316268.git.ashish.kalra@amd.com>
* Ashish Kalra (Ashish.Kalra@amd.com) wrote:
> From: Ashish Kalra <ashish.kalra@amd.com>
>
> Introduce new MemoryDebugOps which hook into guest virtual and physical
> memory debug interfaces such as cpu_memory_rw_debug, to allow vendor specific
> assist/hooks for debugging and delegating accessing the guest memory.
> This is required for example in case of AMD SEV platform where the guest
> memory is encrypted and a SEV specific debug assist/hook will be required
> to access the guest memory.
>
> The MemoryDebugOps are used by cpu_memory_rw_debug() and default to
> address_space_read and address_space_write_rom.
>
> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> include/exec/memory.h | 11 +++++++++++
> softmmu/physmem.c | 24 ++++++++++++++++++++----
> 2 files changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index aff6ef7605..73deb4b456 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -2394,6 +2394,17 @@ MemTxResult address_space_write_cached_slow(MemoryRegionCache *cache,
> hwaddr addr, const void *buf,
> hwaddr len);
>
> +typedef struct MemoryDebugOps {
> + MemTxResult (*read)(AddressSpace *as, hwaddr phys_addr,
> + MemTxAttrs attrs, void *buf,
> + hwaddr len);
> + MemTxResult (*write)(AddressSpace *as, hwaddr phys_addr,
> + MemTxAttrs attrs, const void *buf,
> + hwaddr len);
> +} MemoryDebugOps;
> +
> +void address_space_set_debug_ops(const MemoryDebugOps *ops);
> +
> static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
> {
> if (is_write) {
> diff --git a/softmmu/physmem.c b/softmmu/physmem.c
> index a9adedb9f8..057d6d4ce1 100644
> --- a/softmmu/physmem.c
> +++ b/softmmu/physmem.c
> @@ -166,6 +166,18 @@ struct DirtyBitmapSnapshot {
> unsigned long dirty[];
> };
>
> +static const MemoryDebugOps default_debug_ops = {
> + .read = address_space_read,
> + .write = address_space_write_rom
> +};
> +
> +static const MemoryDebugOps *debug_ops = &default_debug_ops;
> +
> +void address_space_set_debug_ops(const MemoryDebugOps *ops)
> +{
> + debug_ops = ops;
> +}
> +
> static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
> {
> static unsigned alloc_hint = 16;
> @@ -3407,6 +3419,10 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
> page = addr & TARGET_PAGE_MASK;
> phys_addr = cpu_get_phys_page_attrs_debug(cpu, page, &attrs);
> asidx = cpu_asidx_from_attrs(cpu, attrs);
> +
> + /* set debug attrs to indicate memory access is from the debugger */
> + attrs.debug = 1;
> +
> /* if no physical page mapped, return an error */
> if (phys_addr == -1)
> return -1;
> @@ -3415,11 +3431,11 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
> l = len;
> phys_addr += (addr & ~TARGET_PAGE_MASK);
> if (is_write) {
> - res = address_space_write_rom(cpu->cpu_ases[asidx].as, phys_addr,
> - attrs, buf, l);
> + res = debug_ops->write(cpu->cpu_ases[asidx].as, phys_addr,
> + attrs, buf, l);
> } else {
> - res = address_space_read(cpu->cpu_ases[asidx].as, phys_addr,
> - attrs, buf, l);
> + res = debug_ops->read(cpu->cpu_ases[asidx].as, phys_addr,
> + attrs, buf, l);
> }
> if (res != MEMTX_OK) {
> return -1;
> --
> 2.17.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2020-12-01 11:38 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-16 18:48 [PATCH 00/11] Add QEMU debug support for SEV guests Ashish Kalra
2020-11-16 18:48 ` Ashish Kalra
2020-11-16 18:48 ` [PATCH 01/11] memattrs: add debug attribute Ashish Kalra
2020-11-16 18:48 ` Ashish Kalra
2020-12-01 11:03 ` Dr. David Alan Gilbert
2020-12-01 11:03 ` Dr. David Alan Gilbert
2020-12-01 11:43 ` Peter Maydell
2020-12-01 11:43 ` Peter Maydell
2020-12-01 11:50 ` Dr. David Alan Gilbert
2020-12-01 11:50 ` Dr. David Alan Gilbert
2020-12-01 11:56 ` Peter Maydell
2020-12-01 11:56 ` Peter Maydell
2020-12-01 18:57 ` Dr. David Alan Gilbert
2020-12-01 18:57 ` Dr. David Alan Gilbert
2020-11-16 18:49 ` [PATCH 02/11] exec: Add new MemoryDebugOps Ashish Kalra
2020-11-16 18:49 ` Ashish Kalra
2020-12-01 11:37 ` Dr. David Alan Gilbert [this message]
2020-12-01 11:37 ` Dr. David Alan Gilbert
2020-12-01 11:48 ` Peter Maydell
2020-12-01 11:48 ` Peter Maydell
2020-12-01 14:27 ` Ashish Kalra
2020-12-01 14:27 ` Ashish Kalra
2020-12-01 14:38 ` Peter Maydell
2020-12-01 14:38 ` Peter Maydell
2020-12-01 14:49 ` Ashish Kalra
2020-12-01 14:49 ` Ashish Kalra
2020-11-16 18:49 ` [PATCH 03/11] exec: add ram_debug_ops support Ashish Kalra
2020-11-16 18:49 ` Ashish Kalra
2020-12-01 12:08 ` Peter Maydell
2020-12-01 12:08 ` Peter Maydell
2020-12-01 14:43 ` Ashish Kalra
2020-12-01 14:43 ` Ashish Kalra
2020-11-16 18:50 ` [PATCH 04/11] exec: Add address_space_read and address_space_write debug helpers Ashish Kalra
2020-11-16 18:50 ` Ashish Kalra
2020-11-16 18:51 ` [PATCH 05/11] exec: add debug version of physical memory read and write API Ashish Kalra
2020-11-16 18:51 ` Ashish Kalra
2020-11-24 5:42 ` Dov Murik
2020-11-24 5:42 ` Dov Murik
2020-11-16 18:51 ` [PATCH 06/11] monitor/i386: use debug APIs when accessing guest memory Ashish Kalra
2020-11-16 18:51 ` Ashish Kalra
2020-12-01 11:54 ` Peter Maydell
2020-12-01 11:54 ` Peter Maydell
2020-12-01 12:05 ` Peter Maydell
2020-12-01 12:05 ` Peter Maydell
2020-11-16 18:51 ` [PATCH 07/11] kvm: introduce debug memory encryption API Ashish Kalra
2020-11-16 18:51 ` Ashish Kalra
2020-11-16 18:52 ` [PATCH 08/11] sev/i386: add debug encrypt and decrypt commands Ashish Kalra
2020-11-16 18:52 ` Ashish Kalra
2020-11-16 18:52 ` [PATCH 09/11] hw/i386: set ram_debug_ops when memory encryption is enabled Ashish Kalra
2020-11-16 18:52 ` Ashish Kalra
2020-11-16 18:52 ` [PATCH 10/11] sev/i386: add SEV specific MemoryDebugOps Ashish Kalra
2020-11-16 18:52 ` Ashish Kalra
2020-11-16 18:53 ` [PATCH 11/11] target/i386: clear C-bit when walking SEV guest page table Ashish Kalra
2020-11-16 18:53 ` Ashish Kalra
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=20201201113702.GE4338@work-vm \
--to=dgilbert@redhat.com \
--cc=Ashish.Kalra@amd.com \
--cc=Thomas.Lendacky@amd.com \
--cc=armbru@redhat.com \
--cc=brijesh.singh@amd.com \
--cc=ehabkost@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=ssg.sos.patches@amd.com \
/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.