[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/3] hw/acpi: Provide function acpi_ghes_present()
From: |
Dongjiu Geng |
Subject: |
Re: [PATCH 2/3] hw/acpi: Provide function acpi_ghes_present() |
Date: |
Mon, 14 Jun 2021 05:48:46 +0800 |
On Fri, 4 Jun 2021 at 01:13, Peter Maydell <peter.maydell@linaro.org> wrote:
>
> Allow code elsewhere in the system to check whether the ACPI GHES
> table is present, so it can determine whether it is OK to try to
> record an error by calling acpi_ghes_record_errors().
>
> (We don't need to migrate the new 'present' field in AcpiGhesState,
> because it is set once at system initialization and doesn't change.)
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> include/hw/acpi/ghes.h | 9 +++++++++
> hw/acpi/ghes-stub.c | 5 +++++
> hw/acpi/ghes.c | 17 +++++++++++++++++
> 3 files changed, 31 insertions(+)
>
> diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h
> index 2ae8bc1ded3..674f6958e90 100644
> --- a/include/hw/acpi/ghes.h
> +++ b/include/hw/acpi/ghes.h
> @@ -64,6 +64,7 @@ enum {
>
> typedef struct AcpiGhesState {
> uint64_t ghes_addr_le;
> + bool present; /* True if GHES is present at all on this board */
> } AcpiGhesState;
>
> void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *linker);
> @@ -72,4 +73,12 @@ void acpi_build_hest(GArray *table_data, BIOSLinker
> *linker,
> void acpi_ghes_add_fw_cfg(AcpiGhesState *vms, FWCfgState *s,
> GArray *hardware_errors);
> int acpi_ghes_record_errors(uint8_t notify, uint64_t error_physical_addr);
> +
> +/**
> + * acpi_ghes_present: Report whether ACPI GHES table is present
> + *
> + * Returns: true if the system has an ACPI GHES table and it is
> + * safe to call acpi_ghes_record_errors() to record a memory error.
> + */
> +bool acpi_ghes_present(void);
> #endif
> diff --git a/hw/acpi/ghes-stub.c b/hw/acpi/ghes-stub.c
> index 9faba043b85..c315de1802d 100644
> --- a/hw/acpi/ghes-stub.c
> +++ b/hw/acpi/ghes-stub.c
> @@ -15,3 +15,8 @@ int acpi_ghes_record_errors(uint8_t source_id, uint64_t
> physical_address)
> {
> return -1;
> }
> +
> +bool acpi_ghes_present(void)
> +{
> + return false;
> +}
> diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c
> index a4dac6bf15e..a749b84d624 100644
> --- a/hw/acpi/ghes.c
> +++ b/hw/acpi/ghes.c
> @@ -386,6 +386,8 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState
> *s,
> /* Create a read-write fw_cfg file for Address */
> fw_cfg_add_file_callback(s, ACPI_GHES_DATA_ADDR_FW_CFG_FILE, NULL, NULL,
> NULL, &(ags->ghes_addr_le), sizeof(ags->ghes_addr_le), false);
> +
> + ags->present = true;
> }
>
> int acpi_ghes_record_errors(uint8_t source_id, uint64_t physical_address)
> @@ -443,3 +445,18 @@ int acpi_ghes_record_errors(uint8_t source_id, uint64_t
> physical_address)
>
> return ret;
> }
> +
> +bool acpi_ghes_present(void)
> +{
> + AcpiGedState *acpi_ged_state;
> + AcpiGhesState *ags;
> +
> + acpi_ged_state = ACPI_GED(object_resolve_path_type("", TYPE_ACPI_GED,
> + NULL));
> +
> + if (!acpi_ged_state) {
> + return false;
> + }
> + ags = &acpi_ged_state->ghes_state;
> + return ags->present;
> +}
> --
> 2.20.1
>
Reviewed-by: Dongjiu Geng <gengdongjiu1@gmail.com>
- [PATCH 0/3] hw/acpi, arm: Provide and use acpi_ghes_present(), Peter Maydell, 2021/06/03
- [PATCH 2/3] hw/acpi: Provide function acpi_ghes_present(), Peter Maydell, 2021/06/03
- [PATCH 3/3] target/arm: Use acpi_ghes_present() to see if we report ACPI memory errors, Peter Maydell, 2021/06/03
- Re: [PATCH 0/3] hw/acpi, arm: Provide and use acpi_ghes_present(), Peter Maydell, 2021/06/15