Hi Philippe, On 3/14/21 1:00 AM, Philippe Mathieu-Daudé wrote: > Hi Claudio, > > On 2/4/21 5:39 PM, Claudio Fontana wrote: >> v15 -> v16: >> >> * cpu: Move synchronize_from_tb() to tcg_ops: >> - adjusted comments (Alex) >> >> * cpu: tcg_ops: move to tcg-cpu-ops.h, keep a pointer in CPUClass: >> - remove forward decl. of AccelCPUClass, should be in a later patch. (Alex) >> - simplified comment about tcg_ops in struct CPUClass (Alex) >> - remove obsolete comment about ARM blocking TCGCPUOps from being const. >> (Alex) >> >> * accel: replace struct CpusAccel with AccelOpsClass: >> - reworded commit message to be clearer about the objective (Alex) >> >> * accel: introduce AccelCPUClass extending CPUClass >> - reworded commit message to be clearer about the objective (Alex) >> >> * hw/core/cpu: call qemu_init_vcpu in cpu_common_realizefn: >> - dropped this patch (Alex, Philippe) >> >> will try again later, also in the context of: >> https://www.mail-archive.com/qemu-devel@nongnu.org/msg686480.html >> >> * accel: introduce new accessor functions >> - squashed comments in previous patch introducing accel-cpu.h. (Philippe) >> >> * accel-cpu: make cpu_realizefn return a bool >> - split in two patches, separating the change to the phys_bits check >> (Philippe) > > I am looking at this code: > > $ git grep tcg_ softmmu/physmem.c > softmmu/physmem.c:153:static void > tcg_log_global_after_sync(MemoryListener *listener); > softmmu/physmem.c:154:static void tcg_commit(MemoryListener *listener); > softmmu/physmem.c:161: * @tcg_as_listener: listener for tracking changes > to the AddressSpace > softmmu/physmem.c:167: MemoryListener tcg_as_listener; > softmmu/physmem.c:590:static void tcg_iommu_unmap_notify(IOMMUNotifier > *n, IOMMUTLBEntry *iotlb) > softmmu/physmem.c:606:static void tcg_register_iommu_notifier(CPUState *cpu, > softmmu/physmem.c:640: tcg_iommu_unmap_notify, > softmmu/physmem.c:654:void tcg_iommu_free_notifier_list(CPUState *cpu) > softmmu/physmem.c:668:void tcg_iommu_init_notifier_list(CPUState *cpu) > softmmu/physmem.c:698: tcg_register_iommu_notifier(cpu, iommu_mr, > iommu_idx); > softmmu/physmem.c:761: if (tcg_enabled()) { > softmmu/physmem.c:762: > newas->tcg_as_listener.log_global_after_sync = tcg_log_global_after_sync; > softmmu/physmem.c:763: newas->tcg_as_listener.commit = tcg_commit; > softmmu/physmem.c:764: > memory_listener_register(&newas->tcg_as_listener, as); > softmmu/physmem.c:891: assert(tcg_enabled()); > softmmu/physmem.c:904: if (cc->tcg_ops->adjust_watchpoint_address) { > softmmu/physmem.c:906: addr = > cc->tcg_ops->adjust_watchpoint_address(cpu, addr, len); > softmmu/physmem.c:927: if (wp->flags & BP_CPU && > cc->tcg_ops->debug_check_watchpoint && > softmmu/physmem.c:928: > !cc->tcg_ops->debug_check_watchpoint(cpu, wp)) { > softmmu/physmem.c:1004: assert(tcg_enabled()); > softmmu/physmem.c:1059: if (dirty && tcg_enabled()) { > softmmu/physmem.c:1107: if (tcg_enabled()) { > softmmu/physmem.c:2605:static void > tcg_log_global_after_sync(MemoryListener *listener) > softmmu/physmem.c:2634: cpuas = container_of(listener, > CPUAddressSpace, tcg_as_listener); > softmmu/physmem.c:2639:static void tcg_commit(MemoryListener *listener) > softmmu/physmem.c:2644: assert(tcg_enabled()); > softmmu/physmem.c:2647: cpuas = container_of(listener, > CPUAddressSpace, tcg_as_listener); > softmmu/physmem.c:2700: assert(tcg_enabled()); > softmmu/physmem.c:3000: if (tcg_enabled()) { > > which reminded me the starter generic part of your effort > (already merged). > > Do you have plans for this code? > > Similarly: > > $ git grep kvm_ softmmu/physmem.c > softmmu/physmem.c:752: assert(asidx == 0 || !kvm_enabled()); > softmmu/physmem.c:1295: if (kvm_enabled()) > softmmu/physmem.c:1296: kvm_flush_coalesced_mmio_buffer(); > softmmu/physmem.c:1566: if (kvm_enabled()) { > softmmu/physmem.c:2046: if (kvm_enabled() && !kvm_has_sync_mmu()) { > > Thanks, > > Phil. >
Hi Phil, indeed it is a juicy target for splitting things between TCG-only and non-TCG code, specifically as we discovered that we don't need any of the watchpoint stuff outside of TCG. I think I am tied up in the ARM code for a while, so if you are asking because you want to start there, just go ahead, I'll try to review, otherwise I'll get back to it (and to i386) later on. Ciao, Claudio