Skip to content
  • Greg Kurz's avatar
    0b47ec4b
    cpu/core: Fix "help" of CPU core device types · 0b47ec4b
    Greg Kurz authored
    
    
    Calling qdev_get_machine() from a QOM instance_init function is
    fragile because we can't be sure the machine object actually
    exists. And this happens to break when passing ",help" on the
    command line to get the list of properties for a CPU core
    device types :
    
    $ ./qemu-system-ppc64 -device power8_v2.0-spapr-cpu-core,help
    qemu-system-ppc64: ../../hw/core/machine.c:1290:
     qdev_get_machine: Assertion `machine != NULL' failed.
    Aborted (core dumped)
    
    This used to work before QEMU 5.0, but commit 3df261b6
    unwillingly introduced a subtle regression : the above command
    line needs to create an instance but the instance_init function
    of the base class calls qdev_get_machine() before
    qemu_create_machine() has been called, which is a programming bug.
    
    Use current_machine instead. It is okay to skip the setting of
    nr_thread in this case since only its type is displayed.
    
    Fixes: 3df261b6 ("softmmu/vl.c: Handle '-cpu help' and '-device help' before 'no default machine'")
    Reported-by: default avatarThomas Huth <thuth@redhat.com>
    Signed-off-by: default avatarGreg Kurz <groug@kaod.org>
    Cc: peter.maydell@linaro.org
    Message-Id: <20210409160339.500167-3-groug@kaod.org>
    Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
    0b47ec4b
    cpu/core: Fix "help" of CPU core device types
    Greg Kurz authored
    
    
    Calling qdev_get_machine() from a QOM instance_init function is
    fragile because we can't be sure the machine object actually
    exists. And this happens to break when passing ",help" on the
    command line to get the list of properties for a CPU core
    device types :
    
    $ ./qemu-system-ppc64 -device power8_v2.0-spapr-cpu-core,help
    qemu-system-ppc64: ../../hw/core/machine.c:1290:
     qdev_get_machine: Assertion `machine != NULL' failed.
    Aborted (core dumped)
    
    This used to work before QEMU 5.0, but commit 3df261b6
    unwillingly introduced a subtle regression : the above command
    line needs to create an instance but the instance_init function
    of the base class calls qdev_get_machine() before
    qemu_create_machine() has been called, which is a programming bug.
    
    Use current_machine instead. It is okay to skip the setting of
    nr_thread in this case since only its type is displayed.
    
    Fixes: 3df261b6 ("softmmu/vl.c: Handle '-cpu help' and '-device help' before 'no default machine'")
    Reported-by: default avatarThomas Huth <thuth@redhat.com>
    Signed-off-by: default avatarGreg Kurz <groug@kaod.org>
    Cc: peter.maydell@linaro.org
    Message-Id: <20210409160339.500167-3-groug@kaod.org>
    Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
Loading