mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Shiju Jose <shiju.jose@huawei.com>,
	Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Ani Sinha <anisinha@redhat.com>,
	Dongjiu Geng <gengdongjiu1@gmail.com>,
	linux-kernel@vger.kernel.org, qemu-arm@nongnu.org,
	qemu-devel@nongnu.org
Subject: [PATCH v5 14/16] acpi/ghes: move offset calculus to a separate function
Date: Wed,  4 Dec 2024 08:41:22 +0100	[thread overview]
Message-ID: <5a2bda4722e2d45839a75f3a193f6b8f4841c773.1733297707.git.mchehab+huawei@kernel.org> (raw)
In-Reply-To: <cover.1733297707.git.mchehab+huawei@kernel.org>

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>
---
 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


  parent reply	other threads:[~2024-12-04  7:42 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-04  7:41 [PATCH v5 00/16] Prepare GHES driver to support error injection Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 01/16] acpi/ghes: get rid of ACPI_HEST_SRC_ID_RESERVED Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 02/16] acpi/ghes: simplify acpi_ghes_record_errors() code Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 03/16] acpi/ghes: simplify the per-arch caller to build HEST table Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 04/16] acpi/ghes: better handle source_id and notification Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 05/16] acpi/ghes: Fix acpi_ghes_record_errors() argument Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 06/16] acpi/ghes: Remove a duplicated out of bounds check Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 07/16] acpi/ghes: Change the type for source_id Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 08/16] acpi/ghes: don't check if physical_address is not zero Mauro Carvalho Chehab
2024-12-04 13:12   ` Igor Mammedov
2024-12-09 10:15     ` Jonathan Cameron
2024-12-04  7:41 ` [PATCH v5 09/16] acpi/ghes: make the GHES record generation more generic Mauro Carvalho Chehab
2024-12-04 16:38   ` Igor Mammedov
2024-12-04  7:41 ` [PATCH v5 10/16] acpi/ghes: better name GHES memory error function Mauro Carvalho Chehab
2024-12-04 16:40   ` Igor Mammedov
2024-12-05  8:19     ` Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 11/16] acpi/ghes: don't crash QEMU if ghes GED is not found Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 12/16] acpi/ghes: rename etc/hardware_error file macros Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 13/16] acpi/ghes: better name the offset of the hardware error firmware Mauro Carvalho Chehab
2024-12-04 16:37   ` Igor Mammedov
2024-12-05  7:59     ` Mauro Carvalho Chehab
2024-12-05  9:22       ` Igor Mammedov
2024-12-05 14:33         ` Mauro Carvalho Chehab
2024-12-04  7:41 ` Mauro Carvalho Chehab [this message]
2024-12-04 16:42   ` [PATCH v5 14/16] acpi/ghes: move offset calculus to a separate function Igor Mammedov
2024-12-04  7:41 ` [PATCH v5 15/16] acpi/ghes: Change ghes fill logic to work with only one source Mauro Carvalho Chehab
2024-12-04  7:41 ` [PATCH v5 16/16] docs: acpi_hest_ghes: fix documentation for CPER size Mauro Carvalho Chehab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5a2bda4722e2d45839a75f3a193f6b8f4841c773.1733297707.git.mchehab+huawei@kernel.org \
    --to=mchehab+huawei@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=anisinha@redhat.com \
    --cc=gengdongjiu1@gmail.com \
    --cc=imammedo@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=shiju.jose@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®