[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC QEMU PATCH v2 07/10] xen-hvm: initiate building DM ACPI on i386 machine
If QEMU is running as Xen device model and Xen needs ACPI (e.g. NFIT) from QEMU, initiate building DM ACPI. Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx> --- Cc: "Michael S. Tsirkin" <mst@xxxxxxxxxx> Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> Cc: Richard Henderson <rth@xxxxxxxxxxx> Cc: Eduardo Habkost <ehabkost@xxxxxxxxxx> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Anthony Perard <anthony.perard@xxxxxxxxxx> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx --- hw/i386/pc.c | 16 ++++++++++------ include/hw/xen/xen.h | 2 ++ xen-hvm-stub.c | 4 ++++ xen-hvm.c | 23 ++++++++++++++++++++++- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index d24388e05f..6b76720c35 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1256,12 +1256,16 @@ void pc_machine_done(Notifier *notifier, void *data) } } - acpi_setup(); - if (pcms->fw_cfg) { - pc_build_smbios(pcms); - pc_build_feature_control_file(pcms); - /* update FW_CFG_NB_CPUS to account for -device added CPUs */ - fw_cfg_modify_i16(pcms->fw_cfg, FW_CFG_NB_CPUS, pcms->boot_cpus); + if (!xen_enabled()) { + acpi_setup(); + if (pcms->fw_cfg) { + pc_build_smbios(pcms); + pc_build_feature_control_file(pcms); + /* update FW_CFG_NB_CPUS to account for -device added CPUs */ + fw_cfg_modify_i16(pcms->fw_cfg, FW_CFG_NB_CPUS, pcms->boot_cpus); + } + } else { + xen_dm_acpi_setup(pcms); } if (pcms->apic_id_limit > 255) { diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h index d67cdd8c7d..2e2f4bf60d 100644 --- a/include/hw/xen/xen.h +++ b/include/hw/xen/xen.h @@ -65,4 +65,6 @@ void xen_register_framebuffer(struct MemoryRegion *mr); int xen_acpi_copy_to_guest(const char *name, const void *blob, size_t length, int type); +void xen_dm_acpi_setup(PCMachineState *pcms); + #endif /* QEMU_HW_XEN_H */ diff --git a/xen-hvm-stub.c b/xen-hvm-stub.c index a6c018505c..1231faabda 100644 --- a/xen-hvm-stub.c +++ b/xen-hvm-stub.c @@ -67,3 +67,7 @@ int xen_acpi_copy_to_guest(const char *name, const void *blob, size_t length, { return -1; } + +void xen_dm_acpi_setup(PCMachineState *pcms) +{ +} diff --git a/xen-hvm.c b/xen-hvm.c index 4ddc47e5f1..0c36dd11da 100644 --- a/xen-hvm.c +++ b/xen-hvm.c @@ -1268,7 +1268,7 @@ static ram_addr_t dm_acpi_buf_alloc(size_t length) static int xen_dm_acpi_required(PCMachineState *pcms) { - return 0; + return pcms->acpi_nvdimm_state.is_enabled; } static int xen_dm_acpi_init(PCMachineState *pcms, XenIOState *state) @@ -1280,6 +1280,27 @@ static int xen_dm_acpi_init(PCMachineState *pcms, XenIOState *state) return dm_acpi_buf_init(state); } +static void xen_dm_acpi_nvdimm_setup(PCMachineState *pcms) +{ + GArray *table_offsets = g_array_new(false, true /* clear */, + sizeof(uint32_t)); + GArray *table_data = g_array_new(false, true /* clear */, 1); + + nvdimm_build_acpi(table_offsets, table_data, + NULL, &pcms->acpi_nvdimm_state, + MACHINE(pcms)->ram_slots); + + g_array_free(table_offsets, true); + g_array_free(table_data, true); +} + +void xen_dm_acpi_setup(PCMachineState *pcms) +{ + if (pcms->acpi_nvdimm_state.is_enabled) { + xen_dm_acpi_nvdimm_setup(pcms); + } +} + void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory) { int i, rc; -- 2.12.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |