All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudio Fontana <cfontana@suse.de>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Alex Bennée" <alex.bennee@linaro.org>
Cc: Laurent Vivier <lvivier@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Roman Bolshakov <r.bolshakov@yadro.com>,
	Claudio Fontana <cfontana@suse.de>,
	qemu-devel@nongnu.org
Subject: [RFC] accel: add cpu_reset
Date: Mon, 22 Mar 2021 14:27:37 +0100	[thread overview]
Message-ID: <20210322132800.7470-2-cfontana@suse.de> (raw)
In-Reply-To: <20210322132800.7470-1-cfontana@suse.de>

XXX
---
 accel/accel-common.c        | 9 +++++++++
 hw/core/cpu.c               | 3 ++-
 include/hw/core/accel-cpu.h | 2 ++
 include/qemu/accel.h        | 6 ++++++
 target/i386/cpu.c           | 4 ----
 target/i386/kvm/kvm-cpu.c   | 6 ++++++
 6 files changed, 25 insertions(+), 5 deletions(-)


This surprisingly works without moving cpu_reset() to a
specific_ss module, even though

accel-common.c is specific_ss,
hw/core/cpu.c  is common_ss.

How come the call to accel_reset_cpu works?

Ciao,

Claudio


diff --git a/accel/accel-common.c b/accel/accel-common.c
index cf07f78421..3331a9dcfd 100644
--- a/accel/accel-common.c
+++ b/accel/accel-common.c
@@ -121,6 +121,15 @@ bool accel_cpu_realizefn(CPUState *cpu, Error **errp)
     return true;
 }
 
+void accel_cpu_reset(CPUState *cpu)
+{
+    CPUClass *cc = CPU_GET_CLASS(cpu);
+
+    if (cc->accel_cpu && cc->accel_cpu->cpu_reset) {
+        cc->accel_cpu->cpu_reset(cpu);
+    }
+}
+
 static const TypeInfo accel_cpu_type = {
     .name = TYPE_ACCEL_CPU,
     .parent = TYPE_OBJECT,
diff --git a/hw/core/cpu.c b/hw/core/cpu.c
index 00330ba07d..590a0d934f 100644
--- a/hw/core/cpu.c
+++ b/hw/core/cpu.c
@@ -35,6 +35,7 @@
 #include "trace/trace-root.h"
 #include "qemu/plugin.h"
 #include "sysemu/hw_accel.h"
+#include "qemu/accel.h"
 
 CPUState *cpu_by_arch_id(int64_t id)
 {
@@ -230,7 +231,7 @@ void cpu_dump_statistics(CPUState *cpu, int flags)
 void cpu_reset(CPUState *cpu)
 {
     device_cold_reset(DEVICE(cpu));
-
+    accel_cpu_reset(cpu);
     trace_guest_cpu_reset(cpu);
 }
 
diff --git a/include/hw/core/accel-cpu.h b/include/hw/core/accel-cpu.h
index 5dbfd79955..700a5bd266 100644
--- a/include/hw/core/accel-cpu.h
+++ b/include/hw/core/accel-cpu.h
@@ -33,6 +33,8 @@ typedef struct AccelCPUClass {
     void (*cpu_class_init)(CPUClass *cc);
     void (*cpu_instance_init)(CPUState *cpu);
     bool (*cpu_realizefn)(CPUState *cpu, Error **errp);
+    void (*cpu_reset)(CPUState *cpu);
+
 } AccelCPUClass;
 
 #endif /* ACCEL_CPU_H */
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index 4f4c283f6f..8d3a15b916 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -91,4 +91,10 @@ void accel_cpu_instance_init(CPUState *cpu);
  */
 bool accel_cpu_realizefn(CPUState *cpu, Error **errp);
 
+/**
+ * accel_cpu_reset:
+ * @cpu: The CPU that needs to call accel-specific reset.
+ */
+void accel_cpu_reset(CPUState *cpu);
+
 #endif /* QEMU_ACCEL_H */
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 48a08df438..ad233b823d 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -5780,10 +5780,6 @@ static void x86_cpu_reset(DeviceState *dev)
     apic_designate_bsp(cpu->apic_state, s->cpu_index == 0);
 
     s->halted = !cpu_is_bsp(cpu);
-
-    if (kvm_enabled()) {
-        kvm_arch_reset_vcpu(cpu);
-    }
 #endif
 }
 
diff --git a/target/i386/kvm/kvm-cpu.c b/target/i386/kvm/kvm-cpu.c
index c660ad4293..ffdc9afddb 100644
--- a/target/i386/kvm/kvm-cpu.c
+++ b/target/i386/kvm/kvm-cpu.c
@@ -130,12 +130,18 @@ static void kvm_cpu_instance_init(CPUState *cs)
     }
 }
 
+static void kvm_cpu_reset(CPUState *cpu)
+{
+    kvm_arch_reset_vcpu(X86_CPU(cpu));
+}
+
 static void kvm_cpu_accel_class_init(ObjectClass *oc, void *data)
 {
     AccelCPUClass *acc = ACCEL_CPU_CLASS(oc);
 
     acc->cpu_realizefn = kvm_cpu_realizefn;
     acc->cpu_instance_init = kvm_cpu_instance_init;
+    acc->cpu_reset = kvm_cpu_reset;
 }
 static const TypeInfo kvm_cpu_accel_type_info = {
     .name = ACCEL_CPU_NAME("kvm"),
-- 
2.26.2



  reply	other threads:[~2021-03-22 13:29 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-22 13:27 [PATCH v28 00/23] i386 cleanup PART 2 Claudio Fontana
2021-03-22 13:27 ` Claudio Fontana [this message]
2021-03-22 13:31   ` [RFC] accel: add cpu_reset Paolo Bonzini
2021-03-22 13:35     ` Claudio Fontana
2021-03-22 13:45       ` Paolo Bonzini
2021-03-22 13:51         ` Claudio Fontana
2021-03-23  7:55           ` Paolo Bonzini
2021-03-22 13:42   ` Philippe Mathieu-Daudé
2021-03-22 13:54     ` Claudio Fontana
2021-03-23  8:43       ` Philippe Mathieu-Daudé
2021-03-22 13:27 ` [PATCH v28 01/23] target/i386: Rename helper_fldt, helper_fstt Claudio Fontana
2021-03-22 15:58   ` Alex Bennée
2021-03-22 13:27 ` [PATCH v28 02/23] target/i386: Split out do_fsave, do_frstor, do_fxsave, do_fxrstor Claudio Fontana
2021-03-22 16:14   ` Alex Bennée
2021-03-22 13:27 ` [PATCH v28 03/23] i386: split cpu accelerators from cpu.c, using AccelCPUClass Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 04/23] cpu: call AccelCPUClass::cpu_realizefn in cpu_exec_realizefn Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 05/23] accel: introduce new accessor functions Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 06/23] target/i386: fix host_cpu_adjust_phys_bits error handling Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 07/23] accel-cpu: make cpu_realizefn return a bool Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 08/23] meson: add target_user_arch Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 09/23] i386: split off sysemu-only functionality in tcg-cpu Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 10/23] i386: split smm helper (sysemu) Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 11/23] i386: split tcg excp_helper into sysemu and user parts Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 12/23] i386: move TCG bpt_helper into sysemu/ Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 13/23] i386: split misc helper user stubs and sysemu part Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 14/23] i386: separate fpu_helper sysemu-only parts Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 15/23] i386: split svm_helper into sysemu and stub-only user Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 16/23] i386: split seg_helper into user-only and sysemu parts Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 17/23] i386: split off sysemu part of cpu.c Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 18/23] target/i386: gdbstub: introduce aux functions to read/write CS64 regs Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 19/23] target/i386: gdbstub: only write CR0/CR2/CR3/EFER for sysemu Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 20/23] i386: make cpu_load_efer sysemu-only Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 21/23] accel: move call to accel_init_interfaces Claudio Fontana
2021-03-22 13:27 ` [PATCH v28 22/23] accel: add init_accel_cpu for adapting accel behavior to CPU type Claudio Fontana
2021-03-22 13:28 ` [RFC v28 23/23] XXX RFC accel: add cpu_reset Claudio Fontana
2021-03-22 16:41 ` [PATCH v28 00/23] i386 cleanup PART 2 Paolo Bonzini
2021-04-08 13:38   ` Philippe Mathieu-Daudé
  -- strict thread matches above, loose matches on Subject: below --
2021-03-19 12:32 [RFC] accel: add cpu_reset Claudio Fontana

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210322132800.7470-2-cfontana@suse.de \
    --to=cfontana@suse.de \
    --cc=alex.bennee@linaro.org \
    --cc=ehabkost@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=r.bolshakov@yadro.com \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.