[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 21/33] accel: add init_accel_cpu for adapting accel behavior to CP
From: |
Paolo Bonzini |
Subject: |
[PULL 21/33] accel: add init_accel_cpu for adapting accel behavior to CPU type |
Date: |
Tue, 11 May 2021 04:13:38 -0400 |
From: Claudio Fontana <cfontana@suse.de>
while on x86 all CPU classes can use the same set of TCGCPUOps,
on ARM the right accel behavior depends on the type of the CPU.
So we need a way to specialize the accel behavior according to
the CPU. Therefore, add a second initialization, after the
accel_cpu->cpu_class_init, that allows to do this.
Signed-off-by: Claudio Fontana <cfontana@suse.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20210322132800.7470-24-cfontana@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
accel/accel-common.c | 13 +++++++++++++
include/hw/core/cpu.h | 6 ++++++
target/i386/tcg/tcg-cpu.c | 8 +++++++-
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/accel/accel-common.c b/accel/accel-common.c
index d77c09d7b5..cf07f78421 100644
--- a/accel/accel-common.c
+++ b/accel/accel-common.c
@@ -54,10 +54,23 @@ static void accel_init_cpu_int_aux(ObjectClass *klass, void
*opaque)
CPUClass *cc = CPU_CLASS(klass);
AccelCPUClass *accel_cpu = opaque;
+ /*
+ * The first callback allows accel-cpu to run initializations
+ * for the CPU, customizing CPU behavior according to the accelerator.
+ *
+ * The second one allows the CPU to customize the accel-cpu
+ * behavior according to the CPU.
+ *
+ * The second is currently only used by TCG, to specialize the
+ * TCGCPUOps depending on the CPU type.
+ */
cc->accel_cpu = accel_cpu;
if (accel_cpu->cpu_class_init) {
accel_cpu->cpu_class_init(cc);
}
+ if (cc->init_accel_cpu) {
+ cc->init_accel_cpu(accel_cpu, cc);
+ }
}
/* initialize the arch-specific accel CpuClass interfaces */
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index c68bc3ba8a..d45f78290e 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -192,6 +192,12 @@ struct CPUClass {
/* when TCG is not available, this pointer is NULL */
struct TCGCPUOps *tcg_ops;
+
+ /*
+ * if not NULL, this is called in order for the CPUClass to initialize
+ * class data that depends on the accelerator, see accel/accel-common.c.
+ */
+ void (*init_accel_cpu)(struct AccelCPUClass *accel_cpu, CPUClass *cc);
};
/*
diff --git a/target/i386/tcg/tcg-cpu.c b/target/i386/tcg/tcg-cpu.c
index e311f52855..ba39531aa5 100644
--- a/target/i386/tcg/tcg-cpu.c
+++ b/target/i386/tcg/tcg-cpu.c
@@ -69,11 +69,17 @@ static struct TCGCPUOps x86_tcg_ops = {
#endif /* !CONFIG_USER_ONLY */
};
-static void tcg_cpu_class_init(CPUClass *cc)
+static void tcg_cpu_init_ops(AccelCPUClass *accel_cpu, CPUClass *cc)
{
+ /* for x86, all cpus use the same set of operations */
cc->tcg_ops = &x86_tcg_ops;
}
+static void tcg_cpu_class_init(CPUClass *cc)
+{
+ cc->init_accel_cpu = tcg_cpu_init_ops;
+}
+
/*
* TCG-specific defaults that override all CPU models when using TCG
*/
--
2.26.2
- [PULL 15/33] i386: split seg_helper into user-only and sysemu parts, (continued)
- [PULL 15/33] i386: split seg_helper into user-only and sysemu parts, Paolo Bonzini, 2021/05/11
- [PULL 13/33] i386: separate fpu_helper sysemu-only parts, Paolo Bonzini, 2021/05/11
- [PULL 22/33] target/i386: merge SVM_NPTEXIT_* with PF_ERROR_* constants, Paolo Bonzini, 2021/05/11
- [PULL 32/33] configure: fix detection of gdbus-codegen, Paolo Bonzini, 2021/05/11
- [PULL 26/33] target/i386: extend pg_mode to more CR0 and CR4 bits, Paolo Bonzini, 2021/05/11
- [PULL 33/33] coverity-scan: list components, move model to scripts/coverity-scan, Paolo Bonzini, 2021/05/11
- [PULL 29/33] main-loop: remove dead code, Paolo Bonzini, 2021/05/11
- [PULL 25/33] target/i386: pass cr3 to mmu_translate, Paolo Bonzini, 2021/05/11
- [PULL 24/33] target/i386: extract mmu_translate, Paolo Bonzini, 2021/05/11
- [PULL 28/33] target/i386: use mmu_translate for NPT walk, Paolo Bonzini, 2021/05/11
- [PULL 21/33] accel: add init_accel_cpu for adapting accel behavior to CPU type,
Paolo Bonzini <=
- [PULL 27/33] target/i386: allow customizing the next phase of the translation, Paolo Bonzini, 2021/05/11
- [PULL 31/33] qemu-option: support accept-any QemuOptsList in qemu_opts_absorb_qdict, Paolo Bonzini, 2021/05/11
- [PULL 30/33] migration: do not restart VM after successful snapshot-load, Paolo Bonzini, 2021/05/11
- [PULL 16/33] i386: split off sysemu part of cpu.c, Paolo Bonzini, 2021/05/11