Message ID | 0868535e8cc04534e2f2f95fbaca50afa18d0a0a.1613436967.git.isaku.yamahata@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ACPI related fixes to comform the spec better | expand |
On Mon, 15 Feb 2021 17:04:08 -0800 isaku.yamahata@gmail.com wrote: > From: Isaku Yamahata <isaku.yamahata@intel.com> > > The following patch will introduce incompatible behavior of SMM. > Introduce a property to keep the old behavior for compatibility. > To enable smm compat, use "-global ICH9-LPC.smm-compat=on" or > "-global PIIX4.smm-compat=on" > > Suggested-by: Igor Mammedov <imammedo@redhat.com> > Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> looks good to me, but doesn't apply to master anymore, so needs to be rebased > --- > hw/acpi/piix4.c | 2 ++ > hw/core/machine.c | 5 ++++- > hw/isa/lpc_ich9.c | 1 + > include/hw/acpi/ich9.h | 1 + > 4 files changed, 8 insertions(+), 1 deletion(-) > > diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c > index 669be5bbf6..30dd9b2309 100644 > --- a/hw/acpi/piix4.c > +++ b/hw/acpi/piix4.c > @@ -74,6 +74,7 @@ struct PIIX4PMState { > qemu_irq irq; > qemu_irq smi_irq; > int smm_enabled; > + bool smm_compat; > Notifier machine_ready; > Notifier powerdown_notifier; > > @@ -642,6 +643,7 @@ static Property piix4_pm_properties[] = { > use_acpi_root_pci_hotplug, true), > DEFINE_PROP_BOOL("memory-hotplug-support", PIIX4PMState, > acpi_memory_hotplug.is_enabled, true), > + DEFINE_PROP_BOOL("smm-compat", PIIX4PMState, smm_compat, false), > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/hw/core/machine.c b/hw/core/machine.c > index de3b8f1b31..870c9201df 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -33,7 +33,10 @@ > #include "migration/global_state.h" > #include "migration/vmstate.h" > > -GlobalProperty hw_compat_5_2[] = {}; > +GlobalProperty hw_compat_5_2[] = { > + { "ICH9-LPC", "smm-compat", "on"}, > + { "PIIX4_PM", "smm-compat", "on"}, > +}; I'd put this hunk into the 4/10, where behavior changes and add a note to commit this message that property will be used by the next patch > const size_t hw_compat_5_2_len = G_N_ELEMENTS(hw_compat_5_2); > > GlobalProperty hw_compat_5_1[] = { > diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c > index d3145bf014..3963b73520 100644 > --- a/hw/isa/lpc_ich9.c > +++ b/hw/isa/lpc_ich9.c > @@ -775,6 +775,7 @@ static const VMStateDescription vmstate_ich9_lpc = { > > static Property ich9_lpc_properties[] = { > DEFINE_PROP_BOOL("noreboot", ICH9LPCState, pin_strap.spkr_hi, true), > + DEFINE_PROP_BOOL("smm-compat", ICH9LPCState, pm.smm_compat, false), > DEFINE_PROP_BIT64("x-smi-broadcast", ICH9LPCState, smi_host_features, > ICH9_LPC_SMI_F_BROADCAST_BIT, true), > DEFINE_PROP_BIT64("x-smi-cpu-hotplug", ICH9LPCState, smi_host_features, > diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h > index 54571c77e0..df519e40b5 100644 > --- a/include/hw/acpi/ich9.h > +++ b/include/hw/acpi/ich9.h > @@ -59,6 +59,7 @@ typedef struct ICH9LPCPMRegs { > uint8_t disable_s4; > uint8_t s4_val; > uint8_t smm_enabled; > + bool smm_compat; > bool enable_tco; > TCOIORegs tco_regs; > } ICH9LPCPMRegs;
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 669be5bbf6..30dd9b2309 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -74,6 +74,7 @@ struct PIIX4PMState { qemu_irq irq; qemu_irq smi_irq; int smm_enabled; + bool smm_compat; Notifier machine_ready; Notifier powerdown_notifier; @@ -642,6 +643,7 @@ static Property piix4_pm_properties[] = { use_acpi_root_pci_hotplug, true), DEFINE_PROP_BOOL("memory-hotplug-support", PIIX4PMState, acpi_memory_hotplug.is_enabled, true), + DEFINE_PROP_BOOL("smm-compat", PIIX4PMState, smm_compat, false), DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/core/machine.c b/hw/core/machine.c index de3b8f1b31..870c9201df 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -33,7 +33,10 @@ #include "migration/global_state.h" #include "migration/vmstate.h" -GlobalProperty hw_compat_5_2[] = {}; +GlobalProperty hw_compat_5_2[] = { + { "ICH9-LPC", "smm-compat", "on"}, + { "PIIX4_PM", "smm-compat", "on"}, +}; const size_t hw_compat_5_2_len = G_N_ELEMENTS(hw_compat_5_2); GlobalProperty hw_compat_5_1[] = { diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c index d3145bf014..3963b73520 100644 --- a/hw/isa/lpc_ich9.c +++ b/hw/isa/lpc_ich9.c @@ -775,6 +775,7 @@ static const VMStateDescription vmstate_ich9_lpc = { static Property ich9_lpc_properties[] = { DEFINE_PROP_BOOL("noreboot", ICH9LPCState, pin_strap.spkr_hi, true), + DEFINE_PROP_BOOL("smm-compat", ICH9LPCState, pm.smm_compat, false), DEFINE_PROP_BIT64("x-smi-broadcast", ICH9LPCState, smi_host_features, ICH9_LPC_SMI_F_BROADCAST_BIT, true), DEFINE_PROP_BIT64("x-smi-cpu-hotplug", ICH9LPCState, smi_host_features, diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h index 54571c77e0..df519e40b5 100644 --- a/include/hw/acpi/ich9.h +++ b/include/hw/acpi/ich9.h @@ -59,6 +59,7 @@ typedef struct ICH9LPCPMRegs { uint8_t disable_s4; uint8_t s4_val; uint8_t smm_enabled; + bool smm_compat; bool enable_tco; TCOIORegs tco_regs; } ICH9LPCPMRegs;