mirror of https://github.com/xemu-project/xemu.git
x86: move acpi_dev from pc/microvm
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: Sergio Lopez <slp@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-id: 20200915120909.20838-15-kraxel@redhat.com
This commit is contained in:
parent
9927a6329a
commit
50aef13181
|
@ -2431,7 +2431,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
|
||||||
|
|
||||||
acpi_add_table(table_offsets, tables_blob);
|
acpi_add_table(table_offsets, tables_blob);
|
||||||
acpi_build_madt(tables_blob, tables->linker, x86ms,
|
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();
|
vmgenid_dev = find_vmgenid_dev();
|
||||||
if (vmgenid_dev) {
|
if (vmgenid_dev) {
|
||||||
|
|
|
@ -108,7 +108,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
|
||||||
sb_scope = aml_scope("_SB");
|
sb_scope = aml_scope("_SB");
|
||||||
fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
|
fw_cfg_add_acpi_dsdt(sb_scope, x86ms->fw_cfg);
|
||||||
isa_build_aml(ISA_BUS(isabus), sb_scope);
|
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);
|
GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
|
||||||
acpi_dsdt_add_power_button(sb_scope);
|
acpi_dsdt_add_power_button(sb_scope);
|
||||||
acpi_dsdt_add_virtio(sb_scope, mms);
|
acpi_dsdt_add_virtio(sb_scope, mms);
|
||||||
|
@ -136,6 +136,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables,
|
||||||
MicrovmMachineState *mms)
|
MicrovmMachineState *mms)
|
||||||
{
|
{
|
||||||
MachineState *machine = MACHINE(mms);
|
MachineState *machine = MACHINE(mms);
|
||||||
|
X86MachineState *x86ms = X86_MACHINE(mms);
|
||||||
GArray *table_offsets;
|
GArray *table_offsets;
|
||||||
GArray *tables_blob = tables->table_data;
|
GArray *tables_blob = tables->table_data;
|
||||||
unsigned dsdt, xsdt;
|
unsigned dsdt, xsdt;
|
||||||
|
@ -183,7 +184,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables,
|
||||||
|
|
||||||
acpi_add_table(table_offsets, tables_blob);
|
acpi_add_table(table_offsets, tables_blob);
|
||||||
acpi_build_madt(tables_blob, tables->linker, X86_MACHINE(machine),
|
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;
|
xsdt = tables_blob->len;
|
||||||
build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
|
build_xsdt(tables_blob, tables->linker, table_offsets, NULL, NULL);
|
||||||
|
|
|
@ -143,7 +143,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
|
||||||
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
|
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
|
||||||
x86ms->gsi[GED_MMIO_IRQ]);
|
x86ms->gsi[GED_MMIO_IRQ]);
|
||||||
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
|
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) {
|
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,
|
MicrovmMachineState *mms = container_of(notifier, MicrovmMachineState,
|
||||||
powerdown_req);
|
powerdown_req);
|
||||||
|
X86MachineState *x86ms = X86_MACHINE(mms);
|
||||||
|
|
||||||
if (mms->acpi_dev) {
|
if (x86ms->acpi_dev) {
|
||||||
Object *obj = OBJECT(mms->acpi_dev);
|
Object *obj = OBJECT(x86ms->acpi_dev);
|
||||||
AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(obj);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
34
hw/i386/pc.c
34
hw/i386/pc.c
|
@ -1274,6 +1274,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
const PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
const PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
||||||
|
const X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
|
||||||
const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
|
const PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
|
||||||
const MachineState *ms = MACHINE(hotplug_dev);
|
const MachineState *ms = MACHINE(hotplug_dev);
|
||||||
const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
|
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
|
* but pcms->acpi_dev is still created. Check !acpi_enabled in
|
||||||
* addition to cover this case.
|
* 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,
|
error_setg(errp,
|
||||||
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
||||||
return;
|
return;
|
||||||
|
@ -1296,7 +1297,7 @@ static void pc_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
hotplug_handler_pre_plug(pcms->acpi_dev, dev, &local_err);
|
hotplug_handler_pre_plug(x86ms->acpi_dev, dev, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
|
@ -1311,6 +1312,7 @@ static void pc_memory_plug(HotplugHandler *hotplug_dev,
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
||||||
|
X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
|
||||||
MachineState *ms = MACHINE(hotplug_dev);
|
MachineState *ms = MACHINE(hotplug_dev);
|
||||||
bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM);
|
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);
|
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:
|
out:
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
|
@ -1331,14 +1333,14 @@ out:
|
||||||
static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
|
static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
|
||||||
DeviceState *dev, Error **errp)
|
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,
|
* When -no-acpi is used with Q35 machine type, no ACPI is built,
|
||||||
* but pcms->acpi_dev is still created. Check !acpi_enabled in
|
* but pcms->acpi_dev is still created. Check !acpi_enabled in
|
||||||
* addition to cover this case.
|
* 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,
|
error_setg(errp,
|
||||||
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
"memory hotplug is not enabled: missing acpi device or acpi disabled");
|
||||||
return;
|
return;
|
||||||
|
@ -1349,7 +1351,7 @@ static void pc_memory_unplug_request(HotplugHandler *hotplug_dev,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
|
hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
|
||||||
errp);
|
errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1357,9 +1359,10 @@ static void pc_memory_unplug(HotplugHandler *hotplug_dev,
|
||||||
DeviceState *dev, Error **errp)
|
DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
||||||
|
X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
|
||||||
Error *local_err = NULL;
|
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) {
|
if (local_err) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1403,10 +1406,10 @@ static void pc_cpu_plug(HotplugHandler *hotplug_dev,
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
X86CPU *cpu = X86_CPU(dev);
|
X86CPU *cpu = X86_CPU(dev);
|
||||||
PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
PCMachineState *pcms = PC_MACHINE(hotplug_dev);
|
||||||
X86MachineState *x86ms = X86_MACHINE(pcms);
|
X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
|
||||||
|
|
||||||
if (pcms->acpi_dev) {
|
if (x86ms->acpi_dev) {
|
||||||
hotplug_handler_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, &local_err);
|
hotplug_handler_plug(x86ms->acpi_dev, dev, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1432,8 +1435,9 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
|
||||||
int idx = -1;
|
int idx = -1;
|
||||||
X86CPU *cpu = X86_CPU(dev);
|
X86CPU *cpu = X86_CPU(dev);
|
||||||
PCMachineState *pcms = PC_MACHINE(hotplug_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");
|
error_setg(errp, "CPU hot unplug not supported without ACPI");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1445,7 +1449,7 @@ static void pc_cpu_unplug_request_cb(HotplugHandler *hotplug_dev,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
hotplug_handler_unplug_request(HOTPLUG_HANDLER(pcms->acpi_dev), dev,
|
hotplug_handler_unplug_request(x86ms->acpi_dev, dev,
|
||||||
errp);
|
errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1456,9 +1460,9 @@ static void pc_cpu_unplug_cb(HotplugHandler *hotplug_dev,
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
X86CPU *cpu = X86_CPU(dev);
|
X86CPU *cpu = X86_CPU(dev);
|
||||||
PCMachineState *pcms = PC_MACHINE(hotplug_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) {
|
if (local_err) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1487,7 +1491,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev,
|
||||||
CPUX86State *env = &cpu->env;
|
CPUX86State *env = &cpu->env;
|
||||||
MachineState *ms = MACHINE(hotplug_dev);
|
MachineState *ms = MACHINE(hotplug_dev);
|
||||||
PCMachineState *pcms = PC_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_cores = ms->smp.cores;
|
||||||
unsigned int smp_threads = ms->smp.threads;
|
unsigned int smp_threads = ms->smp.threads;
|
||||||
X86CPUTopoInfo topo_info;
|
X86CPUTopoInfo topo_info;
|
||||||
|
|
|
@ -293,7 +293,7 @@ static void pc_init1(MachineState *machine,
|
||||||
|
|
||||||
object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
||||||
TYPE_HOTPLUG_HANDLER,
|
TYPE_HOTPLUG_HANDLER,
|
||||||
(Object **)&pcms->acpi_dev,
|
(Object **)&x86ms->acpi_dev,
|
||||||
object_property_allow_set_link,
|
object_property_allow_set_link,
|
||||||
OBJ_PROP_LINK_STRONG);
|
OBJ_PROP_LINK_STRONG);
|
||||||
object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
||||||
|
|
|
@ -240,7 +240,7 @@ static void pc_q35_init(MachineState *machine)
|
||||||
|
|
||||||
object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
||||||
TYPE_HOTPLUG_HANDLER,
|
TYPE_HOTPLUG_HANDLER,
|
||||||
(Object **)&pcms->acpi_dev,
|
(Object **)&x86ms->acpi_dev,
|
||||||
object_property_allow_set_link,
|
object_property_allow_set_link,
|
||||||
OBJ_PROP_LINK_STRONG);
|
OBJ_PROP_LINK_STRONG);
|
||||||
object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
object_property_set_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
||||||
|
|
|
@ -68,7 +68,6 @@ struct MicrovmMachineState {
|
||||||
bool kernel_cmdline_fixed;
|
bool kernel_cmdline_fixed;
|
||||||
Notifier machine_done;
|
Notifier machine_done;
|
||||||
Notifier powerdown_req;
|
Notifier powerdown_req;
|
||||||
AcpiDeviceIf *acpi_dev;
|
|
||||||
};
|
};
|
||||||
typedef struct MicrovmMachineState MicrovmMachineState;
|
typedef struct MicrovmMachineState MicrovmMachineState;
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@ struct PCMachineState {
|
||||||
Notifier machine_done;
|
Notifier machine_done;
|
||||||
|
|
||||||
/* Pointers to devices and objects: */
|
/* Pointers to devices and objects: */
|
||||||
HotplugHandler *acpi_dev;
|
|
||||||
PCIBus *bus;
|
PCIBus *bus;
|
||||||
I2CBus *smbus;
|
I2CBus *smbus;
|
||||||
PFlashCFI01 *flash[2];
|
PFlashCFI01 *flash[2];
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct X86MachineState {
|
||||||
FWCfgState *fw_cfg;
|
FWCfgState *fw_cfg;
|
||||||
qemu_irq *gsi;
|
qemu_irq *gsi;
|
||||||
GMappedFile *initrd_mapped_file;
|
GMappedFile *initrd_mapped_file;
|
||||||
|
HotplugHandler *acpi_dev;
|
||||||
|
|
||||||
/* RAM information (sizes, addresses, configuration): */
|
/* RAM information (sizes, addresses, configuration): */
|
||||||
ram_addr_t below_4g_mem_size, above_4g_mem_size;
|
ram_addr_t below_4g_mem_size, above_4g_mem_size;
|
||||||
|
|
Loading…
Reference in New Issue