diff mbox series

[v6,14/20] x86: move acpi_dev from pc/microvm

Message ID 20200826105254.28496-15-kraxel@redhat.com
State New
Headers show
Series microvm: add acpi support | expand

Commit Message

Gerd Hoffmann Aug. 26, 2020, 10:52 a.m. UTC
Both pc and microvm machine types have a acpi_dev field.
Move it to the common base type.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/i386/microvm.h |  1 -
 include/hw/i386/pc.h      |  1 -
 include/hw/i386/x86.h     |  1 +
 hw/i386/acpi-build.c      |  2 +-
 hw/i386/acpi-microvm.c    |  5 +++--
 hw/i386/microvm.c         | 10 ++++++----
 hw/i386/pc.c              | 34 +++++++++++++++++++---------------
 hw/i386/pc_piix.c         |  2 +-
 hw/i386/pc_q35.c          |  2 +-
 9 files changed, 32 insertions(+), 26 deletions(-)

Comments

Sergio Lopez Pascual Aug. 27, 2020, 2:51 p.m. UTC | #1
On Wed, Aug 26, 2020 at 12:52:48PM +0200, Gerd Hoffmann wrote:
> Both pc and microvm machine types have a acpi_dev field.
> Move it to the common base type.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/hw/i386/microvm.h |  1 -
>  include/hw/i386/pc.h      |  1 -
>  include/hw/i386/x86.h     |  1 +
>  hw/i386/acpi-build.c      |  2 +-
>  hw/i386/acpi-microvm.c    |  5 +++--
>  hw/i386/microvm.c         | 10 ++++++----
>  hw/i386/pc.c              | 34 +++++++++++++++++++---------------
>  hw/i386/pc_piix.c         |  2 +-
>  hw/i386/pc_q35.c          |  2 +-
>  9 files changed, 32 insertions(+), 26 deletions(-)

Reviewed-by: Sergio Lopez <slp@redhat.com>


> diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
> index b6e0d4395af7..b8ec99aeb051 100644
> --- a/include/hw/i386/microvm.h
> +++ b/include/hw/i386/microvm.h
> @@ -66,7 +66,6 @@ typedef struct {
>      bool kernel_cmdline_fixed;
>      Notifier machine_done;
>      Notifier powerdown_req;
> -    AcpiDeviceIf *acpi_dev;
>  } MicrovmMachineState;
>  
>  #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index fe52e165b27c..0f7da2329b0f 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -29,7 +29,6 @@ struct PCMachineState {
>      Notifier machine_done;
>  
>      /* Pointers to devices and objects: */
> -    HotplugHandler *acpi_dev;
>      PCIBus *bus;
>      I2CBus *smbus;
>      PFlashCFI01 *flash[2];
> diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
> index a350ea3609f5..de74c831c3ab 100644
> --- a/include/hw/i386/x86.h
> +++ b/include/hw/i386/x86.h
> @@ -50,6 +50,7 @@ typedef struct {
>      FWCfgState *fw_cfg;
>      qemu_irq *gsi;
>      GMappedFile *initrd_mapped_file;
> +    HotplugHandler *acpi_dev;
>  
>      /* RAM information (sizes, addresses, configuration): */
>      ram_addr_t below_4g_mem_size, above_4g_mem_size;
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index b7bcbbbb2a35..c356cc71fe08 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -2431,7 +2431,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
>  
>      acpi_add_table(table_offsets, tables_blob);
>      acpi_build_madt(tables_blob, tables->linker, x86ms,
> -                    ACPI_DEVICE_IF(pcms->acpi_dev), true);
> +                    ACPI_DEVICE_IF(x86ms->acpi_dev), true);
>  
>      vmgenid_dev = find_vmgenid_dev();
>      if (vmgenid_dev) {
> diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
> index b9ce3768b263..df39c5d3bd90 100644
> --- a/hw/i386/acpi-microvm.c
> +++ b/hw/i386/acpi-microvm.c
> @@ -108,7 +108,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
>      sb_scope = aml_scope("_SB");
>      fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
>      isa_build_aml(ISA_BUS(isabus), sb_scope);
> -    build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
> +    build_ged_aml(sb_scope, GED_DEVICE, x86ms->acpi_dev,
>                    GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
>      acpi_dsdt_add_power_button(sb_scope);
>      acpi_dsdt_add_virtio(sb_scope, mms);
> @@ -136,6 +136,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables,
>                                 MicrovmMachineState *mms)
>  {
>      MachineState *machine = MACHINE(mms);
> +    X86MachineState *x86ms = X86_MACHINE(mms);
>      GArray *table_offsets;
>      GArray *tables_blob = tables->table_data;
>      unsigned dsdt, xsdt;
> @@ -183,7 +184,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables,
>  
>      acpi_add_table(table_offsets, tables_blob);
>      acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine),
> -                    mms->acpi_dev, false);
> +                    ACPI_DEVICE_IF(x86ms->acpi_dev), false);
>  
>      xsdt = tables_blob->len;
>      build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 04209eb38fbe..9df15354ce0f 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -143,7 +143,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
>          sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
>                             x86ms->gsi[GED_MMIO_IRQ]);
>          sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
> -        mms->acpi_dev = ACPI_DEVICE_IF(dev);
> +        x86ms->acpi_dev = HOTPLUG_HANDLER(dev);
>      }
>  
>      if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) {
> @@ -469,11 +469,13 @@ static void microvm_powerdown_req(Notifier *notifier, void *data)
>  {
>      MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState,
>                                              powerdown_req);
> +    X86MachineState *x86ms = X86_MACHINE(mms);
>  
> -    if (mms->acpi_dev) {
> -        Object *obj = OBJECT(mms->acpi_dev);
> +    if (x86ms->acpi_dev) {
> +        Object *obj = OBJECT(x86ms->acpi_dev);
>          AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj);
> -        adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS);
> +        adevc->send_event(ACPI_DEVICE_IF(x86ms->acpi_dev),
> +                          ACPI_POWER_DOWN_STATUS);
>      }
>  }
>  
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 5d8d5ef8b373..0bd6dbbd7bf6 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1274,6 +1274,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
>                                 Error **errp)
>  {
>      const PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    const X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
>      const MachineState *ms = MACHINE(hotplug_dev);
>      const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
> @@ -1285,7 +1286,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
>       * but pcms->acpi_dev is still created. Check !acpi_enabled in
>       * addition to cover this case.
>       */
> -    if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
> +    if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) {
>          error_setg(errp,
>                     "memory hotplug is not enabled: missing acpi device or acpi disabled");
>          return;
> @@ -1296,7 +1297,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
>          return;
>      }
>  
> -    hotplug_handler_pre_plug(pcms->acpi_dev, dev, &local_err);
> +    hotplug_handler_pre_plug(x86ms->acpi_dev, dev, &local_err);
>      if (local_err) {
>          error_propagate(errp, local_err);
>          return;
> @@ -1311,6 +1312,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev,
>  {
>      Error *local_err = NULL;
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      MachineState *ms = MACHINE(hotplug_dev);
>      bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
>  
> @@ -1323,7 +1325,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev,
>          nvdimm_plug(ms->nvdimms_state);
>      }
>  
> -    hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &error_abort);
> +    hotplug_handler_plug(x86ms->acpi_dev, dev, &error_abort);
>  out:
>      error_propagate(errp, local_err);
>  }
> @@ -1331,14 +1333,14 @@ out:
>  static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
>                                       DeviceState *dev, Error **errp)
>  {
> -    PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
>      /*
>       * When -no-acpi is used with Q35 machine type, no ACPI is built,
>       * but pcms->acpi_dev is still created. Check !acpi_enabled in
>       * addition to cover this case.
>       */
> -    if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
> +    if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) {
>          error_setg(errp,
>                     "memory hotplug is not enabled: missing acpi device or acpi disabled");
>          return;
> @@ -1349,7 +1351,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
>          return;
>      }
>  
> -    hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
> +    hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
>                                     errp);
>  }
>  
> @@ -1357,9 +1359,10 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev,
>                               DeviceState *dev, Error **errp)
>  {
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      Error *local_err = NULL;
>  
> -    hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
> +    hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err);
>      if (local_err) {
>          goto out;
>      }
> @@ -1403,10 +1406,10 @@ static void pc_cpu_plug(HotplugHandler *hotplug_dev,
>      Error *local_err = NULL;
>      X86CPU *cpu = X86_CPU(dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> -    X86MachineState *x86ms = X86_MACHINE(pcms);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
> -    if (pcms->acpi_dev) {
> -        hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
> +    if (x86ms->acpi_dev) {
> +        hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err);
>          if (local_err) {
>              goto out;
>          }
> @@ -1432,8 +1435,9 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
>      int idx = -1;
>      X86CPU *cpu = X86_CPU(dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
> -    if (!pcms->acpi_dev) {
> +    if (!x86ms->acpi_dev) {
>          error_setg(errp, "CPU hot unplug not supported without ACPI");
>          return;
>      }
> @@ -1445,7 +1449,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
>          return;
>      }
>  
> -    hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
> +    hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
>                                     errp);
>  }
>  
> @@ -1456,9 +1460,9 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev,
>      Error *local_err = NULL;
>      X86CPU *cpu = X86_CPU(dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> -    X86MachineState *x86ms = X86_MACHINE(pcms);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
> -    hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
> +    hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err);
>      if (local_err) {
>          goto out;
>      }
> @@ -1487,7 +1491,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev,
>      CPUX86State *env = &cpu->env;
>      MachineState *ms = MACHINE(hotplug_dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> -    X86MachineState *x86ms = X86_MACHINE(pcms);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      unsigned int smp_cores = ms->smp.cores;
>      unsigned int smp_threads = ms->smp.threads;
>      X86CPUTopoInfo topo_info;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 32b1453e6a82..759b4a97facb 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -293,7 +293,7 @@ static void pc_init1(MachineState *machine,
>  
>          object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
>                                   TYPE_HOTPLUG_HANDLER,
> -                                 (Object **)&pcms->acpi_dev,
> +                                 (Object **)&x86ms->acpi_dev,
>                                   object_property_allow_set_link,
>                                   OBJ_PROP_LINK_STRONG);
>          object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 0cb9c18cd44d..622d0397172a 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -240,7 +240,7 @@ static void pc_q35_init(MachineState *machine)
>  
>      object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
>                               TYPE_HOTPLUG_HANDLER,
> -                             (Object **)&pcms->acpi_dev,
> +                             (Object **)&x86ms->acpi_dev,
>                               object_property_allow_set_link,
>                               OBJ_PROP_LINK_STRONG);
>      object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
> -- 
> 2.27.0
>
Igor Mammedov Aug. 31, 2020, 7:54 a.m. UTC | #2
On Wed, 26 Aug 2020 12:52:48 +0200
Gerd Hoffmann <kraxel@redhat.com> wrote:

> Both pc and microvm machine types have a acpi_dev field.
> Move it to the common base type.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/i386/microvm.h |  1 -
>  include/hw/i386/pc.h      |  1 -
>  include/hw/i386/x86.h     |  1 +
>  hw/i386/acpi-build.c      |  2 +-
>  hw/i386/acpi-microvm.c    |  5 +++--
>  hw/i386/microvm.c         | 10 ++++++----
>  hw/i386/pc.c              | 34 +++++++++++++++++++---------------
>  hw/i386/pc_piix.c         |  2 +-
>  hw/i386/pc_q35.c          |  2 +-
>  9 files changed, 32 insertions(+), 26 deletions(-)
> 
> diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
> index b6e0d4395af7..b8ec99aeb051 100644
> --- a/include/hw/i386/microvm.h
> +++ b/include/hw/i386/microvm.h
> @@ -66,7 +66,6 @@ typedef struct {
>      bool kernel_cmdline_fixed;
>      Notifier machine_done;
>      Notifier powerdown_req;
> -    AcpiDeviceIf *acpi_dev;
>  } MicrovmMachineState;
>  
>  #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index fe52e165b27c..0f7da2329b0f 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -29,7 +29,6 @@ struct PCMachineState {
>      Notifier machine_done;
>  
>      /* Pointers to devices and objects: */
> -    HotplugHandler *acpi_dev;
>      PCIBus *bus;
>      I2CBus *smbus;
>      PFlashCFI01 *flash[2];
> diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
> index a350ea3609f5..de74c831c3ab 100644
> --- a/include/hw/i386/x86.h
> +++ b/include/hw/i386/x86.h
> @@ -50,6 +50,7 @@ typedef struct {
>      FWCfgState *fw_cfg;
>      qemu_irq *gsi;
>      GMappedFile *initrd_mapped_file;
> +    HotplugHandler *acpi_dev;
>  
>      /* RAM information (sizes, addresses, configuration): */
>      ram_addr_t below_4g_mem_size, above_4g_mem_size;
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index b7bcbbbb2a35..c356cc71fe08 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -2431,7 +2431,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
>  
>      acpi_add_table(table_offsets, tables_blob);
>      acpi_build_madt(tables_blob, tables->linker, x86ms,
> -                    ACPI_DEVICE_IF(pcms->acpi_dev), true);
> +                    ACPI_DEVICE_IF(x86ms->acpi_dev), true);
>  
>      vmgenid_dev = find_vmgenid_dev();
>      if (vmgenid_dev) {
> diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
> index b9ce3768b263..df39c5d3bd90 100644
> --- a/hw/i386/acpi-microvm.c
> +++ b/hw/i386/acpi-microvm.c
> @@ -108,7 +108,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
>      sb_scope = aml_scope("_SB");
>      fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
>      isa_build_aml(ISA_BUS(isabus), sb_scope);
> -    build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
> +    build_ged_aml(sb_scope, GED_DEVICE, x86ms->acpi_dev,
>                    GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
>      acpi_dsdt_add_power_button(sb_scope);
>      acpi_dsdt_add_virtio(sb_scope, mms);
> @@ -136,6 +136,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables,
>                                 MicrovmMachineState *mms)
>  {
>      MachineState *machine = MACHINE(mms);
> +    X86MachineState *x86ms = X86_MACHINE(mms);
>      GArray *table_offsets;
>      GArray *tables_blob = tables->table_data;
>      unsigned dsdt, xsdt;
> @@ -183,7 +184,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables,
>  
>      acpi_add_table(table_offsets, tables_blob);
>      acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine),
> -                    mms->acpi_dev, false);
> +                    ACPI_DEVICE_IF(x86ms->acpi_dev), false);
>  
>      xsdt = tables_blob->len;
>      build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index 04209eb38fbe..9df15354ce0f 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -143,7 +143,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
>          sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
>                             x86ms->gsi[GED_MMIO_IRQ]);
>          sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
> -        mms->acpi_dev = ACPI_DEVICE_IF(dev);
> +        x86ms->acpi_dev = HOTPLUG_HANDLER(dev);
>      }
>  
>      if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) {
> @@ -469,11 +469,13 @@ static void microvm_powerdown_req(Notifier *notifier, void *data)
>  {
>      MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState,
>                                              powerdown_req);
> +    X86MachineState *x86ms = X86_MACHINE(mms);
>  
> -    if (mms->acpi_dev) {
> -        Object *obj = OBJECT(mms->acpi_dev);
> +    if (x86ms->acpi_dev) {
> +        Object *obj = OBJECT(x86ms->acpi_dev);
>          AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj);
> -        adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS);
> +        adevc->send_event(ACPI_DEVICE_IF(x86ms->acpi_dev),
> +                          ACPI_POWER_DOWN_STATUS);
>      }
>  }
>  
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 5d8d5ef8b373..0bd6dbbd7bf6 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1274,6 +1274,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
>                                 Error **errp)
>  {
>      const PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    const X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
>      const MachineState *ms = MACHINE(hotplug_dev);
>      const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
> @@ -1285,7 +1286,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
>       * but pcms->acpi_dev is still created. Check !acpi_enabled in
>       * addition to cover this case.
>       */
> -    if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
> +    if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) {
>          error_setg(errp,
>                     "memory hotplug is not enabled: missing acpi device or acpi disabled");
>          return;
> @@ -1296,7 +1297,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
>          return;
>      }
>  
> -    hotplug_handler_pre_plug(pcms->acpi_dev, dev, &local_err);
> +    hotplug_handler_pre_plug(x86ms->acpi_dev, dev, &local_err);
>      if (local_err) {
>          error_propagate(errp, local_err);
>          return;
> @@ -1311,6 +1312,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev,
>  {
>      Error *local_err = NULL;
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      MachineState *ms = MACHINE(hotplug_dev);
>      bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
>  
> @@ -1323,7 +1325,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev,
>          nvdimm_plug(ms->nvdimms_state);
>      }
>  
> -    hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &error_abort);
> +    hotplug_handler_plug(x86ms->acpi_dev, dev, &error_abort);
>  out:
>      error_propagate(errp, local_err);
>  }
> @@ -1331,14 +1333,14 @@ out:
>  static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
>                                       DeviceState *dev, Error **errp)
>  {
> -    PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
>      /*
>       * When -no-acpi is used with Q35 machine type, no ACPI is built,
>       * but pcms->acpi_dev is still created. Check !acpi_enabled in
>       * addition to cover this case.
>       */
> -    if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
> +    if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) {
>          error_setg(errp,
>                     "memory hotplug is not enabled: missing acpi device or acpi disabled");
>          return;
> @@ -1349,7 +1351,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
>          return;
>      }
>  
> -    hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
> +    hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
>                                     errp);
>  }
>  
> @@ -1357,9 +1359,10 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev,
>                               DeviceState *dev, Error **errp)
>  {
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      Error *local_err = NULL;
>  
> -    hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
> +    hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err);
>      if (local_err) {
>          goto out;
>      }
> @@ -1403,10 +1406,10 @@ static void pc_cpu_plug(HotplugHandler *hotplug_dev,
>      Error *local_err = NULL;
>      X86CPU *cpu = X86_CPU(dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> -    X86MachineState *x86ms = X86_MACHINE(pcms);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
> -    if (pcms->acpi_dev) {
> -        hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
> +    if (x86ms->acpi_dev) {
> +        hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err);
>          if (local_err) {
>              goto out;
>          }
> @@ -1432,8 +1435,9 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
>      int idx = -1;
>      X86CPU *cpu = X86_CPU(dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
> -    if (!pcms->acpi_dev) {
> +    if (!x86ms->acpi_dev) {
>          error_setg(errp, "CPU hot unplug not supported without ACPI");
>          return;
>      }
> @@ -1445,7 +1449,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
>          return;
>      }
>  
> -    hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
> +    hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
>                                     errp);
>  }
>  
> @@ -1456,9 +1460,9 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev,
>      Error *local_err = NULL;
>      X86CPU *cpu = X86_CPU(dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> -    X86MachineState *x86ms = X86_MACHINE(pcms);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>  
> -    hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
> +    hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err);
>      if (local_err) {
>          goto out;
>      }
> @@ -1487,7 +1491,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev,
>      CPUX86State *env = &cpu->env;
>      MachineState *ms = MACHINE(hotplug_dev);
>      PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> -    X86MachineState *x86ms = X86_MACHINE(pcms);
> +    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
>      unsigned int smp_cores = ms->smp.cores;
>      unsigned int smp_threads = ms->smp.threads;
>      X86CPUTopoInfo topo_info;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 32b1453e6a82..759b4a97facb 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -293,7 +293,7 @@ static void pc_init1(MachineState *machine,
>  
>          object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
>                                   TYPE_HOTPLUG_HANDLER,
> -                                 (Object **)&pcms->acpi_dev,
> +                                 (Object **)&x86ms->acpi_dev,
>                                   object_property_allow_set_link,
>                                   OBJ_PROP_LINK_STRONG);
>          object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 0cb9c18cd44d..622d0397172a 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -240,7 +240,7 @@ static void pc_q35_init(MachineState *machine)
>  
>      object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
>                               TYPE_HOTPLUG_HANDLER,
> -                             (Object **)&pcms->acpi_dev,
> +                             (Object **)&x86ms->acpi_dev,
>                               object_property_allow_set_link,
>                               OBJ_PROP_LINK_STRONG);
>      object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
diff mbox series

Patch

diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
index b6e0d4395af7..b8ec99aeb051 100644
--- a/include/hw/i386/microvm.h
+++ b/include/hw/i386/microvm.h
@@ -66,7 +66,6 @@  typedef struct {
     bool kernel_cmdline_fixed;
     Notifier machine_done;
     Notifier powerdown_req;
-    AcpiDeviceIf *acpi_dev;
 } MicrovmMachineState;
 
 #define TYPE_MICROVM_MACHINE   MACHINE_TYPE_NAME("microvm")
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index fe52e165b27c..0f7da2329b0f 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -29,7 +29,6 @@  struct PCMachineState {
     Notifier machine_done;
 
     /* Pointers to devices and objects: */
-    HotplugHandler *acpi_dev;
     PCIBus *bus;
     I2CBus *smbus;
     PFlashCFI01 *flash[2];
diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
index a350ea3609f5..de74c831c3ab 100644
--- a/include/hw/i386/x86.h
+++ b/include/hw/i386/x86.h
@@ -50,6 +50,7 @@  typedef struct {
     FWCfgState *fw_cfg;
     qemu_irq *gsi;
     GMappedFile *initrd_mapped_file;
+    HotplugHandler *acpi_dev;
 
     /* RAM information (sizes, addresses, configuration): */
     ram_addr_t below_4g_mem_size, above_4g_mem_size;
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index b7bcbbbb2a35..c356cc71fe08 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -2431,7 +2431,7 @@  void acpi_build(AcpiBuildTables *tables, MachineState *machine)
 
     acpi_add_table(table_offsets, tables_blob);
     acpi_build_madt(tables_blob, tables->linker, x86ms,
-                    ACPI_DEVICE_IF(pcms->acpi_dev), true);
+                    ACPI_DEVICE_IF(x86ms->acpi_dev), true);
 
     vmgenid_dev = find_vmgenid_dev();
     if (vmgenid_dev) {
diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
index b9ce3768b263..df39c5d3bd90 100644
--- a/hw/i386/acpi-microvm.c
+++ b/hw/i386/acpi-microvm.c
@@ -108,7 +108,7 @@  build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
     sb_scope = aml_scope("_SB");
     fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
     isa_build_aml(ISA_BUS(isabus), sb_scope);
-    build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
+    build_ged_aml(sb_scope, GED_DEVICE, x86ms->acpi_dev,
                   GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
     acpi_dsdt_add_power_button(sb_scope);
     acpi_dsdt_add_virtio(sb_scope, mms);
@@ -136,6 +136,7 @@  static void acpi_build_microvm(AcpiBuildTables *tables,
                                MicrovmMachineState *mms)
 {
     MachineState *machine = MACHINE(mms);
+    X86MachineState *x86ms = X86_MACHINE(mms);
     GArray *table_offsets;
     GArray *tables_blob = tables->table_data;
     unsigned dsdt, xsdt;
@@ -183,7 +184,7 @@  static void acpi_build_microvm(AcpiBuildTables *tables,
 
     acpi_add_table(table_offsets, tables_blob);
     acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine),
-                    mms->acpi_dev, false);
+                    ACPI_DEVICE_IF(x86ms->acpi_dev), false);
 
     xsdt = tables_blob->len;
     build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 04209eb38fbe..9df15354ce0f 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -143,7 +143,7 @@  static void microvm_devices_init(MicrovmMachineState *mms)
         sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
                            x86ms->gsi[GED_MMIO_IRQ]);
         sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
-        mms->acpi_dev = ACPI_DEVICE_IF(dev);
+        x86ms->acpi_dev = HOTPLUG_HANDLER(dev);
     }
 
     if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) {
@@ -469,11 +469,13 @@  static void microvm_powerdown_req(Notifier *notifier, void *data)
 {
     MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState,
                                             powerdown_req);
+    X86MachineState *x86ms = X86_MACHINE(mms);
 
-    if (mms->acpi_dev) {
-        Object *obj = OBJECT(mms->acpi_dev);
+    if (x86ms->acpi_dev) {
+        Object *obj = OBJECT(x86ms->acpi_dev);
         AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj);
-        adevc->send_event(mms->acpi_dev, ACPI_POWER_DOWN_STATUS);
+        adevc->send_event(ACPI_DEVICE_IF(x86ms->acpi_dev),
+                          ACPI_POWER_DOWN_STATUS);
     }
 }
 
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 5d8d5ef8b373..0bd6dbbd7bf6 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1274,6 +1274,7 @@  static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
                                Error **errp)
 {
     const PCMachineState *pcms = PC_MACHINE(hotplug_dev);
+    const X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
     const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
     const MachineState *ms = MACHINE(hotplug_dev);
     const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
@@ -1285,7 +1286,7 @@  static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
      * but pcms->acpi_dev is still created. Check !acpi_enabled in
      * addition to cover this case.
      */
-    if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
+    if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) {
         error_setg(errp,
                    "memory hotplug is not enabled: missing acpi device or acpi disabled");
         return;
@@ -1296,7 +1297,7 @@  static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
         return;
     }
 
-    hotplug_handler_pre_plug(pcms->acpi_dev, dev, &local_err);
+    hotplug_handler_pre_plug(x86ms->acpi_dev, dev, &local_err);
     if (local_err) {
         error_propagate(errp, local_err);
         return;
@@ -1311,6 +1312,7 @@  static void pc_memory_plug(HotplugHandler *hotplug_dev,
 {
     Error *local_err = NULL;
     PCMachineState *pcms = PC_MACHINE(hotplug_dev);
+    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
     MachineState *ms = MACHINE(hotplug_dev);
     bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
 
@@ -1323,7 +1325,7 @@  static void pc_memory_plug(HotplugHandler *hotplug_dev,
         nvdimm_plug(ms->nvdimms_state);
     }
 
-    hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &error_abort);
+    hotplug_handler_plug(x86ms->acpi_dev, dev, &error_abort);
 out:
     error_propagate(errp, local_err);
 }
@@ -1331,14 +1333,14 @@  out:
 static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
                                      DeviceState *dev, Error **errp)
 {
-    PCMachineState *pcms = PC_MACHINE(hotplug_dev);
+    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
 
     /*
      * When -no-acpi is used with Q35 machine type, no ACPI is built,
      * but pcms->acpi_dev is still created. Check !acpi_enabled in
      * addition to cover this case.
      */
-    if (!pcms->acpi_dev || !x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
+    if (!x86ms->acpi_dev || !x86_machine_is_acpi_enabled(x86ms)) {
         error_setg(errp,
                    "memory hotplug is not enabled: missing acpi device or acpi disabled");
         return;
@@ -1349,7 +1351,7 @@  static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
         return;
     }
 
-    hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
+    hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
                                    errp);
 }
 
@@ -1357,9 +1359,10 @@  static void pc_memory_unplug(HotplugHandler *hotplug_dev,
                              DeviceState *dev, Error **errp)
 {
     PCMachineState *pcms = PC_MACHINE(hotplug_dev);
+    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
     Error *local_err = NULL;
 
-    hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
+    hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err);
     if (local_err) {
         goto out;
     }
@@ -1403,10 +1406,10 @@  static void pc_cpu_plug(HotplugHandler *hotplug_dev,
     Error *local_err = NULL;
     X86CPU *cpu = X86_CPU(dev);
     PCMachineState *pcms = PC_MACHINE(hotplug_dev);
-    X86MachineState *x86ms = X86_MACHINE(pcms);
+    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
 
-    if (pcms->acpi_dev) {
-        hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
+    if (x86ms->acpi_dev) {
+        hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err);
         if (local_err) {
             goto out;
         }
@@ -1432,8 +1435,9 @@  static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
     int idx = -1;
     X86CPU *cpu = X86_CPU(dev);
     PCMachineState *pcms = PC_MACHINE(hotplug_dev);
+    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
 
-    if (!pcms->acpi_dev) {
+    if (!x86ms->acpi_dev) {
         error_setg(errp, "CPU hot unplug not supported without ACPI");
         return;
     }
@@ -1445,7 +1449,7 @@  static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
         return;
     }
 
-    hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
+    hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
                                    errp);
 }
 
@@ -1456,9 +1460,9 @@  static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev,
     Error *local_err = NULL;
     X86CPU *cpu = X86_CPU(dev);
     PCMachineState *pcms = PC_MACHINE(hotplug_dev);
-    X86MachineState *x86ms = X86_MACHINE(pcms);
+    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
 
-    hotplug_handler_unplug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
+    hotplug_handler_unplug(x86ms->acpi_dev, dev, &local_err);
     if (local_err) {
         goto out;
     }
@@ -1487,7 +1491,7 @@  static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev,
     CPUX86State *env = &cpu->env;
     MachineState *ms = MACHINE(hotplug_dev);
     PCMachineState *pcms = PC_MACHINE(hotplug_dev);
-    X86MachineState *x86ms = X86_MACHINE(pcms);
+    X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
     unsigned int smp_cores = ms->smp.cores;
     unsigned int smp_threads = ms->smp.threads;
     X86CPUTopoInfo topo_info;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 32b1453e6a82..759b4a97facb 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -293,7 +293,7 @@  static void pc_init1(MachineState *machine,
 
         object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
                                  TYPE_HOTPLUG_HANDLER,
-                                 (Object **)&pcms->acpi_dev,
+                                 (Object **)&x86ms->acpi_dev,
                                  object_property_allow_set_link,
                                  OBJ_PROP_LINK_STRONG);
         object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 0cb9c18cd44d..622d0397172a 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -240,7 +240,7 @@  static void pc_q35_init(MachineState *machine)
 
     object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
                              TYPE_HOTPLUG_HANDLER,
-                             (Object **)&pcms->acpi_dev,
+                             (Object **)&x86ms->acpi_dev,
                              object_property_allow_set_link,
                              OBJ_PROP_LINK_STRONG);
     object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,