[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 26/31] acpi/ghes: move offset calculus to a separate function
From: |
Mauro Carvalho Chehab |
Subject: |
[PATCH 26/31] acpi/ghes: move offset calculus to a separate function |
Date: |
Fri, 6 Dec 2024 18:12:48 +0100 |
Currently, CPER address location is calculated as an offset of
the hardware_errors table. It is also badly named, as the
offset actually used is the address where the CPER data starts,
and not the beginning of the error source.
Move the logic which calculates such offset to a separate
function, in preparation for a patch that will be changing the
logic to calculate it from the HEST table.
While here, properly name the variable which stores the cper
address.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
hw/acpi/ghes.c | 40 +++++++++++++++++++++++++++++++---------
1 file changed, 31 insertions(+), 9 deletions(-)
diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c
index 90d76b9c2d8c..a4453ee357bc 100644
--- a/hw/acpi/ghes.c
+++ b/hw/acpi/ghes.c
@@ -364,10 +364,37 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgState
*s,
ags->present = true;
}
+static void get_hw_error_offsets(uint64_t ghes_addr,
+ uint64_t *cper_addr,
+ uint64_t *read_ack_register_addr)
+{
+ if (!ghes_addr) {
+ return;
+ }
+
+ /*
+ * non-HEST version supports only one source, so no need to change
+ * the start offset based on the source ID. Also, we can't validate
+ * the source ID, as it is stored inside the HEST table.
+ */
+
+ cpu_physical_memory_read(ghes_addr, cper_addr,
+ sizeof(*cper_addr));
+
+ *cper_addr = le64_to_cpu(*cper_addr);
+
+ /*
+ * As the current version supports only one source, the ack offset is
+ * just sizeof(uint64_t).
+ */
+ *read_ack_register_addr = ghes_addr +
+ ACPI_GHES_ERROR_SOURCE_COUNT * sizeof(uint64_t);
+}
+
void ghes_record_cper_errors(const void *cper, size_t len,
uint16_t source_id, Error **errp)
{
- uint64_t error_block_addr, read_ack_register_addr, read_ack_register = 0;
+ uint64_t cper_addr = 0, read_ack_register_addr = 0, read_ack_register;
uint64_t start_addr;
AcpiGedState *acpi_ged_state;
AcpiGhesState *ags;
@@ -389,18 +416,13 @@ void ghes_record_cper_errors(const void *cper, size_t len,
start_addr += source_id * sizeof(uint64_t);
- cpu_physical_memory_read(start_addr, &error_block_addr,
- sizeof(error_block_addr));
+ get_hw_error_offsets(start_addr, &cper_addr, &read_ack_register_addr);
- error_block_addr = le64_to_cpu(error_block_addr);
- if (!error_block_addr) {
+ if (!cper_addr) {
error_setg(errp, "can not find Generic Error Status Block");
return;
}
- read_ack_register_addr = start_addr +
- ACPI_GHES_ERROR_SOURCE_COUNT * sizeof(uint64_t);
-
cpu_physical_memory_read(read_ack_register_addr,
&read_ack_register, sizeof(read_ack_register));
@@ -421,7 +443,7 @@ void ghes_record_cper_errors(const void *cper, size_t len,
&read_ack_register, sizeof(uint64_t));
/* Write the generic error data entry into guest memory */
- cpu_physical_memory_write(error_block_addr, cper, len);
+ cpu_physical_memory_write(cper_addr, cper, len);
return;
}
--
2.47.1
- [PATCH 21/31] arm/virt: Wire up a GED error device for ACPI / GHES, (continued)
- [PATCH 28/31] acpi/ghes: Change ghes fill logic to work with only one source, Mauro Carvalho Chehab, 2024/12/06
- [PATCH 24/31] target/arm: add an experimental mpidr arm cpu property object, Mauro Carvalho Chehab, 2024/12/06
- [PATCH 09/31] acpi/ghes: make the GHES record generation more generic, Mauro Carvalho Chehab, 2024/12/06
- [PATCH 14/31] acpi/ghes: Prepare to support multiple sources on ghes, Mauro Carvalho Chehab, 2024/12/06
- [PATCH 13/31] acpi/ghes: better name the offset of the hardware error firmware, Mauro Carvalho Chehab, 2024/12/06
- [PATCH 26/31] acpi/ghes: move offset calculus to a separate function,
Mauro Carvalho Chehab <=
- [PATCH 22/31] qapi/acpi-hest: add an interface to do generic CPER error injection, Mauro Carvalho Chehab, 2024/12/06
- [PATCH 30/31] docs: acpi_hest_ghes: fix documentation for CPER size, Mauro Carvalho Chehab, 2024/12/06
- Re: [PATCH 00/31] Prepare GHES driver to support error injection, Markus Armbruster, 2024/12/07