The proposal in v2 was to allocate all defined address spaces
(CPUAddressSpace structs) statically, modifying the Address Space (AS)
API by renaming cpu_address_space_init() to cpu_address_space_add() and
by introducing a new cpu_address_space_init() meant to be used to set
the total number of address spaces in a CPU (instead of setting the
cpu->num_ases invariant directly, as we currently do).

However, Phil said that what he actually had in mind was to set
cpu->num_ases automatically in the CPUClass, hence without the need to
set cpu->num_ases using any AS API function, burying the details of
initializing cpu->num_ases within the CPUClass. This way, the
initialization of the ASes is reduced to the simple and unique use of
cpu_address_space_init().

This version (v3) is essentially based on what Phil proposed in the v2
review, but I removed the re-setting of cs->num_ases to 1 in
x86_cpu_realizefn(), avoiding changes to num_ases beyond the CPUClass
instantiation.

First, it will become inconsistent as new ASes are added. Second, it
risks causing confusion about the new AS API semantics, which require
using cpu_address_space_init on demand, as ASes are required by the
target, without modifying num_ases elsewhere in the code beyond CPUClass
instantiation.

I hope that now we have a strong candidate to be merged that enhances
the current situation, allowing adding new address spaces in the target
quite easily.

CI results:
https://gitlab.com/gusbromero/qemu/-/pipelines/2228868887

v1:
https://mail.gnu.org/archive/html/qemu-devel/2025-11/msg04406.html

v2:
https://mail.gnu.org/archive/html/qemu-devel/2025-12/msg02298.html


Cheers,
Gustavo

Gustavo Romero (3):
  target/arm: Initialize AS 0 first
  target/i386: Add a _MAX sentinel to X86ASIdx enum
  target/arm: Add a _MAX sentinel to ARMASIdx enum

Philippe Mathieu-Daudé (1):
  cpus: Define total number of address spaces in CPUClass

 hw/core/cpu-common.c      |  2 +-
 hw/core/cpu-system.c      |  6 ------
 include/hw/core/cpu.h     |  3 +++
 system/cpus.c             |  7 ++++---
 system/physmem.c          | 22 ++++++++++++++++------
 target/arm/cpu.c          |  5 +++--
 target/arm/cpu.h          |  2 ++
 target/i386/cpu.c         |  1 +
 target/i386/cpu.h         |  2 ++
 target/i386/kvm/kvm-cpu.c |  1 -
 10 files changed, 32 insertions(+), 19 deletions(-)

-- 
2.34.1


Reply via email to