Skip to content
  • Greg Kurz's avatar
    f1023d21
    spapr: Unrealize vCPUs with qdev_unrealize() · f1023d21
    Greg Kurz authored
    
    
    Since we introduced CPU hot-unplug in sPAPR, we don't unrealize the
    vCPU objects explicitly. Instead, we let QOM handle that for us under
    object_property_del_all() when the CPU core object is finalized. The
    only thing we do is calling cpu_remove_sync() to tear the vCPU thread
    down.
    
    This happens to work but it is ugly because:
    - we call qdev_realize() but the corresponding qdev_unrealize() is
      buried deep in the QOM code
    - we call cpu_remove_sync() to undo qemu_init_vcpu() called by
      ppc_cpu_realize() in target/ppc/translate_init.c.inc
    - the CPU init and teardown paths aren't really symmetrical
    
    The latter didn't bite us so far but a future patch that greatly
    simplifies the CPU core realize path needs it to avoid a crash
    in QOM.
    
    For all these reasons, have ppc_cpu_unrealize() to undo the changes
    of ppc_cpu_realize() by calling cpu_remove_sync() at the right place,
    and have the sPAPR CPU core code to call qdev_unrealize().
    
    This requires to add a missing stub because translate_init.c.inc is
    also compiled for user mode.
    
    Signed-off-by: default avatarGreg Kurz <groug@kaod.org>
    Message-Id: <160279671236.1808373.14732005038172874990.stgit@bahia.lan>
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    f1023d21
    spapr: Unrealize vCPUs with qdev_unrealize()
    Greg Kurz authored
    
    
    Since we introduced CPU hot-unplug in sPAPR, we don't unrealize the
    vCPU objects explicitly. Instead, we let QOM handle that for us under
    object_property_del_all() when the CPU core object is finalized. The
    only thing we do is calling cpu_remove_sync() to tear the vCPU thread
    down.
    
    This happens to work but it is ugly because:
    - we call qdev_realize() but the corresponding qdev_unrealize() is
      buried deep in the QOM code
    - we call cpu_remove_sync() to undo qemu_init_vcpu() called by
      ppc_cpu_realize() in target/ppc/translate_init.c.inc
    - the CPU init and teardown paths aren't really symmetrical
    
    The latter didn't bite us so far but a future patch that greatly
    simplifies the CPU core realize path needs it to avoid a crash
    in QOM.
    
    For all these reasons, have ppc_cpu_unrealize() to undo the changes
    of ppc_cpu_realize() by calling cpu_remove_sync() at the right place,
    and have the sPAPR CPU core code to call qdev_unrealize().
    
    This requires to add a missing stub because translate_init.c.inc is
    also compiled for user mode.
    
    Signed-off-by: default avatarGreg Kurz <groug@kaod.org>
    Message-Id: <160279671236.1808373.14732005038172874990.stgit@bahia.lan>
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Loading