On Thu, Apr 24, 2025 at 01:51:55PM +0800, Xiaoyao Li wrote:
> Date: Thu, 24 Apr 2025 13:51:55 +0800
> From: Xiaoyao Li <xiaoyao...@intel.com>
> Subject: Re: [PATCH v8 31/55] i386/cpu: introduce
>  x86_confidential_guest_cpu_instance_init()
> 
> Hi Paolo,
> 
> On 4/1/2025 9:01 PM, Xiaoyao Li wrote:
> ...
> > diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> > index add6430f7edd..5c69d1489365 100644
> > --- a/target/i386/cpu.c
> > +++ b/target/i386/cpu.c
> > @@ -36,6 +36,7 @@
> >   #include "hw/qdev-properties.h"
> >   #include "hw/i386/topology.h"
> >   #ifndef CONFIG_USER_ONLY
> > +#include "confidential-guest.h"
> >   #include "system/reset.h"
> >   #include "qapi/qapi-commands-machine-target.h"
> >   #include "exec/address-spaces.h"
> > @@ -8504,6 +8505,15 @@ static void x86_cpu_post_initfn(Object *obj)
> >       }
> >       accel_cpu_instance_init(CPU(obj));
> > +
> > +#ifndef CONFIG_USER_ONLY
> > +    MachineState *ms = MACHINE(object_dynamic_cast(qdev_get_machine(),
> > +                                                   TYPE_MACHINE));
> 
> It leads to
> 
>   qemu-system-x86_64: ../hw/core/qdev.c:824: qdev_get_machine: Assertion
> `dev' failed.
>   Aborted (core dumped)
> 
> for the case of "-cpu help" due to the assert(dev) in qdev_get_machine().
> 
> How do you want to resolve it? I can think of two:
> 1. remove the assert() in qdev_get_machine(). or
> 2. drop the callback introduce by this patch. Instead just do
> 
>    if (is_tdx_vm()) {
>       tdx_cpu_instance_init();
>    }

Sorry I missed this mail when review this patch.

What about checking `current_machine`?

@@ -8541,10 +8541,8 @@ static void x86_cpu_post_initfn(Object *obj)
     accel_cpu_instance_init(CPU(obj));

 #ifndef CONFIG_USER_ONLY
-    MachineState *ms = MACHINE(object_dynamic_cast(qdev_get_machine(),
-                                                   TYPE_MACHINE));
-    if (ms && ms->cgs) {
-        
x86_confidential_guest_cpu_instance_init(X86_CONFIDENTIAL_GUEST(ms->cgs),
+    if (current_machine && current_machine->cgs) {
+        
x86_confidential_guest_cpu_instance_init(X86_CONFIDENTIAL_GUEST(current_machine->cgs),
                                                  (CPU(obj)));
     }
 #endif
---

"-cpu help" is processed before machine creation. The cpu-core
(cpu_core_instance_init) also checks current_machine to avoid similar
issue.

Regards,
Zhao



Reply via email to