diff mbox series

[RFC,RESEND,04/42] accel/split: Implement accel_init_machine()

Message ID 20250620172751.94231-5-philmd@linaro.org
State New
Headers show
Series accel/split/arm: Run EL2 using TCG and EL1/EL0 in hardware with HVF | expand

Commit Message

Philippe Mathieu-Daudé June 20, 2025, 5:27 p.m. UTC
Force to TCG + HVF for now.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 accel/split/split-accel.h |  3 +++
 accel/split/split-all.c   | 30 +++++++++++++++++++++++++++++-
 2 files changed, 32 insertions(+), 1 deletion(-)

Comments

Richard Henderson June 22, 2025, 2:22 a.m. UTC | #1
On 6/20/25 10:27, Philippe Mathieu-Daudé wrote:
> Force to TCG + HVF for now.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   accel/split/split-accel.h |  3 +++
>   accel/split/split-all.c   | 30 +++++++++++++++++++++++++++++-
>   2 files changed, 32 insertions(+), 1 deletion(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~
Richard Henderson June 22, 2025, 2:23 a.m. UTC | #2
On 6/20/25 10:27, Philippe Mathieu-Daudé wrote:
> +static void split_accel_instance_init(Object *obj)
> +{
> +    SplitAccelState *sas = SPLIT_ACCEL(obj);
> +
> +    sas->sw_name = g_strdup("tcg");
> +    sas->hw_name = g_strdup("hvf");

There's no real need to strdup.


r~
diff mbox series

Patch

diff --git a/accel/split/split-accel.h b/accel/split/split-accel.h
index cc825a92a6d..19fb530f207 100644
--- a/accel/split/split-accel.h
+++ b/accel/split/split-accel.h
@@ -33,6 +33,9 @@  struct SplitAccelState {
 
     AccelState *hw;
     AccelState *sw;
+
+    char *hw_name;
+    char *sw_name;
 };
 
 #endif /* SPLIT_ACCEL_H */
diff --git a/accel/split/split-all.c b/accel/split/split-all.c
index c86d0e8583a..7cbe32ea768 100644
--- a/accel/split/split-all.c
+++ b/accel/split/split-all.c
@@ -8,13 +8,32 @@ 
 
 #include "qemu/osdep.h"
 #include "qemu/accel.h"
+#include "hw/boards.h"
+#include "accel/accel-internal.h"
 #include "split-accel.h"
 
 bool split_allowed;
 
 static int split_accel_init_machine(MachineState *ms, AccelState *as)
 {
-    g_assert_not_reached();
+    SplitAccelState *sas = SPLIT_ACCEL(as);
+    AccelClass *hwc;
+    AccelClass *swc;
+
+    swc = accel_find(sas->sw_name);
+    accel_init_ops_interfaces(swc);
+    hwc = accel_find(sas->hw_name);
+    accel_init_ops_interfaces(hwc);
+
+    sas->sw = ACCEL(object_new_with_class(OBJECT_CLASS(swc)));
+    sas->hw = ACCEL(object_new_with_class(OBJECT_CLASS(hwc)));
+
+    accel_init_machine(sas->sw, ms);
+    accel_init_machine(sas->hw, ms);
+
+    ms->accelerator = as;
+
+    return 0;
 }
 
 static void split_setup_post(MachineState *ms, AccelState *accel)
@@ -59,6 +78,14 @@  static void split_get_stats(AccelState *as, GString *buf)
     g_assert_not_reached();
 }
 
+static void split_accel_instance_init(Object *obj)
+{
+    SplitAccelState *sas = SPLIT_ACCEL(obj);
+
+    sas->sw_name = g_strdup("tcg");
+    sas->hw_name = g_strdup("hvf");
+}
+
 static void split_accel_class_init(ObjectClass *oc, const void *data)
 {
     AccelClass *ac = ACCEL_CLASS(oc);
@@ -79,6 +106,7 @@  static const TypeInfo split_accel_type = {
     .name = TYPE_SPLIT_ACCEL,
     .parent = TYPE_ACCEL,
     .instance_size = sizeof(SplitAccelState),
+    .instance_init  = split_accel_instance_init,
     .class_size = sizeof(SplitAccelClass),
     .class_init = split_accel_class_init,
 };