On Wed, 20 Mar 2024 at 17:06, Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> wrote: > > +Alex/Daniel > > On 20/3/24 17:53, Peter Maydell wrote: > > On Wed, 20 Mar 2024 at 16:40, Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> wrote: > >> > >> 'info tlb' and 'info mem' commands don't scale in heterogeneous > >> emulation. They will be reworked after the next release, hidden > >> behind the 'info mmu' command. It is not too late to deprecate > >> commands, so add the 'info mmu' command as wrapper to the other > >> ones, but already deprecate them. > >> > >> Philippe Mathieu-Daudé (2): > >> target/monitor: Introduce 'info mmu' command > >> target/monitor: Deprecate 'info tlb' and 'info mem' commands > > > > This seems to replace "info tlb" and "info mem" with "info mmu -t" > > and "info mmu -m", but it doesn't really say anything about: > > * what the difference is between these two things > > I really don't know; I'm only trying to keep the monitor interface > identical. You don't, though: you change it from "info tlb" to "info mmu -t" etc. > > * which targets implement which and why > > This one is easy to answer: > > #if defined(TARGET_I386) || defined(TARGET_SH4) || defined(TARGET_SPARC) > || \ > defined(TARGET_PPC) || defined(TARGET_XTENSA) || defined(TARGET_M68K) > { > .name = "tlb", > > #if defined(TARGET_I386) || defined(TARGET_RISCV) > { > .name = "mem", > > > * what the plan is for the future > > My problem is with linking a single QEMU binary, as these two symbols > (hmp_info_mem and hmp_info_tlb) clash. Yes, but they both (implicitly) operate on the current HMP CPU, so the problem with linking into a single binary is that they're not indirected through a method on the CPU object, not the syntax used in the monitor to invoke them, presumably. > I'm indeed only postponing the problem, without looking at what > this code does. I did it adding hmp_info_mmu_tlb/mem hooks in > TCGCPUOps ("hw/core/tcg-cpu-ops.h"), so the command can be > dispatched per target vcpu as target-agnostic code in > monitor/hmp-cmds.c: > > +#include "hw/core/tcg-cpu-ops.h" > + > +static void hmp_info_mmu_tlb(Monitor *mon, CPUState *cpu) > +{ > + const TCGCPUOps *tcg_ops = cpu->cc->tcg_ops; > + > + if (tcg_ops->hmp_info_mmu_tlb) { > + tcg_ops->hmp_info_mmu_tlb(mon, cpu_env(cpu)); > + } else { > + monitor_puts(mon, "No per-CPU information available on this > target\n"); > + } > +} These aren't TCG specific though, so why TCGCPUOps ? > > I am definitely not a fan of either of these commands, because > > (as we currently implement them) they effectively require each > > target architecture to implement a second copy of the page table > > walking code. But before we can deprecate them we need to be > > pretty sure that "info mmu" is what we want to replace them with. > > An alternative is to just deprecate them, without adding "info mmu" :) > > It is OK to un-deprecate stuff if we realize its usefulness. The commands are there because some users find them useful. I just dislike them because I think they're a bit niche and annoying to implement and not consistent across target architectures and not very well documented... By the way, we have no obligation to follow the deprecate-and-drop process for HMP commands; unlike QMP, we give ourselves the license to vary it when we feel like it, because the users are humans, not programs or scripts. -- PMM _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx