On 9/14/21 6:34 PM, Daniel P. Berrangé wrote:
> On Tue, Sep 14, 2021 at 05:56:09PM +0200, Philippe Mathieu-Daudé wrote:
>> On 9/14/21 4:20 PM, Daniel P. Berrangé wrote:
>>> This will allow us to reduce duplication between the different targets
>>> implementing the 'info tlb' command.
>>>
>>> Signed-off-by: Daniel P. Berrangé <[email protected]>
>>> ---
>>> hw/core/cpu-common.c | 9 +++++++++
>>> include/hw/core/cpu.h | 11 +++++++++++
>>> 2 files changed, 20 insertions(+)
>>
>>> diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
>>> index 4c47e1df18..64fc57c8d9 100644
>>> --- a/include/hw/core/cpu.h
>>> +++ b/include/hw/core/cpu.h
>>> * @has_work: Callback for checking if there is work to do.
>>> * @memory_rw_debug: Callback for GDB memory access.
>>> * @format_state: Callback for formatting state.
>>> + * @format_tlb: Callback for formatting memory mappings
"... for formatting translations of virtual to physical memory mappings"
>>> * @get_arch_id: Callback for getting architecture-dependent CPU ID.
>>> * @set_pc: Callback for setting the Program Counter register. This
>>> * should have the semantics used by the target architecture when
>>> @@ -136,6 +137,7 @@ struct CPUClass {
>>> int (*memory_rw_debug)(CPUState *cpu, vaddr addr,
>>> uint8_t *buf, int len, bool is_write);
>>> void (*format_state)(CPUState *cpu, GString *buf, int flags);
>>> + void (*format_tlb)(CPUState *cpu, GString *buf);
>>
>> Doesn't this belong to SysemuCPUOps?
>
> I can't really answer, since my knowledge of this area of QEMU code is
> fairly mimimal. I put it here because it is basically serving the same
> purpose as the "format_state" callback immediately above it, which was
> a rename of the existing "dump_state" callback. I assumed whatever was
> there already was a good practice to follow[1]...
Since it involves physical memory, I'm pretty sure this is sysemu
specific. Beside in the following patches you guard the handlers
with '#ifndef CONFIG_USER_ONLY'.
Good news, there is very few changes needed in your patches, for
example the next patch:
-- >8 --
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index ab86224ee23..9d2bd2e2ef4 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -6732,6 +6732,7 @@ static Property x86_cpu_properties[] = {
#include "hw/core/sysemu-cpu-ops.h"
static const struct SysemuCPUOps i386_sysemu_ops = {
+ .format_tlb = x86_cpu_format_tlb,
.get_memory_mapping = x86_cpu_get_memory_mapping,
.get_paging_enabled = x86_cpu_get_paging_enabled,
.get_phys_page_attrs_debug = x86_cpu_get_phys_page_attrs_debug,
@@ -6765,9 +6766,6 @@ static void x86_cpu_common_class_init(ObjectClass
*oc, void *data)
cc->parse_features = x86_cpu_parse_featurestr;
cc->has_work = x86_cpu_has_work;
cc->format_state = x86_cpu_format_state;
-#ifndef CONFIG_USER_ONLY
- cc->format_tlb = x86_cpu_format_tlb;
-#endif
cc->set_pc = x86_cpu_set_pc;
cc->gdb_read_register = x86_cpu_gdb_read_register;
cc->gdb_write_register = x86_cpu_gdb_write_register;
---
>
> Regards,
> Daniel
>
> [1] yes assuming these things is often foolish in QEMU :-)
>