Message ID | 176693e011a411db92be9e912bfc4a9da0e664b7.1727782588.git.mchehab+huawei@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Change ghes driver to use HEST-based offsets | expand |
On Tue, 1 Oct 2024 13:42:49 +0200 Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote: > Create a new property (x-has-hest-addr) and use it to detect if > the GHES table offsets can be calculated from the HEST address > (qemu 9.2 and upper) or via the legacy way via an offset obtained > from the hardware_errors firmware file. > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> > --- > hw/acpi/generic_event_device.c | 1 + > hw/acpi/ghes.c | 2 +- > hw/core/machine.c | 4 +++- > include/hw/acpi/ghes.h | 1 + > 4 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c > index 49ca1fb8e84a..c4677c9ae6b4 100644 > --- a/hw/acpi/generic_event_device.c > +++ b/hw/acpi/generic_event_device.c > @@ -318,6 +318,7 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev) > > static Property acpi_ged_properties[] = { > DEFINE_PROP_UINT32("ged-event", AcpiGedState, ged_event_bitmap, 0), > + DEFINE_PROP_BOOL("x-has-hest-addr", AcpiGedState, ghes_state.hest_lookup, true), > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c > index 313a6e453af6..86bad865168c 100644 > --- a/hw/acpi/ghes.c > +++ b/hw/acpi/ghes.c > @@ -513,7 +513,7 @@ void ghes_record_cper_errors(const void *cper, size_t len, > } > ags = &acpi_ged_state->ghes_state; > > - if (!ags->hest_addr_le) { > + if (!ags->hest_lookup) { > get_ghes_offsets(le64_to_cpu(ags->hw_error_le), > &cper_addr, &read_ack_register_addr); just fencing off lookup is not enough, to be compatible with qemu-9.1 (virt-9.1) we also should not publish hest_addr fwcfg. Also have assert (to be removed later) to make sure that we put only 1 (existing) error source in HEST. When you switch to multiple sources, this will become a condition to switch HEST generation between 9.1 and 9.2+ variants. > } else { > diff --git a/hw/core/machine.c b/hw/core/machine.c > index adaba17ebac1..b58afe48aa71 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -34,7 +34,9 @@ > #include "hw/virtio/virtio-iommu.h" > #include "audio/audio.h" > > -GlobalProperty hw_compat_9_1[] = {}; > +GlobalProperty hw_compat_9_1[] = { > + {"x-has-hest-addr", "false"}, > +}; > const size_t hw_compat_9_1_len = G_N_ELEMENTS(hw_compat_9_1); > > GlobalProperty hw_compat_9_0[] = { > diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h > index a07c30ef13b7..040d6ee366b2 100644 > --- a/include/hw/acpi/ghes.h > +++ b/include/hw/acpi/ghes.h > @@ -61,6 +61,7 @@ typedef struct AcpiGhesState { > uint64_t hest_addr_le; > uint64_t hw_error_le; > bool present; /* True if GHES is present at all on this board */ > + bool hest_lookup; /* True if HEST address is present */ > } AcpiGhesState; > > /*
Em Thu, 3 Oct 2024 16:27:28 +0200 Igor Mammedov <imammedo@redhat.com> escreveu: > > +++ b/hw/acpi/ghes.c > > @@ -513,7 +513,7 @@ void ghes_record_cper_errors(const void *cper, size_t len, > > } > > ags = &acpi_ged_state->ghes_state; > > > > - if (!ags->hest_addr_le) { > > + if (!ags->hest_lookup) { > > get_ghes_offsets(le64_to_cpu(ags->hw_error_le), > > &cper_addr, &read_ack_register_addr); > > just fencing off lookup is not enough, > to be compatible with qemu-9.1 (virt-9.1) we also should not publish hest_addr fwcfg. I tried this: diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 201e72516608..6bb962d3c449 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -402,8 +402,10 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState *s, fw_cfg_add_file_callback(s, ACPI_HW_ERROR_ADDR_FW_CFG_FILE, NULL, NULL, NULL, &(ags->hw_error_le), sizeof(ags->hw_error_le), false); - fw_cfg_add_file_callback(s, ACPI_HEST_ADDR_FW_CFG_FILE, NULL, NULL, - NULL, &(ags->hest_addr_le), sizeof(ags->hest_addr_le), false); + if (ags->hest_lookup) { + fw_cfg_add_file_callback(s, ACPI_HEST_ADDR_FW_CFG_FILE, NULL, NULL, + NULL, &(ags->hest_addr_le), sizeof(ags->hest_addr_le), false); + } ags->present = true; } But with such change, boot fails: EFI stub: Booting Linux Kernel... UpdateRegionMappingRecursive(0): DF100000 - E1B90000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(1): DF100000 - E1B90000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(2): C0000000 - 100000000 set 6000000000070C clr 0 UpdateRegionMappingRecursive(2): DF100000 - E1B90000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(3): DF000000 - DF200000 set 6000000000070C clr 0 UpdateRegionMappingRecursive(3): DF100000 - DF200000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(3): E1A00000 - E1C00000 set 6000000000070C clr 0 UpdateRegionMappingRecursive(3): E1A00000 - E1B90000 set 400 clr FF9F000000000B3F EFI stub: Generating empty DTB EFI stub: Exiting boot services... UpdateRegionMappingRecursive(0): 139AC1000 - 139CD0000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(1): 139AC1000 - 139CD0000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(2): 139AC1000 - 139CD0000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(3): 139A00000 - 139C00000 set 6000000000070C clr 0 UpdateRegionMappingRecursive(3): 139AC1000 - 139C00000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(3): 139C00000 - 139CD0000 set 400 clr FF9F000000000B3F UpdateRegionMappingRecursive(0): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F UpdateRegionMappingRecursive(1): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F UpdateRegionMappingRecursive(2): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F UpdateRegionMappingRecursive(3): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F SetUefiImageMemoryAttributes - 0x000000013FE60000 - 0x0000000000040000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13FE60000 - 13FEA0000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13FE60000 - 13FEA0000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13FE60000 - 13FEA0000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13FE60000 - 13FEA0000 set 70C clr 0 SetUefiImageMemoryAttributes - 0x000000013CAF0000 - 0x0000000000040000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13CAF0000 - 13CB30000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13CAF0000 - 13CB30000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13CAF0000 - 13CB30000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13CAF0000 - 13CB30000 set 70C clr 0 SetUefiImageMemoryAttributes - 0x000000013CAA0000 - 0x0000000000040000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13CAA0000 - 13CAE0000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13CAA0000 - 13CAE0000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13CAA0000 - 13CAE0000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13CAA0000 - 13CAE0000 set 70C clr 0 SetUefiImageMemoryAttributes - 0x000000013CA50000 - 0x0000000000040000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13CA50000 - 13CA90000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13CA50000 - 13CA90000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13CA50000 - 13CA90000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13CA50000 - 13CA90000 set 70C clr 0 SetUefiImageMemoryAttributes - 0x000000013C960000 - 0x0000000000040000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13C960000 - 13C9A0000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13C960000 - 13C9A0000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13C960000 - 13C9A0000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13C960000 - 13C9A0000 set 70C clr 0 SetUefiImageMemoryAttributes - 0x000000013FE20000 - 0x0000000000030000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13FE20000 - 13FE50000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13FE20000 - 13FE50000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13FE20000 - 13FE50000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13FE20000 - 13FE50000 set 70C clr 0 SetUefiImageMemoryAttributes - 0x000000013C7B0000 - 0x0000000000030000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13C7B0000 - 13C7E0000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13C7B0000 - 13C7E0000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13C7B0000 - 13C7E0000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13C7B0000 - 13C7E0000 set 70C clr 0 SetUefiImageMemoryAttributes - 0x000000013C770000 - 0x0000000000030000 (0x0000000000000008) UpdateRegionMappingRecursive(0): 13C770000 - 13C7A0000 set 70C clr 0 UpdateRegionMappingRecursive(1): 13C770000 - 13C7A0000 set 70C clr 0 UpdateRegionMappingRecursive(2): 13C770000 - 13C7A0000 set 70C clr 0 UpdateRegionMappingRecursive(3): 13C770000 - 13C7A0000 set 70C clr 0 At this point, nothing else appears, and bios doesn't boot OSPM. (I'm using an arm64 BIOS with debug enabled) Thanks, Mauro
Em Tue, 12 Nov 2024 15:55:57 +0100 Mauro Carvalho Chehab <mchehab+huawei@kernel.org> escreveu: > Em Thu, 3 Oct 2024 16:27:28 +0200 > Igor Mammedov <imammedo@redhat.com> escreveu: > > > > +++ b/hw/acpi/ghes.c > > > @@ -513,7 +513,7 @@ void ghes_record_cper_errors(const void *cper, size_t len, > > > } > > > ags = &acpi_ged_state->ghes_state; > > > > > > - if (!ags->hest_addr_le) { > > > + if (!ags->hest_lookup) { > > > get_ghes_offsets(le64_to_cpu(ags->hw_error_le), > > > &cper_addr, &read_ack_register_addr); > > > > just fencing off lookup is not enough, > > to be compatible with qemu-9.1 (virt-9.1) we also should not publish hest_addr fwcfg. > > I tried this: > > diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c > index 201e72516608..6bb962d3c449 100644 > --- a/hw/acpi/ghes.c > +++ b/hw/acpi/ghes.c > @@ -402,8 +402,10 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState *s, > fw_cfg_add_file_callback(s, ACPI_HW_ERROR_ADDR_FW_CFG_FILE, NULL, NULL, > NULL, &(ags->hw_error_le), sizeof(ags->hw_error_le), false); > > - fw_cfg_add_file_callback(s, ACPI_HEST_ADDR_FW_CFG_FILE, NULL, NULL, > - NULL, &(ags->hest_addr_le), sizeof(ags->hest_addr_le), false); > + if (ags->hest_lookup) { > + fw_cfg_add_file_callback(s, ACPI_HEST_ADDR_FW_CFG_FILE, NULL, NULL, > + NULL, &(ags->hest_addr_le), sizeof(ags->hest_addr_le), false); > + } > > ags->present = true; > } > > But with such change, boot fails: > > EFI stub: Booting Linux Kernel... > UpdateRegionMappingRecursive(0): DF100000 - E1B90000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(1): DF100000 - E1B90000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(2): C0000000 - 100000000 set 6000000000070C clr 0 > UpdateRegionMappingRecursive(2): DF100000 - E1B90000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(3): DF000000 - DF200000 set 6000000000070C clr 0 > UpdateRegionMappingRecursive(3): DF100000 - DF200000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(3): E1A00000 - E1C00000 set 6000000000070C clr 0 > UpdateRegionMappingRecursive(3): E1A00000 - E1B90000 set 400 clr FF9F000000000B3F > EFI stub: Generating empty DTB > EFI stub: Exiting boot services... > UpdateRegionMappingRecursive(0): 139AC1000 - 139CD0000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(1): 139AC1000 - 139CD0000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(2): 139AC1000 - 139CD0000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(3): 139A00000 - 139C00000 set 6000000000070C clr 0 > UpdateRegionMappingRecursive(3): 139AC1000 - 139C00000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(3): 139C00000 - 139CD0000 set 400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(0): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(1): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(2): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F > UpdateRegionMappingRecursive(3): 139AC1000 - 139AD0000 set 60000000000400 clr FF9F000000000B3F > SetUefiImageMemoryAttributes - 0x000000013FE60000 - 0x0000000000040000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13FE60000 - 13FEA0000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13FE60000 - 13FEA0000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13FE60000 - 13FEA0000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13FE60000 - 13FEA0000 set 70C clr 0 > SetUefiImageMemoryAttributes - 0x000000013CAF0000 - 0x0000000000040000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13CAF0000 - 13CB30000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13CAF0000 - 13CB30000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13CAF0000 - 13CB30000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13CAF0000 - 13CB30000 set 70C clr 0 > SetUefiImageMemoryAttributes - 0x000000013CAA0000 - 0x0000000000040000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13CAA0000 - 13CAE0000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13CAA0000 - 13CAE0000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13CAA0000 - 13CAE0000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13CAA0000 - 13CAE0000 set 70C clr 0 > SetUefiImageMemoryAttributes - 0x000000013CA50000 - 0x0000000000040000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13CA50000 - 13CA90000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13CA50000 - 13CA90000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13CA50000 - 13CA90000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13CA50000 - 13CA90000 set 70C clr 0 > SetUefiImageMemoryAttributes - 0x000000013C960000 - 0x0000000000040000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13C960000 - 13C9A0000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13C960000 - 13C9A0000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13C960000 - 13C9A0000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13C960000 - 13C9A0000 set 70C clr 0 > SetUefiImageMemoryAttributes - 0x000000013FE20000 - 0x0000000000030000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13FE20000 - 13FE50000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13FE20000 - 13FE50000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13FE20000 - 13FE50000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13FE20000 - 13FE50000 set 70C clr 0 > SetUefiImageMemoryAttributes - 0x000000013C7B0000 - 0x0000000000030000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13C7B0000 - 13C7E0000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13C7B0000 - 13C7E0000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13C7B0000 - 13C7E0000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13C7B0000 - 13C7E0000 set 70C clr 0 > SetUefiImageMemoryAttributes - 0x000000013C770000 - 0x0000000000030000 (0x0000000000000008) > UpdateRegionMappingRecursive(0): 13C770000 - 13C7A0000 set 70C clr 0 > UpdateRegionMappingRecursive(1): 13C770000 - 13C7A0000 set 70C clr 0 > UpdateRegionMappingRecursive(2): 13C770000 - 13C7A0000 set 70C clr 0 > UpdateRegionMappingRecursive(3): 13C770000 - 13C7A0000 set 70C clr 0 > > At this point, nothing else appears, and bios doesn't boot OSPM. > > (I'm using an arm64 BIOS with debug enabled) > > Thanks, > Mauro Got it. In order to be able to remove a call to fw_cfg_add_file_callback(), no calls to bios_linker_loader_write_pointer() can happen. That basically explains why we can't do: if (!ags->hest_lookup) { fw_cfg_add_file_callback(s, ACPI_HW_ERROR_ADDR_FW_CFG_FILE, NULL, NULL, NULL, &(ags->hw_error_le), sizeof(ags->hw_error_le), false); } We need the BIOS file callback to solve all the pointers that were created between HEST table and the hardware error table. This hunk worked: diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 201e72516608..245efde75a8f 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -385,10 +385,12 @@ void acpi_build_hest(GArray *table_data, GArray *hardware_errors, * tell firmware to write into GPA the address of HEST via fw_cfg, * once initialized. */ - bios_linker_loader_write_pointer(linker, - ACPI_HEST_ADDR_FW_CFG_FILE, 0, - sizeof(uint64_t), - ACPI_BUILD_TABLE_FILE, hest_offset); + if (ags->hest_lookup) { + bios_linker_loader_write_pointer(linker, + ACPI_HEST_ADDR_FW_CFG_FILE, 0, + sizeof(uint64_t), + ACPI_BUILD_TABLE_FILE, hest_offset); + } } void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState *s, @@ -402,8 +404,10 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState *s, fw_cfg_add_file_callback(s, ACPI_HW_ERROR_ADDR_FW_CFG_FILE, NULL, NULL, NULL, &(ags->hw_error_le), sizeof(ags->hw_error_le), false); - fw_cfg_add_file_callback(s, ACPI_HEST_ADDR_FW_CFG_FILE, NULL, NULL, - NULL, &(ags->hest_addr_le), sizeof(ags->hest_addr_le), false); + if (ags->hest_lookup) { + fw_cfg_add_file_callback(s, ACPI_HEST_ADDR_FW_CFG_FILE, NULL, NULL, + NULL, &(ags->hest_addr_le), sizeof(ags->hest_addr_le), false); + } ags->present = true; } Thanks, Mauro
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 49ca1fb8e84a..c4677c9ae6b4 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -318,6 +318,7 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev) static Property acpi_ged_properties[] = { DEFINE_PROP_UINT32("ged-event", AcpiGedState, ged_event_bitmap, 0), + DEFINE_PROP_BOOL("x-has-hest-addr", AcpiGedState, ghes_state.hest_lookup, true), DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 313a6e453af6..86bad865168c 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -513,7 +513,7 @@ void ghes_record_cper_errors(const void *cper, size_t len, } ags = &acpi_ged_state->ghes_state; - if (!ags->hest_addr_le) { + if (!ags->hest_lookup) { get_ghes_offsets(le64_to_cpu(ags->hw_error_le), &cper_addr, &read_ack_register_addr); } else { diff --git a/hw/core/machine.c b/hw/core/machine.c index adaba17ebac1..b58afe48aa71 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -34,7 +34,9 @@ #include "hw/virtio/virtio-iommu.h" #include "audio/audio.h" -GlobalProperty hw_compat_9_1[] = {}; +GlobalProperty hw_compat_9_1[] = { + {"x-has-hest-addr", "false"}, +}; const size_t hw_compat_9_1_len = G_N_ELEMENTS(hw_compat_9_1); GlobalProperty hw_compat_9_0[] = { diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index a07c30ef13b7..040d6ee366b2 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -61,6 +61,7 @@ typedef struct AcpiGhesState { uint64_t hest_addr_le; uint64_t hw_error_le; bool present; /* True if GHES is present at all on this board */ + bool hest_lookup; /* True if HEST address is present */ } AcpiGhesState; /*
Create a new property (x-has-hest-addr) and use it to detect if the GHES table offsets can be calculated from the HEST address (qemu 9.2 and upper) or via the legacy way via an offset obtained from the hardware_errors firmware file. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> --- hw/acpi/generic_event_device.c | 1 + hw/acpi/ghes.c | 2 +- hw/core/machine.c | 4 +++- include/hw/acpi/ghes.h | 1 + 4 files changed, 6 insertions(+), 2 deletions(-)