Message ID | 20221013171926.1447899-1-peter.maydell@linaro.org |
---|---|
State | Accepted |
Headers | show |
Series | hw/i386: Use device_cold_reset() to reset the APIC | expand |
On Thu, Oct 13, 2022 at 06:19:26PM +0100, Peter Maydell wrote: > The semantic difference between the deprecated device_legacy_reset() > function and the newer device_cold_reset() function is that the new > function resets both the device itself and any qbuses it owns, > whereas the legacy function resets just the device itself and nothing > else. > > The pc_machine_reset() and microvm_machine_reset() functions use > device_legacy_reset() to reset the APIC; this is an APICCommonState > and does not have any qbuses, so for this purpose the two functions > behave identically and we can stop using the deprecated one. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Acked-by: Michael S. Tsirkin <mst@redhat.com> > --- > NB: tested only with 'make check' and 'make check-avocado' > > hw/i386/microvm.c | 2 +- > hw/i386/pc.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c > index 7fe8cce03e9..0b08010bf0a 100644 > --- a/hw/i386/microvm.c > +++ b/hw/i386/microvm.c > @@ -486,7 +486,7 @@ static void microvm_machine_reset(MachineState *machine) > cpu = X86_CPU(cs); > > if (cpu->apic_state) { > - device_legacy_reset(cpu->apic_state); > + device_cold_reset(cpu->apic_state); > } > } > } > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index 566accf7e60..2b2d0bc2b33 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -1860,7 +1860,7 @@ static void pc_machine_reset(MachineState *machine) > cpu = X86_CPU(cs); > > if (cpu->apic_state) { > - device_legacy_reset(cpu->apic_state); > + device_cold_reset(cpu->apic_state); > } > } > } > -- > 2.25.1
This conflicts with "hyperv: fix SynIC SINT assertion failure on guest reset", but the resolution is simply to do the change in a new function x86_cpu_after_reset(); adjusted and queued, thanks. Paolo
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 7fe8cce03e9..0b08010bf0a 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -486,7 +486,7 @@ static void microvm_machine_reset(MachineState *machine) cpu = X86_CPU(cs); if (cpu->apic_state) { - device_legacy_reset(cpu->apic_state); + device_cold_reset(cpu->apic_state); } } } diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 566accf7e60..2b2d0bc2b33 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1860,7 +1860,7 @@ static void pc_machine_reset(MachineState *machine) cpu = X86_CPU(cs); if (cpu->apic_state) { - device_legacy_reset(cpu->apic_state); + device_cold_reset(cpu->apic_state); } } }
The semantic difference between the deprecated device_legacy_reset() function and the newer device_cold_reset() function is that the new function resets both the device itself and any qbuses it owns, whereas the legacy function resets just the device itself and nothing else. The pc_machine_reset() and microvm_machine_reset() functions use device_legacy_reset() to reset the APIC; this is an APICCommonState and does not have any qbuses, so for this purpose the two functions behave identically and we can stop using the deprecated one. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- NB: tested only with 'make check' and 'make check-avocado' hw/i386/microvm.c | 2 +- hw/i386/pc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)