Igor, Thanks for the review and comments. On 2017/12/28 22:58, Igor Mammedov wrote: > On Thu, 28 Dec 2017 13:54:17 +0800 > Dongjiu Geng <gengdongjiu@xxxxxxxxxx> wrote: > >> Support this feature since version 2.10, disable it by >> default in the old version. > patch should go before acpi tables are actually added, > otherwise it might break bisectability. yes, it should. I will move this patch before APEI tables are added. Thanks for the pointing out. > >> >> Signed-off-by: Dongjiu Geng <gengdongjiu@xxxxxxxxxx> >> --- >> Address Shannon's comments to add platform version in [1]. >> >> [1]: https://lkml.org/lkml/2017/8/25/821 >> >> Signed-off-by: Dongjiu Geng <gengdongjiu@xxxxxxxxxx> >> --- >> hw/arm/virt-acpi-build.c | 14 +++++++++----- >> hw/arm/virt.c | 4 ++++ >> include/hw/arm/virt.h | 1 + >> 3 files changed, 14 insertions(+), 5 deletions(-) >> >> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c >> index 06c14b3..b6974ef 100644 >> --- a/hw/arm/virt-acpi-build.c >> +++ b/hw/arm/virt-acpi-build.c >> @@ -801,10 +801,11 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables) >> acpi_add_table(table_offsets, tables_blob); >> build_spcr(tables_blob, tables->linker, vms); >> >> - acpi_add_table(table_offsets, tables_blob); >> - build_hardware_error_table(tables->hardware_errors, tables->linker); >> - build_apei_ghes(tables_blob, tables->hardware_errors, tables->linker); >> - >> + if (!vmc->no_ras) { > > it's better to avoid no_foo, use something like > > vmc->has_ras > > instead Ok, I will rename it. > >> + acpi_add_table(table_offsets, tables_blob); >> + build_hardware_error_table(tables->hardware_errors, tables->linker); >> + build_apei_ghes(tables_blob, tables->hardware_errors, tables->linker); >> + } >> >> if (nb_numa_nodes > 0) { >> acpi_add_table(table_offsets, tables_blob); >> @@ -891,6 +892,7 @@ static const VMStateDescription vmstate_virt_acpi_build = { >> >> void virt_acpi_setup(VirtMachineState *vms) >> { >> + VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms); >> AcpiBuildTables tables; >> AcpiBuildState *build_state; >> >> @@ -922,7 +924,9 @@ void virt_acpi_setup(VirtMachineState *vms) >> fw_cfg_add_file(vms->fw_cfg, ACPI_BUILD_TPMLOG_FILE, tables.tcpalog->data, >> acpi_data_len(tables.tcpalog)); >> >> - ghes_add_fw_cfg(vms->fw_cfg, tables.hardware_errors); >> + if (!vmc->no_ras) { >> + ghes_add_fw_cfg(vms->fw_cfg, tables.hardware_errors); >> + } >> >> build_state->rsdp_mr = acpi_add_rom_blob(build_state, tables.rsdp, >> ACPI_BUILD_RSDP_FILE, 0); >> diff --git a/hw/arm/virt.c b/hw/arm/virt.c >> index 68495c2..ab79988 100644 >> --- a/hw/arm/virt.c >> +++ b/hw/arm/virt.c >> @@ -1732,8 +1732,12 @@ static void virt_2_9_instance_init(Object *obj) >> >> static void virt_machine_2_9_options(MachineClass *mc) >> { >> + VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc)); >> + >> virt_machine_2_10_options(mc); >> SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_9); >> + /* memory recovery feature was introduced with 2.10 */ >> + vmc->no_ras = true; >> } >> DEFINE_VIRT_MACHINE(2, 9) >> >> diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h >> index 33b0ff3..8fbd664 100644 >> --- a/include/hw/arm/virt.h >> +++ b/include/hw/arm/virt.h >> @@ -84,6 +84,7 @@ typedef struct { >> bool disallow_affinity_adjustment; >> bool no_its; >> bool no_pmu; >> + bool no_ras; >> bool claim_edge_triggered_timers; >> } VirtMachineClass; >> > > > . >