Message ID | 1514440458-10515-9-git-send-email-gengdongjiu@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, 28 Dec 2017 13:54:17 +0800 Dongjiu Geng <gengdongjiu@huawei.com> 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. > > Signed-off-by: Dongjiu Geng <gengdongjiu@huawei.com> > --- > 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@huawei.com> > --- > 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 > + 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; >
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@huawei.com> 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@huawei.com> >> --- >> 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@huawei.com> >> --- >> 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; >> > > > . >
On 28 December 2017 at 14:58, Igor Mammedov <imammedo@redhat.com> wrote: > On Thu, 28 Dec 2017 13:54:17 +0800 > Dongjiu Geng <gengdongjiu@huawei.com> 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. > >> >> Signed-off-by: Dongjiu Geng <gengdongjiu@huawei.com> >> --- >> 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@huawei.com> >> --- >> 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 Fields in VirtMachineClass for this kind of thing tend to end up having to be no_foo, because the default (false) must be the setting for the most up to date version of the virt board, because of the way the virt_machine_X_XX_options() functions chain together. So no_ras matches the sense used for all the existing bools in VirtMachineClass. (In contrast, bools in the VirtMachineState struct are the conventional sense, so there we have highmem/its/virt/etc.) thanks -- PMM
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) { + 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;