qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6 07/18] cpu: Rename CPUClass vmsd -> legacy_vmsd


From: Richard Henderson
Subject: Re: [PATCH v6 07/18] cpu: Rename CPUClass vmsd -> legacy_vmsd
Date: Thu, 22 Apr 2021 18:11:58 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1

On 4/22/21 12:38 PM, Philippe Mathieu-Daudé wrote:
Quoting Peter Maydell [*]:

   There are two ways to handle migration for
   a CPU object:

   (1) like any other device, so it has a dc->vmsd that covers
   migration for the whole object. As usual for objects that are a
   subclass of a parent that has state, the first entry in the
   VMStateDescription field list is VMSTATE_CPU(), which migrates
   the cpu_common fields, followed by whatever the CPU's own migration
   fields are.

   (2) a backwards-compatible mechanism for CPUs that were
   originally migrated using manual "write fields to the migration
   stream structures". The on-the-wire migration format
   for those is based on the 'env' pointer (which isn't a QOM object),
   and the cpu_common part of the migration data is elsewhere.

   cpu_exec_realizefn() handles both possibilities:

   * for type 1, dc->vmsd is set and cc->vmsd is not,
     so cpu_exec_realizefn() does nothing, and the standard
     "register dc->vmsd for a device" code does everything needed

   * for type 2, dc->vmsd is NULL and so we register the
     vmstate_cpu_common directly to handle the cpu-common fields,
     and the cc->vmsd to handle the per-CPU stuff

   You can't change a CPU from one type to the other without breaking
   migration compatibility, which is why some guest architectures
   are stuck on the cc->vmsd form. New targets should use dc->vmsd.

To avoid new targets to start using type (2), rename cc->vmsd as
cc->legacy_vmsd. The correct field to implement is dc->vmsd (the
DeviceClass one).

See also commit b170fce3dd0 ("cpu: Register VMStateDescription
through CPUState") for historic background.

[*]https://www.mail-archive.com/qemu-devel@nongnu.org/msg800849.html

Cc: Peter Maydell<peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé<f4bug@amsat.org>
---
  include/hw/core/cpu.h           |  5 +++--
  cpu.c                           | 12 ++++++------
  target/arm/cpu.c                |  2 +-
  target/avr/cpu.c                |  2 +-
  target/i386/cpu.c               |  2 +-
  target/lm32/cpu.c               |  2 +-
  target/mips/cpu.c               |  2 +-
  target/moxie/cpu.c              |  2 +-
  target/riscv/cpu.c              |  2 +-
  target/s390x/cpu.c              |  2 +-
  target/sparc/cpu.c              |  2 +-
  target/ppc/translate_init.c.inc |  2 +-
  12 files changed, 19 insertions(+), 18 deletions(-)

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

r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]