From: "Daniel P. Berrangé" <berrange@redhat.com> To: qemu-devel@nongnu.org Cc: "Peter Maydell" <peter.maydell@linaro.org>, "Chris Wulff" <crwulff@gmail.com>, "David Hildenbrand" <david@redhat.com>, "Bin Meng" <bin.meng@windriver.com>, "Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>, "Yuval Shaia" <yuval.shaia.ml@gmail.com>, "Laurent Vivier" <laurent@vivier.eu>, "Max Filippov" <jcmvbkbc@gmail.com>, "Taylor Simpson" <tsimpson@quicinc.com>, "Alistair Francis" <alistair.francis@wdc.com>, "Gerd Hoffmann" <kraxel@redhat.com>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, "Eric Blake" <eblake@redhat.com>, "Marek Vasut" <marex@denx.de>, "Yoshinori Sato" <ysato@users.sourceforge.jp>, "Markus Armbruster" <armbru@redhat.com>, "Halil Pasic" <pasic@linux.ibm.com>, "Christian Borntraeger" <borntraeger@de.ibm.com>, "Palmer Dabbelt" <palmer@dabbelt.com>, "Artyom Tarasenko" <atar4qemu@gmail.com>, "Laurent Vivier" <lvivier@redhat.com>, "Thomas Huth" <thuth@redhat.com>, "Eduardo Habkost" <ehabkost@redhat.com>, "Richard Henderson" <richard.henderson@linaro.org>, "Greg Kurz" <groug@kaod.org>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, qemu-s390x@nongnu.org, qemu-arm@nongnu.org, "Michael Rolnik" <mrolnik@gmail.com>, "Peter Xu" <peterx@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, "Stafford Horne" <shorne@gmail.com>, "David Gibson" <david@gibson.dropbear.id.au>, qemu-riscv@nongnu.org, "Bastian Koppelmann" <kbastian@mail.uni-paderborn.de>, "Cornelia Huck" <cohuck@redhat.com>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>, qemu-ppc@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>, "Aleksandar Rikalo" <aleksandar.rikalo@syrmia.com>, "Aurelien Jarno" <aurelien@aurel32.net> Subject: [PATCH v2 43/53] target/i386: convert to use format_tlb callback Date: Tue, 14 Sep 2021 15:20:32 +0100 [thread overview] Message-ID: <20210914142042.1655100-44-berrange@redhat.com> (raw) In-Reply-To: <20210914142042.1655100-1-berrange@redhat.com> Change the "info tlb" implementation to use the format_tlb callback. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- target/i386/cpu.c | 3 ++ target/i386/cpu.h | 1 + target/i386/monitor.c | 107 +++++++++++++++++++++++------------------- 3 files changed, 63 insertions(+), 48 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 0a5c6a6d19..ab86224ee2 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -6765,6 +6765,9 @@ 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; diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 2bcb175da8..d61eeef617 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1826,6 +1826,7 @@ void x86_cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list, Error **errp); void x86_cpu_format_state(CPUState *cs, GString *buf, int flags); +void x86_cpu_format_tlb(CPUState *cpu, GString *buf); hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cpu, vaddr addr, MemTxAttrs *attrs); diff --git a/target/i386/monitor.c b/target/i386/monitor.c index fc09f90059..698fbbc80b 100644 --- a/target/i386/monitor.c +++ b/target/i386/monitor.c @@ -54,27 +54,27 @@ static hwaddr addr_canonical(CPUArchState *env, hwaddr addr) return addr; } -static void print_pte(Monitor *mon, CPUArchState *env, hwaddr addr, - hwaddr pte, hwaddr mask) +static void format_pte(GString *buf, CPUArchState *env, hwaddr addr, + hwaddr pte, hwaddr mask) { addr = addr_canonical(env, addr); - monitor_printf(mon, TARGET_FMT_plx ": " TARGET_FMT_plx - " %c%c%c%c%c%c%c%c%c\n", - addr, - pte & mask, - pte & PG_NX_MASK ? 'X' : '-', - pte & PG_GLOBAL_MASK ? 'G' : '-', - pte & PG_PSE_MASK ? 'P' : '-', - pte & PG_DIRTY_MASK ? 'D' : '-', - pte & PG_ACCESSED_MASK ? 'A' : '-', - pte & PG_PCD_MASK ? 'C' : '-', - pte & PG_PWT_MASK ? 'T' : '-', - pte & PG_USER_MASK ? 'U' : '-', - pte & PG_RW_MASK ? 'W' : '-'); + g_string_append_printf(buf, TARGET_FMT_plx ": " TARGET_FMT_plx + " %c%c%c%c%c%c%c%c%c\n", + addr, + pte & mask, + pte & PG_NX_MASK ? 'X' : '-', + pte & PG_GLOBAL_MASK ? 'G' : '-', + pte & PG_PSE_MASK ? 'P' : '-', + pte & PG_DIRTY_MASK ? 'D' : '-', + pte & PG_ACCESSED_MASK ? 'A' : '-', + pte & PG_PCD_MASK ? 'C' : '-', + pte & PG_PWT_MASK ? 'T' : '-', + pte & PG_USER_MASK ? 'U' : '-', + pte & PG_RW_MASK ? 'W' : '-'); } -static void tlb_info_32(Monitor *mon, CPUArchState *env) +static void tlb_info_32(GString *buf, CPUArchState *env) { unsigned int l1, l2; uint32_t pgd, pde, pte; @@ -86,15 +86,15 @@ static void tlb_info_32(Monitor *mon, CPUArchState *env) if (pde & PG_PRESENT_MASK) { if ((pde & PG_PSE_MASK) && (env->cr[4] & CR4_PSE_MASK)) { /* 4M pages */ - print_pte(mon, env, (l1 << 22), pde, ~((1 << 21) - 1)); + format_pte(buf, env, (l1 << 22), pde, ~((1 << 21) - 1)); } else { for(l2 = 0; l2 < 1024; l2++) { cpu_physical_memory_read((pde & ~0xfff) + l2 * 4, &pte, 4); pte = le32_to_cpu(pte); if (pte & PG_PRESENT_MASK) { - print_pte(mon, env, (l1 << 22) + (l2 << 12), - pte & ~PG_PSE_MASK, - ~0xfff); + format_pte(buf, env, (l1 << 22) + (l2 << 12), + pte & ~PG_PSE_MASK, + ~0xfff); } } } @@ -102,7 +102,7 @@ static void tlb_info_32(Monitor *mon, CPUArchState *env) } } -static void tlb_info_pae32(Monitor *mon, CPUArchState *env) +static void tlb_info_pae32(GString *buf, CPUArchState *env) { unsigned int l1, l2, l3; uint64_t pdpe, pde, pte; @@ -120,18 +120,18 @@ static void tlb_info_pae32(Monitor *mon, CPUArchState *env) if (pde & PG_PRESENT_MASK) { if (pde & PG_PSE_MASK) { /* 2M pages with PAE, CR4.PSE is ignored */ - print_pte(mon, env, (l1 << 30) + (l2 << 21), pde, - ~((hwaddr)(1 << 20) - 1)); + format_pte(buf, env, (l1 << 30) + (l2 << 21), pde, + ~((hwaddr)(1 << 20) - 1)); } else { pt_addr = pde & 0x3fffffffff000ULL; for (l3 = 0; l3 < 512; l3++) { cpu_physical_memory_read(pt_addr + l3 * 8, &pte, 8); pte = le64_to_cpu(pte); if (pte & PG_PRESENT_MASK) { - print_pte(mon, env, (l1 << 30) + (l2 << 21) - + (l3 << 12), - pte & ~PG_PSE_MASK, - ~(hwaddr)0xfff); + format_pte(buf, env, (l1 << 30) + (l2 << 21) + + (l3 << 12), + pte & ~PG_PSE_MASK, + ~(hwaddr)0xfff); } } } @@ -142,7 +142,7 @@ static void tlb_info_pae32(Monitor *mon, CPUArchState *env) } #ifdef TARGET_X86_64 -static void tlb_info_la48(Monitor *mon, CPUArchState *env, +static void tlb_info_la48(GString *buf, CPUArchState *env, uint64_t l0, uint64_t pml4_addr) { uint64_t l1, l2, l3, l4; @@ -166,8 +166,8 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, if (pdpe & PG_PSE_MASK) { /* 1G pages, CR4.PSE is ignored */ - print_pte(mon, env, (l0 << 48) + (l1 << 39) + (l2 << 30), - pdpe, 0x3ffffc0000000ULL); + format_pte(buf, env, (l0 << 48) + (l1 << 39) + (l2 << 30), + pdpe, 0x3ffffc0000000ULL); continue; } @@ -181,8 +181,8 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, if (pde & PG_PSE_MASK) { /* 2M pages, CR4.PSE is ignored */ - print_pte(mon, env, (l0 << 48) + (l1 << 39) + (l2 << 30) + - (l3 << 21), pde, 0x3ffffffe00000ULL); + format_pte(buf, env, (l0 << 48) + (l1 << 39) + (l2 << 30) + + (l3 << 21), pde, 0x3ffffffe00000ULL); continue; } @@ -193,9 +193,9 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, &pte, 8); pte = le64_to_cpu(pte); if (pte & PG_PRESENT_MASK) { - print_pte(mon, env, (l0 << 48) + (l1 << 39) + - (l2 << 30) + (l3 << 21) + (l4 << 12), - pte & ~PG_PSE_MASK, 0x3fffffffff000ULL); + format_pte(buf, env, (l0 << 48) + (l1 << 39) + + (l2 << 30) + (l3 << 21) + (l4 << 12), + pte & ~PG_PSE_MASK, 0x3fffffffff000ULL); } } } @@ -203,7 +203,7 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, } } -static void tlb_info_la57(Monitor *mon, CPUArchState *env) +static void tlb_info_la57(GString *buf, CPUArchState *env) { uint64_t l0; uint64_t pml5e; @@ -214,44 +214,55 @@ static void tlb_info_la57(Monitor *mon, CPUArchState *env) cpu_physical_memory_read(pml5_addr + l0 * 8, &pml5e, 8); pml5e = le64_to_cpu(pml5e); if (pml5e & PG_PRESENT_MASK) { - tlb_info_la48(mon, env, l0, pml5e & 0x3fffffffff000ULL); + tlb_info_la48(buf, env, l0, pml5e & 0x3fffffffff000ULL); } } } #endif /* TARGET_X86_64 */ -void hmp_info_tlb(Monitor *mon, const QDict *qdict) +void x86_cpu_format_tlb(CPUState *cpu, GString *buf) { CPUArchState *env; - env = mon_get_cpu_env(mon); - if (!env) { - monitor_printf(mon, "No CPU available\n"); - return; - } + env = cpu->env_ptr; if (!(env->cr[0] & CR0_PG_MASK)) { - monitor_printf(mon, "PG disabled\n"); + g_string_append_printf(buf, "PG disabled\n"); return; } if (env->cr[4] & CR4_PAE_MASK) { #ifdef TARGET_X86_64 if (env->hflags & HF_LMA_MASK) { if (env->cr[4] & CR4_LA57_MASK) { - tlb_info_la57(mon, env); + tlb_info_la57(buf, env); } else { - tlb_info_la48(mon, env, 0, env->cr[3] & 0x3fffffffff000ULL); + tlb_info_la48(buf, env, 0, env->cr[3] & 0x3fffffffff000ULL); } } else #endif { - tlb_info_pae32(mon, env); + tlb_info_pae32(buf, env); } } else { - tlb_info_32(mon, env); + tlb_info_32(buf, env); } } +void hmp_info_tlb(Monitor *mon, const QDict *qdict) +{ + g_autoptr(GString) buf = g_string_new(""); + CPUState *cpu = mon_get_cpu(mon); + + if (!cpu) { + monitor_printf(mon, "No CPU available\n"); + return; + } + + cpu_format_tlb(cpu, buf); + + monitor_printf(mon, "%s", buf->str); +} + static void mem_print(Monitor *mon, CPUArchState *env, hwaddr *pstart, int *plast_prot, hwaddr end, int prot) -- 2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: "Daniel P. Berrangé" <berrange@redhat.com> To: qemu-devel@nongnu.org Cc: "Greg Kurz" <groug@kaod.org>, "Bin Meng" <bin.meng@windriver.com>, "Yoshinori Sato" <ysato@users.sourceforge.jp>, "Stafford Horne" <shorne@gmail.com>, "Cornelia Huck" <cohuck@redhat.com>, "David Hildenbrand" <david@redhat.com>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, "Jiaxun Yang" <jiaxun.yang@flygoat.com>, "Peter Xu" <peterx@redhat.com>, "Christian Borntraeger" <borntraeger@de.ibm.com>, qemu-ppc@nongnu.org, "Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>, "Paolo Bonzini" <pbonzini@redhat.com>, qemu-arm@nongnu.org, "Michael Rolnik" <mrolnik@gmail.com>, "Peter Maydell" <peter.maydell@linaro.org>, "Palmer Dabbelt" <palmer@dabbelt.com>, "Alistair Francis" <alistair.francis@wdc.com>, "Halil Pasic" <pasic@linux.ibm.com>, "Taylor Simpson" <tsimpson@quicinc.com>, "Gerd Hoffmann" <kraxel@redhat.com>, qemu-riscv@nongnu.org, "Max Filippov" <jcmvbkbc@gmail.com>, "Yuval Shaia" <yuval.shaia.ml@gmail.com>, "Bastian Koppelmann" <kbastian@mail.uni-paderborn.de>, "Artyom Tarasenko" <atar4qemu@gmail.com>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>, "Thomas Huth" <thuth@redhat.com>, "Aleksandar Rikalo" <aleksandar.rikalo@syrmia.com>, "David Gibson" <david@gibson.dropbear.id.au>, "Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>, "Laurent Vivier" <laurent@vivier.eu>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, "Eduardo Habkost" <ehabkost@redhat.com>, "Marek Vasut" <marex@denx.de>, "Markus Armbruster" <armbru@redhat.com>, "Aurelien Jarno" <aurelien@aurel32.net>, qemu-s390x@nongnu.org, "Laurent Vivier" <lvivier@redhat.com>, "Eric Blake" <eblake@redhat.com>, "Richard Henderson" <richard.henderson@linaro.org>, "Chris Wulff" <crwulff@gmail.com>, "Daniel P. Berrangé" <berrange@redhat.com> Subject: [PATCH v2 43/53] target/i386: convert to use format_tlb callback Date: Tue, 14 Sep 2021 15:20:32 +0100 [thread overview] Message-ID: <20210914142042.1655100-44-berrange@redhat.com> (raw) In-Reply-To: <20210914142042.1655100-1-berrange@redhat.com> Change the "info tlb" implementation to use the format_tlb callback. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- target/i386/cpu.c | 3 ++ target/i386/cpu.h | 1 + target/i386/monitor.c | 107 +++++++++++++++++++++++------------------- 3 files changed, 63 insertions(+), 48 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 0a5c6a6d19..ab86224ee2 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -6765,6 +6765,9 @@ 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; diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 2bcb175da8..d61eeef617 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1826,6 +1826,7 @@ void x86_cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list, Error **errp); void x86_cpu_format_state(CPUState *cs, GString *buf, int flags); +void x86_cpu_format_tlb(CPUState *cpu, GString *buf); hwaddr x86_cpu_get_phys_page_attrs_debug(CPUState *cpu, vaddr addr, MemTxAttrs *attrs); diff --git a/target/i386/monitor.c b/target/i386/monitor.c index fc09f90059..698fbbc80b 100644 --- a/target/i386/monitor.c +++ b/target/i386/monitor.c @@ -54,27 +54,27 @@ static hwaddr addr_canonical(CPUArchState *env, hwaddr addr) return addr; } -static void print_pte(Monitor *mon, CPUArchState *env, hwaddr addr, - hwaddr pte, hwaddr mask) +static void format_pte(GString *buf, CPUArchState *env, hwaddr addr, + hwaddr pte, hwaddr mask) { addr = addr_canonical(env, addr); - monitor_printf(mon, TARGET_FMT_plx ": " TARGET_FMT_plx - " %c%c%c%c%c%c%c%c%c\n", - addr, - pte & mask, - pte & PG_NX_MASK ? 'X' : '-', - pte & PG_GLOBAL_MASK ? 'G' : '-', - pte & PG_PSE_MASK ? 'P' : '-', - pte & PG_DIRTY_MASK ? 'D' : '-', - pte & PG_ACCESSED_MASK ? 'A' : '-', - pte & PG_PCD_MASK ? 'C' : '-', - pte & PG_PWT_MASK ? 'T' : '-', - pte & PG_USER_MASK ? 'U' : '-', - pte & PG_RW_MASK ? 'W' : '-'); + g_string_append_printf(buf, TARGET_FMT_plx ": " TARGET_FMT_plx + " %c%c%c%c%c%c%c%c%c\n", + addr, + pte & mask, + pte & PG_NX_MASK ? 'X' : '-', + pte & PG_GLOBAL_MASK ? 'G' : '-', + pte & PG_PSE_MASK ? 'P' : '-', + pte & PG_DIRTY_MASK ? 'D' : '-', + pte & PG_ACCESSED_MASK ? 'A' : '-', + pte & PG_PCD_MASK ? 'C' : '-', + pte & PG_PWT_MASK ? 'T' : '-', + pte & PG_USER_MASK ? 'U' : '-', + pte & PG_RW_MASK ? 'W' : '-'); } -static void tlb_info_32(Monitor *mon, CPUArchState *env) +static void tlb_info_32(GString *buf, CPUArchState *env) { unsigned int l1, l2; uint32_t pgd, pde, pte; @@ -86,15 +86,15 @@ static void tlb_info_32(Monitor *mon, CPUArchState *env) if (pde & PG_PRESENT_MASK) { if ((pde & PG_PSE_MASK) && (env->cr[4] & CR4_PSE_MASK)) { /* 4M pages */ - print_pte(mon, env, (l1 << 22), pde, ~((1 << 21) - 1)); + format_pte(buf, env, (l1 << 22), pde, ~((1 << 21) - 1)); } else { for(l2 = 0; l2 < 1024; l2++) { cpu_physical_memory_read((pde & ~0xfff) + l2 * 4, &pte, 4); pte = le32_to_cpu(pte); if (pte & PG_PRESENT_MASK) { - print_pte(mon, env, (l1 << 22) + (l2 << 12), - pte & ~PG_PSE_MASK, - ~0xfff); + format_pte(buf, env, (l1 << 22) + (l2 << 12), + pte & ~PG_PSE_MASK, + ~0xfff); } } } @@ -102,7 +102,7 @@ static void tlb_info_32(Monitor *mon, CPUArchState *env) } } -static void tlb_info_pae32(Monitor *mon, CPUArchState *env) +static void tlb_info_pae32(GString *buf, CPUArchState *env) { unsigned int l1, l2, l3; uint64_t pdpe, pde, pte; @@ -120,18 +120,18 @@ static void tlb_info_pae32(Monitor *mon, CPUArchState *env) if (pde & PG_PRESENT_MASK) { if (pde & PG_PSE_MASK) { /* 2M pages with PAE, CR4.PSE is ignored */ - print_pte(mon, env, (l1 << 30) + (l2 << 21), pde, - ~((hwaddr)(1 << 20) - 1)); + format_pte(buf, env, (l1 << 30) + (l2 << 21), pde, + ~((hwaddr)(1 << 20) - 1)); } else { pt_addr = pde & 0x3fffffffff000ULL; for (l3 = 0; l3 < 512; l3++) { cpu_physical_memory_read(pt_addr + l3 * 8, &pte, 8); pte = le64_to_cpu(pte); if (pte & PG_PRESENT_MASK) { - print_pte(mon, env, (l1 << 30) + (l2 << 21) - + (l3 << 12), - pte & ~PG_PSE_MASK, - ~(hwaddr)0xfff); + format_pte(buf, env, (l1 << 30) + (l2 << 21) + + (l3 << 12), + pte & ~PG_PSE_MASK, + ~(hwaddr)0xfff); } } } @@ -142,7 +142,7 @@ static void tlb_info_pae32(Monitor *mon, CPUArchState *env) } #ifdef TARGET_X86_64 -static void tlb_info_la48(Monitor *mon, CPUArchState *env, +static void tlb_info_la48(GString *buf, CPUArchState *env, uint64_t l0, uint64_t pml4_addr) { uint64_t l1, l2, l3, l4; @@ -166,8 +166,8 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, if (pdpe & PG_PSE_MASK) { /* 1G pages, CR4.PSE is ignored */ - print_pte(mon, env, (l0 << 48) + (l1 << 39) + (l2 << 30), - pdpe, 0x3ffffc0000000ULL); + format_pte(buf, env, (l0 << 48) + (l1 << 39) + (l2 << 30), + pdpe, 0x3ffffc0000000ULL); continue; } @@ -181,8 +181,8 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, if (pde & PG_PSE_MASK) { /* 2M pages, CR4.PSE is ignored */ - print_pte(mon, env, (l0 << 48) + (l1 << 39) + (l2 << 30) + - (l3 << 21), pde, 0x3ffffffe00000ULL); + format_pte(buf, env, (l0 << 48) + (l1 << 39) + (l2 << 30) + + (l3 << 21), pde, 0x3ffffffe00000ULL); continue; } @@ -193,9 +193,9 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, &pte, 8); pte = le64_to_cpu(pte); if (pte & PG_PRESENT_MASK) { - print_pte(mon, env, (l0 << 48) + (l1 << 39) + - (l2 << 30) + (l3 << 21) + (l4 << 12), - pte & ~PG_PSE_MASK, 0x3fffffffff000ULL); + format_pte(buf, env, (l0 << 48) + (l1 << 39) + + (l2 << 30) + (l3 << 21) + (l4 << 12), + pte & ~PG_PSE_MASK, 0x3fffffffff000ULL); } } } @@ -203,7 +203,7 @@ static void tlb_info_la48(Monitor *mon, CPUArchState *env, } } -static void tlb_info_la57(Monitor *mon, CPUArchState *env) +static void tlb_info_la57(GString *buf, CPUArchState *env) { uint64_t l0; uint64_t pml5e; @@ -214,44 +214,55 @@ static void tlb_info_la57(Monitor *mon, CPUArchState *env) cpu_physical_memory_read(pml5_addr + l0 * 8, &pml5e, 8); pml5e = le64_to_cpu(pml5e); if (pml5e & PG_PRESENT_MASK) { - tlb_info_la48(mon, env, l0, pml5e & 0x3fffffffff000ULL); + tlb_info_la48(buf, env, l0, pml5e & 0x3fffffffff000ULL); } } } #endif /* TARGET_X86_64 */ -void hmp_info_tlb(Monitor *mon, const QDict *qdict) +void x86_cpu_format_tlb(CPUState *cpu, GString *buf) { CPUArchState *env; - env = mon_get_cpu_env(mon); - if (!env) { - monitor_printf(mon, "No CPU available\n"); - return; - } + env = cpu->env_ptr; if (!(env->cr[0] & CR0_PG_MASK)) { - monitor_printf(mon, "PG disabled\n"); + g_string_append_printf(buf, "PG disabled\n"); return; } if (env->cr[4] & CR4_PAE_MASK) { #ifdef TARGET_X86_64 if (env->hflags & HF_LMA_MASK) { if (env->cr[4] & CR4_LA57_MASK) { - tlb_info_la57(mon, env); + tlb_info_la57(buf, env); } else { - tlb_info_la48(mon, env, 0, env->cr[3] & 0x3fffffffff000ULL); + tlb_info_la48(buf, env, 0, env->cr[3] & 0x3fffffffff000ULL); } } else #endif { - tlb_info_pae32(mon, env); + tlb_info_pae32(buf, env); } } else { - tlb_info_32(mon, env); + tlb_info_32(buf, env); } } +void hmp_info_tlb(Monitor *mon, const QDict *qdict) +{ + g_autoptr(GString) buf = g_string_new(""); + CPUState *cpu = mon_get_cpu(mon); + + if (!cpu) { + monitor_printf(mon, "No CPU available\n"); + return; + } + + cpu_format_tlb(cpu, buf); + + monitor_printf(mon, "%s", buf->str); +} + static void mem_print(Monitor *mon, CPUArchState *env, hwaddr *pstart, int *plast_prot, hwaddr end, int prot) -- 2.31.1
next prev parent reply other threads:[~2021-09-14 15:08 UTC|newest] Thread overview: 216+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-14 14:19 [PATCH v2 00/53] monitor: explicitly permit QMP commands to be added for all use cases Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-14 14:19 ` [PATCH v2 01/53] docs/devel: rename file for writing monitor commands Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-20 7:42 ` Markus Armbruster 2021-09-20 7:42 ` Markus Armbruster 2021-09-22 16:02 ` Daniel P. Berrangé 2021-09-22 16:02 ` Daniel P. Berrangé 2021-09-14 14:19 ` [PATCH v2 02/53] docs/devel: tweak headings in monitor command docs Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-20 7:42 ` Markus Armbruster 2021-09-20 7:42 ` Markus Armbruster 2021-09-14 14:19 ` [PATCH v2 03/53] docs/devel: document expectations for QAPI data modelling for QMP Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-20 7:44 ` Markus Armbruster 2021-09-20 7:44 ` Markus Armbruster 2021-09-14 14:19 ` [PATCH v2 04/53] docs/devel: add example of command returning unstructured text Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-20 7:51 ` Markus Armbruster 2021-09-20 7:51 ` Markus Armbruster 2021-09-14 14:19 ` [PATCH v2 05/53] docs/devel: document expectations for HMP commands in the future Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-20 8:06 ` Markus Armbruster 2021-09-20 8:06 ` Markus Armbruster 2021-09-22 16:14 ` Daniel P. Berrangé 2021-09-22 16:14 ` Daniel P. Berrangé 2021-09-14 14:19 ` [PATCH v2 06/53] hw/core: introduce 'format_state' callback to replace 'dump_state' Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-14 15:53 ` Philippe Mathieu-Daudé 2021-09-14 15:53 ` Philippe Mathieu-Daudé 2021-09-14 19:28 ` Greg Kurz 2021-09-14 19:28 ` Greg Kurz 2021-09-14 14:19 ` [PATCH v2 07/53] target/alpha: convert to use format_state instead of dump_state Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-15 7:10 ` Philippe Mathieu-Daudé 2021-09-15 7:10 ` Philippe Mathieu-Daudé 2021-09-14 14:19 ` [PATCH v2 08/53] target/arm: " Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-14 14:19 ` [PATCH v2 09/53] target/avr: " Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-15 7:13 ` Philippe Mathieu-Daudé 2021-09-15 7:13 ` Philippe Mathieu-Daudé 2021-09-15 8:49 ` Daniel P. Berrangé 2021-09-15 8:49 ` Daniel P. Berrangé 2021-09-15 8:58 ` Philippe Mathieu-Daudé 2021-09-15 8:58 ` Philippe Mathieu-Daudé 2021-09-14 14:19 ` [PATCH v2 10/53] target/cris: " Daniel P. Berrangé 2021-09-14 14:19 ` Daniel P. Berrangé 2021-09-15 7:33 ` Philippe Mathieu-Daudé 2021-09-15 7:33 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 11/53] target/hexagon: delete unused hexagon_debug() method Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:50 ` Taylor Simpson 2021-09-14 14:50 ` Taylor Simpson 2021-09-15 7:00 ` Philippe Mathieu-Daudé 2021-09-15 7:00 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 12/53] target/hexagon: convert to use format_state instead of dump_state Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:14 ` Philippe Mathieu-Daudé 2021-09-15 7:14 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 13/53] target/hppa: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:15 ` Philippe Mathieu-Daudé 2021-09-15 7:15 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 14/53] target/i386: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 15/53] target/m68k: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 19:58 ` Laurent Vivier 2021-09-14 19:58 ` Laurent Vivier 2021-09-15 7:17 ` Philippe Mathieu-Daudé 2021-09-15 7:17 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 16/53] target/microblaze: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:18 ` Philippe Mathieu-Daudé 2021-09-15 7:18 ` Philippe Mathieu-Daudé 2021-09-15 7:21 ` Philippe Mathieu-Daudé 2021-09-15 7:21 ` Philippe Mathieu-Daudé 2021-09-15 7:23 ` Philippe Mathieu-Daudé 2021-09-15 7:23 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 17/53] target/mips: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:04 ` Philippe Mathieu-Daudé 2021-09-15 7:04 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 18/53] target/nios2: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:08 ` Philippe Mathieu-Daudé 2021-09-15 7:08 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 19/53] target/openrisc: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:19 ` Philippe Mathieu-Daudé 2021-09-15 7:19 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 20/53] target/ppc: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 19:30 ` Greg Kurz 2021-09-14 19:30 ` Greg Kurz 2021-09-15 1:37 ` David Gibson 2021-09-15 1:37 ` David Gibson 2021-09-14 14:20 ` [PATCH v2 21/53] target/riscv: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 22/53] target/rx: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:20 ` Philippe Mathieu-Daudé 2021-09-15 7:20 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 23/53] target/s390x: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 24/53] target/sh: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:24 ` Philippe Mathieu-Daudé 2021-09-15 7:24 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 25/53] target/sparc: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:27 ` Philippe Mathieu-Daudé 2021-09-15 7:27 ` Philippe Mathieu-Daudé 2021-09-16 10:53 ` Mark Cave-Ayland 2021-09-16 10:53 ` Mark Cave-Ayland 2021-09-14 14:20 ` [PATCH v2 26/53] target/tricore: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:29 ` Philippe Mathieu-Daudé 2021-09-15 7:29 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 27/53] target/xtensa: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 7:32 ` Philippe Mathieu-Daudé 2021-09-15 7:32 ` Philippe Mathieu-Daudé 2021-09-15 7:54 ` Max Filippov 2021-09-15 7:54 ` Max Filippov 2021-09-15 8:52 ` Daniel P. Berrangé 2021-09-15 8:52 ` Daniel P. Berrangé 2021-09-15 9:01 ` Philippe Mathieu-Daudé 2021-09-15 9:01 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 28/53] monitor: remove 'info ioapic' HMP command Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 15:50 ` Philippe Mathieu-Daudé 2021-09-14 15:50 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 29/53] qapi: introduce x-query-registers QMP command Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 16:04 ` Eric Blake 2021-09-14 16:04 ` Eric Blake 2021-09-14 17:15 ` Philippe Mathieu-Daudé 2021-09-14 17:15 ` Philippe Mathieu-Daudé 2021-09-14 17:18 ` Philippe Mathieu-Daudé 2021-09-14 17:18 ` Philippe Mathieu-Daudé 2021-09-14 14:20 ` [PATCH v2 30/53] qapi: introduce x-query-roms " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 16:04 ` Philippe Mathieu-Daudé 2021-09-14 16:04 ` Philippe Mathieu-Daudé 2021-09-14 16:42 ` Daniel P. Berrangé 2021-09-14 16:42 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 31/53] qapi: introduce x-query-profile " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 32/53] qapi: introduce x-query-numa " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 33/53] qapi: introduce x-query-usb " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 34/53] qapi: introduce x-query-rdma " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 35/53] qapi: introduce x-query-ramblock " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 36/53] qapi: introduce x-query-skeys " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 37/53] qapi: introduce x-query-cmma " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 38/53] qapi: introduce x-query-lapic " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-21 5:27 ` Dongli Zhang 2021-09-21 5:27 ` Dongli Zhang 2021-09-22 16:30 ` Daniel P. Berrangé 2021-09-22 16:30 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 39/53] qapi: introduce x-query-irq " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 40/53] hw/core: drop "dump_state" callback from CPU targets Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 41/53] hw/core: drop support for NULL pointer for FILE * in cpu_dump_state Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 42/53] hw/core: introduce a 'format_tlb' callback Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 15:56 ` Philippe Mathieu-Daudé 2021-09-14 15:56 ` Philippe Mathieu-Daudé 2021-09-14 16:34 ` Daniel P. Berrangé 2021-09-14 16:34 ` Daniel P. Berrangé 2021-09-14 17:02 ` Philippe Mathieu-Daudé 2021-09-14 17:02 ` Philippe Mathieu-Daudé 2021-09-14 17:12 ` Daniel P. Berrangé 2021-09-14 17:12 ` Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé [this message] 2021-09-14 14:20 ` [PATCH v2 43/53] target/i386: convert to use format_tlb callback Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 44/53] target/m68k: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 19:59 ` Laurent Vivier 2021-09-14 19:59 ` Laurent Vivier 2021-09-14 14:20 ` [PATCH v2 45/53] target/nios2: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 46/53] target/ppc: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 1:40 ` David Gibson 2021-09-15 1:40 ` David Gibson 2021-09-14 14:20 ` [PATCH v2 47/53] target/sh4: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 48/53] target/sparc: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-16 10:54 ` Mark Cave-Ayland 2021-09-16 10:54 ` Mark Cave-Ayland 2021-09-14 14:20 ` [PATCH v2 49/53] target/xtensa: " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 8:01 ` Max Filippov 2021-09-15 8:01 ` Max Filippov 2021-09-14 14:20 ` [PATCH v2 50/53] monitor: merge duplicate "info tlb" handlers Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-15 1:41 ` David Gibson 2021-09-15 1:41 ` David Gibson 2021-09-14 14:20 ` [PATCH v2 51/53] qapi: introduce x-query-tlb QMP command Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 52/53] qapi: introduce x-query-jit " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé 2021-09-14 14:20 ` [PATCH v2 53/53] qapi: introduce x-query-opcount " Daniel P. Berrangé 2021-09-14 14:20 ` Daniel P. Berrangé
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=20210914142042.1655100-44-berrange@redhat.com \ --to=berrange@redhat.com \ --cc=aleksandar.rikalo@syrmia.com \ --cc=alistair.francis@wdc.com \ --cc=armbru@redhat.com \ --cc=atar4qemu@gmail.com \ --cc=aurelien@aurel32.net \ --cc=bin.meng@windriver.com \ --cc=borntraeger@de.ibm.com \ --cc=cohuck@redhat.com \ --cc=crwulff@gmail.com \ --cc=david@gibson.dropbear.id.au \ --cc=david@redhat.com \ --cc=dgilbert@redhat.com \ --cc=eblake@redhat.com \ --cc=edgar.iglesias@gmail.com \ --cc=ehabkost@redhat.com \ --cc=f4bug@amsat.org \ --cc=groug@kaod.org \ --cc=jcmvbkbc@gmail.com \ --cc=kbastian@mail.uni-paderborn.de \ --cc=kraxel@redhat.com \ --cc=laurent@vivier.eu \ --cc=lvivier@redhat.com \ --cc=marex@denx.de \ --cc=mark.cave-ayland@ilande.co.uk \ --cc=mrolnik@gmail.com \ --cc=palmer@dabbelt.com \ --cc=pasic@linux.ibm.com \ --cc=pbonzini@redhat.com \ --cc=peter.maydell@linaro.org \ --cc=peterx@redhat.com \ --cc=qemu-arm@nongnu.org \ --cc=qemu-devel@nongnu.org \ --cc=qemu-ppc@nongnu.org \ --cc=qemu-riscv@nongnu.org \ --cc=qemu-s390x@nongnu.org \ --cc=richard.henderson@linaro.org \ --cc=shorne@gmail.com \ --cc=thuth@redhat.com \ --cc=tsimpson@quicinc.com \ --cc=ysato@users.sourceforge.jp \ --cc=yuval.shaia.ml@gmail.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: linkBe 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.