Could get re-review: 4 & 5

Move cpu_init/realize hooks from AccelCPUClass to
AccelOpsClass. Specialize them for TCG in TCGCPUOps.

This drastically simplifies the need of per-binary QOM
types per accelerator per target (see also the nice
diff-stat).

Based-on: tag single-binary-20260528

Ignoring checkpatch.pl:

  WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
    accel/accel-target.c
    include/accel/accel-cpu-target.h
    include/accel/accel-cpu.h

$ git backport-diff since v1:

  [----] : patches are identical
  [####] : number of functional differences between upstream/downstream patch
  [down] : patch is downstream-only
  The flags [FC] indicate (F)unctional and (C)ontextual differences, 
respectively

  001/      17:[----] [--] 'target/loongarch: Remove unused 
'accel/accel-cpu-target.h' header'
  002/      17:[----] [--] 'accel: Remove AccelCPUClass::cpu_class_init()'
  003/      17:[----] [--] 'accel: Rename AccelOpsClass::cpu_target_realize() 
-> cpu_realize()'
  004/      17:[----] [--] 'accel/hvf: Remove need for 
AccelCPUClass::cpu_realize'
  005/      17:[----] [--] 'accel/kvm: Remove need for 
AccelCPUClass::cpu_realize'
  006/      17:[----] [--] 'accel: Introduce AccelOpsClass::cpu_instance_init 
handler'
  007/      17:[----] [--] 'accel/whpx: Convert AccelCPUClass -> 
AccelOpsClass::cpu_instance_init'
  008/      17:[0002] [FC] 'accel/nvmm: Convert AccelCPUClass -> 
AccelOpsClass::cpu_instance_init'
  009/      17:[0002] [FC] 'accel/hvf: Convert AccelCPUClass -> 
AccelOpsClass::cpu_instance_init'
  010/      17:[0016] [FC] 'accel/kvm: Convert AccelCPUClass -> 
AccelOpsClass::cpu_instance_init'
  011/      17:[----] [--] 'accel/tcg: Convert AccelCPUClass -> new 
TCGCPUOps::cpu_instance_init'
  012/      17:[----] [--] 'accel: Remove AccelCPUClass::cpu_instance_init()'
  013/      17:[----] [--] 'accel/tcg: Convert AccelCPUClass -> new 
TCGCPUOps::cpu_realize'
  014/      17:[----] [--] 'accel/tcg: Convert X86 AccelCPUClass -> 
TCGCPUOps::cpu_realize'
  015/      17:[----] [--] 'accel/tcg: Convert RISCV AccelCPUClass -> 
TCGCPUOps::cpu_realize'
  016/      17:[----] [--] 'accel: Remove AccelCPUClass::cpu_target_realize()'
  017/      17:[----] [--] 'accel: Remove AccelCPUClass and 
'accel/accel-cpu-target.h''

  diff --git a/include/system/kvm.h b/include/system/kvm.h
  index 2c31fa6019e..a249f076763 100644
  --- a/include/system/kvm.h
  +++ b/include/system/kvm.h
  @@ -225,0 +226,3 @@ void kvm_irqchip_change_notify(void);
  +void kvm_arch_cpu_instance_init(CPUState *cpu);
  +bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp);
  +
  @@ -367,3 +369,0 @@ int kvm_arch_destroy_vcpu(CPUState *cpu);
  -void kvm_arch_cpu_instance_init(CPUState *cpu);
  -bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp);
  -
  diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c
  index 113a23f2384..edad3c1acea 100644
  --- a/accel/kvm/kvm-accel-ops.c
  +++ b/accel/kvm/kvm-accel-ops.c
  @@ -101 +101 @@ static void kvm_accel_ops_class_init(ObjectClass *oc, const 
void *data)
  -    ops->cpu_target_realize = kvm_arch_cpu_realize;
  +    ops->cpu_realize = kvm_arch_cpu_realize;
  diff --git a/target/arm/kvm.c b/target/arm/kvm.c
  index 7d194ea112b..0f1a98b430f 100644
  --- a/target/arm/kvm.c
  +++ b/target/arm/kvm.c
  @@ -1785,0 +1786,9 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
  +void kvm_arch_cpu_instance_init(CPUState *cpu)
  +{
  +}
  +
  +bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp)
  +{
  +    return true;
  +}
  +
  diff --git a/target/i386/hvf/hvf-cpu.c b/target/i386/hvf/hvf-cpu.c
  index 5d74ca6fd56..536bcecd7d2 100644
  --- a/target/i386/hvf/hvf-cpu.c
  +++ b/target/i386/hvf/hvf-cpu.c
  @@ -58 +58 @@ static void hvf_cpu_xsave_init(void)
  -void hvf_arch_cpu_instance_init(CPUState *cpu)
  +void hvf_arch_cpu_instance_init(CPUState *cs)
  diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c
  index 10ab7b2a4dc..2973e28122a 100644
  --- a/target/i386/nvmm/nvmm-all.c
  +++ b/target/i386/nvmm/nvmm-all.c
  @@ -1214 +1214 @@ static const TypeInfo nvmm_accel_type = {
  -void nvmm_arch_cpu_instance_init(CPUState *cpu)
  +void nvmm_arch_cpu_instance_init(CPUState *cs)
  diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
  index 9d844c4905a..167fdd515be 100644
  --- a/target/loongarch/kvm/kvm.c
  +++ b/target/loongarch/kvm/kvm.c
  @@ -1497,0 +1498,9 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
  +
  +void kvm_arch_cpu_instance_init(CPUState *cpu)
  +{
  +}
  +
  +bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp)
  +{
  +    return true;
  +}
  diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
  index 013f5e852e1..894962d509f 100644
  --- a/target/ppc/kvm.c
  +++ b/target/ppc/kvm.c
  @@ -2354,0 +2355,4 @@ static void alter_insns(uint64_t *word, uint64_t flags, 
bool on)
  +void kvm_arch_cpu_instance_init(CPUState *cpu)
  +{
  +}
  +
  diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
  index 2e4f435c537..46730e72a92 100644
  --- a/target/s390x/kvm/kvm.c
  +++ b/target/s390x/kvm/kvm.c
  @@ -2613,0 +2614,9 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
  +
  +void kvm_arch_cpu_instance_init(CPUState *cpu)
  +{
  +}
  +
  +bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp)
  +{
  +    return true;
  +}

Philippe Mathieu-Daudé (17):
  target/loongarch: Remove unused 'accel/accel-cpu-target.h' header
  accel: Remove AccelCPUClass::cpu_class_init()
  accel: Rename AccelOpsClass::cpu_target_realize() -> cpu_realize()
  accel/hvf: Remove need for AccelCPUClass::cpu_realize
  accel/kvm: Remove need for AccelCPUClass::cpu_realize
  accel: Introduce AccelOpsClass::cpu_instance_init handler
  accel/whpx: Convert AccelCPUClass -> AccelOpsClass::cpu_instance_init
  accel/nvmm: Convert AccelCPUClass -> AccelOpsClass::cpu_instance_init
  accel/hvf: Convert AccelCPUClass -> AccelOpsClass::cpu_instance_init
  accel/kvm: Convert AccelCPUClass -> AccelOpsClass::cpu_instance_init
  accel/tcg: Convert AccelCPUClass -> new TCGCPUOps::cpu_instance_init
  accel: Remove AccelCPUClass::cpu_instance_init()
  accel/tcg: Convert AccelCPUClass -> new TCGCPUOps::cpu_realize
  accel/tcg: Convert X86 AccelCPUClass -> TCGCPUOps::cpu_realize
  accel/tcg: Convert RISCV AccelCPUClass -> TCGCPUOps::cpu_realize
  accel: Remove AccelCPUClass::cpu_target_realize()
  accel: Remove AccelCPUClass and 'accel/accel-cpu-target.h'

 accel/tcg/tcg-accel-ops.h         |  1 +
 include/accel/accel-cpu-ops.h     |  3 +-
 include/accel/accel-cpu-target.h  | 31 --------------
 include/accel/accel-cpu.h         | 23 -----------
 include/accel/tcg/cpu-ops.h       |  2 +
 include/system/hvf_int.h          |  1 +
 include/system/kvm.h              |  3 ++
 target/i386/nvmm/nvmm-accel-ops.h |  2 +
 accel/accel-common.c              | 68 ++++---------------------------
 accel/hvf/hvf-accel-ops.c         |  3 +-
 accel/kvm/kvm-accel-ops.c         |  2 +
 accel/tcg/cpu-exec.c              | 15 ++++++-
 accel/tcg/tcg-accel-ops.c         |  1 +
 accel/whpx/whpx-accel-ops.c       |  2 +
 accel/whpx/whpx-common.c          | 17 --------
 target/arm/hvf/hvf.c              |  4 ++
 target/arm/kvm.c                  |  9 ++++
 target/arm/whpx/whpx-all.c        |  1 -
 target/i386/hvf/hvf-cpu.c         | 25 ++----------
 target/i386/hvf/hvf.c             |  5 ---
 target/i386/kvm/kvm-cpu.c         | 25 +-----------
 target/i386/nvmm/nvmm-accel-ops.c |  2 +
 target/i386/nvmm/nvmm-all.c       | 19 +--------
 target/i386/tcg/tcg-cpu.c         | 28 ++-----------
 target/i386/whpx/whpx-all.c       |  1 -
 target/loongarch/kvm/kvm.c        |  9 ++++
 target/loongarch/tcg/tcg_cpu.c    |  1 -
 target/ppc/kvm.c                  | 27 +++---------
 target/riscv/kvm/kvm-cpu.c        | 33 +--------------
 target/riscv/tcg/tcg-cpu.c        | 28 +++----------
 target/s390x/kvm/kvm.c            |  9 ++++
 31 files changed, 95 insertions(+), 305 deletions(-)
 delete mode 100644 include/accel/accel-cpu-target.h
 delete mode 100644 include/accel/accel-cpu.h

-- 
2.53.0


Reply via email to