From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94AC31BD000 for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=BQXSo7Cp/0ymGzF3vtByHT06DRS9nzfa+Yimpv7p9rsd+6MTszVcfRg1A2r6fqLQ40LPLaIp2n7rTFEcWNfn0+hYBJpmR6pkOTJnxCfbnEEs9ra9M2FSg/3D0A4gHCfhSBDJ+Z/uFVoTq9ur99zKI4Ef0zK0DDU9xdp4akpq6iw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=TwTF2mnhrd+9LftrnNkLoqHQQWwH22SVS4oBsWanv3s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EICvJttiKIea47G5VuX/sxUmI1qnbT7iFPJHsXOaI3Q1w4xoRLzuA5NWQvLJexfQeXSlEY6SW8I9Ps6jsmC0wWcRqkdCmtqFbT7wjT0IDTdw/pjDwqIK5GACgMlH/kYl4++4jaUfxtqQcZuxXbW5LgkcNaQYnlr8XrVSy2EZtTE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=d7mD9MOw; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="d7mD9MOw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2AB2EC4CED3; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=TwTF2mnhrd+9LftrnNkLoqHQQWwH22SVS4oBsWanv3s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d7mD9MOwsa5ipXDofPPxEjhNFI5X5uGhhytuBwP2hSz373grn6kQB4pbQxJsshlKh T+059G+HXCwJyyW02powSBX6ZqTk0AChuTNGRMp3j6ihEZjIvh52zmZX6+RDeOkyx7 0qrKdbXTRKzC/xP1EYrEi+opfTwseU3Idw6D95ClVvomdOo2L4AuANytptXIUY8T9k bcdepUw0qozJ8ZGI47V2yUB13PQs6xJVicmsq5jNonQx1E/O+7045hLYYxNhcOYeTu Kmy9pgqORmM4vHdYWn1a1kjLYtdFY7rPnvCs5ZHAJI7AMy78qHq9lWBLs7Xg/ZQzIu TwotLzXEUkgYA== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0O-1IkM; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 01/15] acpi/ghes: get rid of ACPI_HEST_SRC_ID_RESERVED Date: Tue, 1 Oct 2024 09:03:38 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" This is just duplicating ACPI_GHES_ERROR_SOURCE_COUNT, which has a better name. So, drop the duplication. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Igor Mammedov Reviewed-by: Jonathan Cameron --- hw/acpi/ghes.c | 7 ++----- include/hw/acpi/ghes.h | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index e9511d9b8f71..dc217694deb9 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -34,9 +34,6 @@ /* The max size in bytes for one error block */ #define ACPI_GHES_MAX_RAW_DATA_LENGTH (1 * KiB) =20 -/* Now only support ARMv8 SEA notification type error source */ -#define ACPI_GHES_ERROR_SOURCE_COUNT 1 - /* Generic Hardware Error Source version 2 */ #define ACPI_GHES_SOURCE_GENERIC_ERROR_V2 10 =20 @@ -396,7 +393,7 @@ int acpi_ghes_record_errors(uint8_t source_id, uint64_t= physical_address) AcpiGedState *acpi_ged_state; AcpiGhesState *ags; =20 - assert(source_id < ACPI_HEST_SRC_ID_RESERVED); + assert(source_id < ACPI_GHES_ERROR_SOURCE_COUNT); =20 acpi_ged_state =3D ACPI_GED(object_resolve_path_type("", TYPE_ACPI_GED, NULL)); @@ -407,7 +404,7 @@ int acpi_ghes_record_errors(uint8_t source_id, uint64_t= physical_address) =20 if (physical_address) { =20 - if (source_id < ACPI_HEST_SRC_ID_RESERVED) { + if (source_id < ACPI_GHES_ERROR_SOURCE_COUNT) { start_addr +=3D source_id * sizeof(uint64_t); } =20 diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 674f6958e905..59e3b8fb24b9 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -59,7 +59,8 @@ enum AcpiGhesNotifyType { enum { ACPI_HEST_SRC_ID_SEA =3D 0, /* future ids go here */ - ACPI_HEST_SRC_ID_RESERVED, + + ACPI_GHES_ERROR_SOURCE_COUNT }; =20 typedef struct AcpiGhesState { --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C0F31BC9F4 for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=bBwbazV9SDc8zrz6mAOA68FW9nkBot7yp+yyddkz11k2rVrmYEl4FHkA1C4knNlCDTEN129XlhoqNO6vhSczNngSI72zIK+tvvjHaDdrXNAzjm0U4uHgBv6UCO2TpMDYB8Y4ujcPAxJVzCKV8RqYk+5BsieYrmdN6GCe68ff+Lo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=zkop42TFRLpY7ULuyBanfVruQ6JbCYVDcuNKDW81Y1Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ozwatxfBA/+k1ddfbMFWVE0jbugGO8qGv+/CK5wqupqk+nrKlF/dBNvwqwkVqFPyzj+oVCTPnJc1tmCUAfPBLbbAOABrFreIqzF6eiYfWFlUFtd+v2SuLEQHdgG/PkyzeMLklPJWL81/7Hl8cTdLkGzWoU6kGdqFbdwvF/1mZBo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WKhB7puq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="WKhB7puq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 10C82C4CEC6; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=zkop42TFRLpY7ULuyBanfVruQ6JbCYVDcuNKDW81Y1Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WKhB7puqWLjWEh5WYvXQE0rTdVWeDN5LVjylm2JNCfGw36C9B3RgdhFiU3pOOCOdm UYkHmf3N84IWPAUUY8Ks+bbYzR/PPqrpiyKYOI7DWDlSunSKxboSq7rqteYSBdtrUZ I7Q6CTbB6gi82Au7iP5bFOEjLAcsubfHBtk7DRTpWQqrotb6bxTZO+1V4eGacC+/ro fj12AUupWZpyJ1tBo+2qbf68QpVgImo/KgjfsZNrPRD5aMpDGAGY/CDqR3RzasUg/o jXCmypQ2pCc4BIft6xZraHM06VFVMlE+Er3RfiFgtXm5n21ogDZChIqSV4y2eNjkD5 5v8GJt3FzyWHQ== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0R-1Rfk; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 02/15] acpi/ghes: simplify acpi_ghes_record_errors() code Date: Tue, 1 Oct 2024 09:03:39 +0200 Message-ID: <3c7830e2db3aa2655db0487611c853728a1dca54.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" Reduce the ident of the function and prepares it for the next changes. No functional changes. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Igor Mammedov Reviewed-by: Jonathan Cameron --- hw/acpi/ghes.c | 56 ++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index dc217694deb9..e66f3be1502b 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -402,40 +402,42 @@ int acpi_ghes_record_errors(uint8_t source_id, uint64= _t physical_address) =20 start_addr =3D le64_to_cpu(ags->ghes_addr_le); =20 - if (physical_address) { + if (!physical_address) { + return -1; + } =20 - if (source_id < ACPI_GHES_ERROR_SOURCE_COUNT) { - start_addr +=3D source_id * sizeof(uint64_t); - } + if (source_id < ACPI_GHES_ERROR_SOURCE_COUNT) { + start_addr +=3D source_id * sizeof(uint64_t); + } =20 - cpu_physical_memory_read(start_addr, &error_block_addr, - sizeof(error_block_addr)); + cpu_physical_memory_read(start_addr, &error_block_addr, + sizeof(error_block_addr)); =20 - error_block_addr =3D le64_to_cpu(error_block_addr); + error_block_addr =3D le64_to_cpu(error_block_addr); =20 - read_ack_register_addr =3D start_addr + - ACPI_GHES_ERROR_SOURCE_COUNT * sizeof(uint64_t); + read_ack_register_addr =3D start_addr + + ACPI_GHES_ERROR_SOURCE_COUNT * sizeof(uint64_= t); =20 - cpu_physical_memory_read(read_ack_register_addr, - &read_ack_register, sizeof(read_ack_regis= ter)); + cpu_physical_memory_read(read_ack_register_addr, + &read_ack_register, sizeof(read_ack_register)= ); =20 - /* zero means OSPM does not acknowledge the error */ - if (!read_ack_register) { - error_report("OSPM does not acknowledge previous error," - " so can not record CPER for current error anymore"); - } else if (error_block_addr) { - read_ack_register =3D cpu_to_le64(0); - /* - * Clear the Read Ack Register, OSPM will write it to 1 when - * it acknowledges this error. - */ - cpu_physical_memory_write(read_ack_register_addr, - &read_ack_register, sizeof(uint64_t)); + /* zero means OSPM does not acknowledge the error */ + if (!read_ack_register) { + error_report("OSPM does not acknowledge previous error," + " so can not record CPER for current error anymore"); + } else if (error_block_addr) { + read_ack_register =3D cpu_to_le64(0); + /* + * Clear the Read Ack Register, OSPM will write it to 1 when + * it acknowledges this error. + */ + cpu_physical_memory_write(read_ack_register_addr, + &read_ack_register, sizeof(uint64_t)); =20 - ret =3D acpi_ghes_record_mem_error(error_block_addr, - physical_address); - } else - error_report("can not find Generic Error Status Block"); + ret =3D acpi_ghes_record_mem_error(error_block_addr, + physical_address); + } else { + error_report("can not find Generic Error Status Block"); } =20 return ret; --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94B361BD005 for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=NvRYWhUw5AqnyYkXupH6OJU6mTC6s63pQQl14tbSxOwZqXQ3NswlgH7Jc5RLUblVuYRWlL5cQyX6j7hVqbBBNde1jVgzZDPJ3Ft/wvExZ7b8oUZAcMD5HCoKa+EgNA3cZsIpGp0gcCfzfW9oWQB38ze0rF6+f3U2B5Oo0/2cAiI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=gE66plh5Ccq78f0B7n/cfi2RLPCdjB5/duOjscO/Y2Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NjhVWwQVkItcHgFBaNQpt7xACVj6CmJig3fVXrwZfycZurY/XCPoGeJL1DXbRJ8qqYQX5zx62THrRSLUVelMAXXR9z3qOuIFTbxokqfUV4qgP0Y/LqgwUPXM2qPKMhoS8aQxeWTkdMy08xU4W+1WAw5Iz1VRAdiZE8ZWNh6iplM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ciwP6AnM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ciwP6AnM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 28786C4CED4; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=gE66plh5Ccq78f0B7n/cfi2RLPCdjB5/duOjscO/Y2Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ciwP6AnM++vYVNJQt5gvXc9ltCwJ3LE2S+hmwhoAInnjBLo5A0HIWT8qBek4wXb3S ZP3rzyq6mXe1BBaFxnaeidrQ794moxuFBLE/aoFSW32AfhCMgZjOxAC2ipXD+f1B/R UCWTJfTqm9uC1zCbwbnWYZG6RKvwwRBBHS0OvqLojrppbMv+0LSq93ZIiPLMpK3VSR R+xRshthycTF3rcwQ9RuaF5NO9d0tYfvN2F4bPMlyqbdU9AenpvPk7VH1ZA9HVGRZb ZByUYdA7uxmZ1rNG5e8tqOhfCheSxEURer+1B+l6AYKhxbwMRl5VrtbOolb2CBAnoD IAKVehLrLbKVg== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0U-1f0O; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , Peter Maydell , Shannon Zhao , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 03/15] acpi/ghes: simplify the per-arch caller to build HEST table Date: Tue, 1 Oct 2024 09:03:40 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" The GHES driver requires not only a HEST table, but also a separate firmware file to store Error Structure records. It can't do one without the other. Simplify the caller logic for it to require one function. This prepares for further changes where the HEST table generation will become more generic. No functional changes. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Jonathan Cameron Reviewed-by: Igor Mammedov --- Changes from v10: - Removed the logic which associates notification and source ID. This will be placed on a separate patch. Changes from v8: - Non-rename/cleanup changes merged altogether; - source ID is now more generic, defined per guest target. That should make easier to add support for 86. Signed-off-by: Mauro Carvalho Chehab --- hw/acpi/ghes.c | 7 +++++-- hw/arm/virt-acpi-build.c | 5 ++--- include/hw/acpi/ghes.h | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index e66f3be1502b..4a6c45bcb4be 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -233,7 +233,7 @@ static int acpi_ghes_record_mem_error(uint64_t error_bl= ock_address, * Initialize "etc/hardware_errors" and "etc/hardware_errors_addr" fw_cfg = blobs. * See docs/specs/acpi_hest_ghes.rst for blobs format. */ -void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *linker) +static void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *li= nker) { int i, error_status_block_offset; =20 @@ -356,12 +356,15 @@ static void build_ghes_v2(GArray *table_data, int sou= rce_id, BIOSLinker *linker) } =20 /* Build Hardware Error Source Table */ -void acpi_build_hest(GArray *table_data, BIOSLinker *linker, +void acpi_build_hest(GArray *table_data, GArray *hardware_errors, + BIOSLinker *linker, const char *oem_id, const char *oem_table_id) { AcpiTable table =3D { .sig =3D "HEST", .rev =3D 1, .oem_id =3D oem_id, .oem_table_id =3D oem_table_id= }; =20 + build_ghes_error_table(hardware_errors, linker); + acpi_table_begin(&table, table_data); =20 /* Error Source Count */ diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index f76fb117adff..bafd9a56c217 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -943,10 +943,9 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildT= ables *tables) build_dbg2(tables_blob, tables->linker, vms); =20 if (vms->ras) { - build_ghes_error_table(tables->hardware_errors, tables->linker); acpi_add_table(table_offsets, tables_blob); - acpi_build_hest(tables_blob, tables->linker, vms->oem_id, - vms->oem_table_id); + acpi_build_hest(tables_blob, tables->hardware_errors, tables->link= er, + vms->oem_id, vms->oem_table_id); } =20 if (ms->numa_state->num_nodes > 0) { diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 59e3b8fb24b9..20016c226d1f 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -68,8 +68,8 @@ typedef struct AcpiGhesState { bool present; /* True if GHES is present at all on this board */ } AcpiGhesState; =20 -void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *linker); -void acpi_build_hest(GArray *table_data, BIOSLinker *linker, +void acpi_build_hest(GArray *table_data, GArray *hardware_errors, + BIOSLinker *linker, const char *oem_id, const char *oem_table_id); void acpi_ghes_add_fw_cfg(AcpiGhesState *vms, FWCfgState *s, GArray *hardware_errors); --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C1EC1BCA01 for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=FE2iqr41JdeYVe1cOnz+vTk1OWulYL9G+KUoa3/BV5ZzB9WNvFPpu0kkTA7ujLRc7uVGLQ0kWPDKarpN2/qSn296GYFNY8RzC9dJ5igE2wvQ/Rthi4h/U1gZywUxBT4LRHBnQGmP0QiRgtxQ77RP76Vf473laefTIIQF84Ev6zg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=tntLg1XIn+hncV2BAYR/kFc1yc1kwy56uncyjqcuPqc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f7cabEo5dbtZS/jv6WWbczlvt2qQzpv+t8UQzNySuCpw4XHJ1asVx/Q6/N/8ABvRzYQFC5BYy4Agijn3OEnWMmj5tkBePfXTagU9d5fXth1i3dkgDJ24JqZ8fjaEtoesPg3IRSXNy4j4v5yUlXlH3FlVX65lPccrmgGC2KV00FI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f0L68hy2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="f0L68hy2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 236E8C4AF0C; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=tntLg1XIn+hncV2BAYR/kFc1yc1kwy56uncyjqcuPqc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f0L68hy2f4IJG9ZxBgOYwS5Eu0HUkQm+enfod24NznAIqIabWQBFUOVCD3wA5T2X3 nILFDBfEtqcVMUp1nlNNUHz2ZktzL896lMnMeEPELhdpalD/Rd4Wlw11AIDVWOsxgD mYEr9ALBlbxBulbx+VLZwJ8Bam9fcYdEGDBshOWHc/YWZVPI5PyEhNm2z+XqAlItLo bfi3/pQtJUArwmmHDzuBO8ozhfvNjZdxgX5Tp7URfJGQEmtWyzxsJQnfI2mb5FHd5t NFLt4Bc6UDECvMOY3e5XGFRexNBS2EGms48oiRFMiUlFvIOAXUojagKLZGvWaJxtlx OhJEPKzB5tXVw== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0X-1qOy; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 04/15] acpi/ghes: better handle source_id and notification Date: Tue, 1 Oct 2024 09:03:41 +0200 Message-ID: <1b6ddd0bdfc9ac32a35fa7d85692e635bb76da11.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" GHES has two fields that are stored on HEST error source blocks: - notification type, which is a number defined at the ACPI spec containing several arch-specific synchronous and assynchronous types; - source id, which is a HW/FW defined number, used to distinguish between different implemented hardware report mechanisms. Cleanup the logic to fill those, as they should be handled independently. This is a preparation for a future patch that will shift those fields to the HEST init function call. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Jonathan Cameron --- Chenges from v10: - Some changes got moved to the previous patch. Changes from v8: - Non-rename/cleanup changes merged altogether; - source ID is now more generic, defined per guest target. That should make easier to add support for 86. Signed-off-by: Mauro Carvalho Chehab --- hw/acpi/ghes.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 4a6c45bcb4be..29cd7e4d8171 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -284,9 +284,13 @@ static void build_ghes_error_table(GArray *hardware_er= rors, BIOSLinker *linker) } =20 /* Build Generic Hardware Error Source version 2 (GHESv2) */ -static void build_ghes_v2(GArray *table_data, int source_id, BIOSLinker *l= inker) +static void build_ghes_v2(GArray *table_data, + BIOSLinker *linker, + enum AcpiGhesNotifyType notify, + uint16_t source_id) { uint64_t address_offset; + /* * Type: * Generic Hardware Error Source version 2(GHESv2 - Type 10) @@ -316,18 +320,8 @@ static void build_ghes_v2(GArray *table_data, int sour= ce_id, BIOSLinker *linker) address_offset + GAS_ADDR_OFFSET, sizeof(uint64_t), ACPI_GHES_ERRORS_FW_CFG_FILE, source_id * sizeof(uint64_t)); =20 - switch (source_id) { - case ACPI_HEST_SRC_ID_SEA: - /* - * Notification Structure - * Now only enable ARMv8 SEA notification type - */ - build_ghes_hw_error_notification(table_data, ACPI_GHES_NOTIFY_SEA); - break; - default: - error_report("Not support this error source"); - abort(); - } + /* Notification Structure */ + build_ghes_hw_error_notification(table_data, notify); =20 /* Error Status Block Length */ build_append_int_noprefix(table_data, ACPI_GHES_MAX_RAW_DATA_LENGTH, 4= ); @@ -369,7 +363,8 @@ void acpi_build_hest(GArray *table_data, GArray *hardwa= re_errors, =20 /* Error Source Count */ build_append_int_noprefix(table_data, ACPI_GHES_ERROR_SOURCE_COUNT, 4); - build_ghes_v2(table_data, ACPI_HEST_SRC_ID_SEA, linker); + build_ghes_v2(table_data, linker, + ACPI_GHES_NOTIFY_SEA, ACPI_HEST_SRC_ID_SEA); =20 acpi_table_end(linker, &table); } --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96FAB1BD009 for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=V0duq0MiVeLDHNhSJU+JPVY9mREyR5M7hfo7lb8pbGD1eCyb1XCaFONYf9rQGqADHUecKDeic9h+6bRJOos+2kXe0iaA6tEz1+caUajUlTY9xi+uROblgEYuOjZQHxwcmlbjTnjZ0n5pLokfoF3XrQK3uoMowLgfWAqdpWIY+ow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=oc7bFCfLChkAeF9cYYri8XUZmZvoO0wDOpJN/MoAvyI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IE4cYJfTMR4S9xSn6Vaz39cC/yXXd/R06ak+Gntmv2b+l0xpcWWQo5S0eau7qgijXe7t1qEd2sQIunjq6Yj1Ms4ZZXTTvai1R3pMsE+6niXN5dVIe/uHua/PnV1Pigo5RqDtvzwDzHMSIQlie2OcncvzqXyXxqXVANsz/JxAeqc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LZVgVXFS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LZVgVXFS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 33E82C4CED8; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=oc7bFCfLChkAeF9cYYri8XUZmZvoO0wDOpJN/MoAvyI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LZVgVXFScYeDWgv+/ebQa0TDe0a/AnOvdD9Re+vOIEZDbWz+yaL7KtGC0WDQzdEE1 5rrj48Bkv04psiIP5xGRuec1bh/VzhfmyeYNbJDmtGewjrkFm/fZIq1ks7Vgwq1UO4 pYg8+Fi2JL85APYTusX5hzDldz9SkQjdrhHEeeYnO4LddCyZmCH5f2ngTyu/Jt27ZD 6hGm5PXFvVDAbnVKKqAubb47o9zgD1UZk6iZptLd1iMjuKAdFu4Sv5XxOq1zBszLac 7vOss5B5gVL/UhzYA8Bhzm9jGAKgFhUCon36dAcAMt5WqEiTTIyYu3YQHRywApAw1g 44PG4upRTCb+Q== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0g-21XW; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 05/15] acpi/ghes: Fix acpi_ghes_record_errors() argument Date: Tue, 1 Oct 2024 09:03:42 +0200 Message-ID: <7c2862061ef4b358154414127f6cfd231310660e.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" Align the header file with the actual implementation of this function, as the first argument is source ID and not notification type. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Jonathan Cameron Reviewed-by: Igor Mammedov --- Changes from v8: - Non-rename/cleanup changes merged altogether; - source ID is now more generic, defined per guest target. That should make easier to add support for 86. Signed-off-by: Mauro Carvalho Chehab --- include/hw/acpi/ghes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 20016c226d1f..50e3a25ea384 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -73,7 +73,7 @@ void acpi_build_hest(GArray *table_data, GArray *hardware= _errors, const char *oem_id, const char *oem_table_id); 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); +int acpi_ghes_record_errors(uint8_t source_id, uint64_t error_physical_add= r); =20 /** * acpi_ghes_present: Report whether ACPI GHES table is present --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C1581BC9F9 for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=k0gcAuqaSXoPKrUhBRfaVTuhD52lmkn0xrp+f3xPGBJP6ZmiLou9cR6vC57J0VGq5G0Rhj01Tzbqv2iciXuns5uDf6Iom6maIOhhnD72DvXdKLj0yj+OB5pLJ+6+c/1mQ2Uq63qzYH0TRRO+YG3Tai9tyaw8fH20xpZ3AwERSz8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=OPn+v+8+BveQRdEyioQUgXVoI5BFnHOQMXslK4VQRmM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rsYS4HqfNm9gxtEAanw38heF1g8/A53z7BWdtj4h2vBlRNurJsJcmtO2VzA3T4kxAmc1J8KIfMCX/rk+r9QJPu8RVS3gMiBKbaZxzUVrnlEHL4/8ga1ACk/swjovM1iN+5EY+kqaV/nkrH5jYmv64Qbeu+VE5Q+y1/nv9faJUgM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nX6vCR5R; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nX6vCR5R" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1D3B5C4CECF; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=OPn+v+8+BveQRdEyioQUgXVoI5BFnHOQMXslK4VQRmM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nX6vCR5Ry8sK/PUt1JzItEvx062H3XhEucp8Rhka53c8x/0JqWIT0p380FeK3XL4E XkAKf1Blro7LrHPrnnqrsfDhhl1VNoesmb0VaT1+Eulwb1QDnrm6Ye3N7GItVRu5// gnJPs2kh2+Oe62QjUNpu6TNn0n0w2HidemsIEhey2Mpwa9pMLuuoMqY7I7uRlF3jL9 Mg6rjW1khLrmC6kvCLrav/WgHdTIq1+ed29jDGlwAmSlw6yytDznnvYYg2e9edFoR2 +WgpkpdjTNYOUBh6Sj36+ZEnb8jQ/1VryyhkN3tIcIpqO0k57OSJpRdrvzA1MBipW0 gczzKdU5vfU8Q== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0l-2CWy; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 06/15] acpi/ghes: Remove a duplicated out of bounds check Date: Tue, 1 Oct 2024 09:03:43 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" acpi_ghes_record_errors() has an assert() at the beginning to ensure that source_id will be lower than ACPI_GHES_ERROR_SOURCE_COUNT. Remove a duplicated check. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Igor Mammedov Reviewed-by: Jonathan Cameron --- hw/acpi/ghes.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 29cd7e4d8171..5f67322bf0f2 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -404,9 +404,7 @@ int acpi_ghes_record_errors(uint8_t source_id, uint64_t= physical_address) return -1; } =20 - if (source_id < ACPI_GHES_ERROR_SOURCE_COUNT) { - start_addr +=3D source_id * sizeof(uint64_t); - } + start_addr +=3D source_id * sizeof(uint64_t); =20 cpu_physical_memory_read(start_addr, &error_block_addr, sizeof(error_block_addr)); --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C1A11BC9FE for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=hd/FBit4G74QFlyxboMvV/xwHdqphCKB7jDw4K4P+n4jskF+oIGGnew/Ld14nIy2GvL5xTHWtOqrHDc8wH2VGmuD7fGzt0fwnKPJhG06GbUWSbO1RxfoGBmDHYDui7pDM4NLpfX1+zzVCA043MSOkNfhTew+HEdOok7V89OWCpo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=EJVWpswAKBYpia55XxrfUeFsgJFUVC4eU7FXqYotZ8s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sOGdboQaqRdNmOLbmhIKgCpQBUWFi84IIMhOZAtjiP8FYI5WKrxkK5t0OH8Lv6z1sCRqoGG6lHc3OPZpVcisqkuGrHrXX0DSWRr+vU/HtLnLH1lacIPWtPIMGkufXjksLbwKZcc80mioHDwHO26zf95PmHAk2PfRk76zwh8IVbI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lbdEIOSH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lbdEIOSH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 25FC0C4CECE; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=EJVWpswAKBYpia55XxrfUeFsgJFUVC4eU7FXqYotZ8s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lbdEIOSHXyxJBttsD0hhLCe1RusKtnmHmQWlTOIgxddLpLsFEsqpcbEpB73I602zd GwP0gijk7IYDGWRLIrvPtxOXCYvZDPAMNOT5XwR6W12DuRxgFatuHZaedPHt2bKpFK jfXRFt8xAFKRysku8opfATzqaocQXoGIXWMOSYIsXob6tXdgmd+JkOWsWiYGJRKin4 lza3R/CGU2XC/+2MdboJbLC9cXS2WJ0LbjTM3FISoMD7i0OCF6t4wttvzh2nKJkwxh ATOmJAN+x8zZh1SCA7t+bkznmQWQe2rnkvDZNbi7VaZNseRG5I3cFxWZyhGUOhP25/ nKpLOxus0fK1A== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0o-2NKo; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 07/15] acpi/ghes: Change the type for source_id Date: Tue, 1 Oct 2024 09:03:44 +0200 Message-ID: <4149830f15bcad19f6e32981754d437493f3aeba.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" HEST source ID is actually a 16-bit value Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Jonathan Cameron --- hw/acpi/ghes-stub.c | 2 +- hw/acpi/ghes.c | 2 +- include/hw/acpi/ghes.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/acpi/ghes-stub.c b/hw/acpi/ghes-stub.c index c315de1802d6..2b64cbd2819a 100644 --- a/hw/acpi/ghes-stub.c +++ b/hw/acpi/ghes-stub.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/acpi/ghes.h" =20 -int acpi_ghes_record_errors(uint8_t source_id, uint64_t physical_address) +int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address) { return -1; } diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 5f67322bf0f2..edc74c38bf8a 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -383,7 +383,7 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgStat= e *s, ags->present =3D true; } =20 -int acpi_ghes_record_errors(uint8_t source_id, uint64_t physical_address) +int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address) { uint64_t error_block_addr, read_ack_register_addr, read_ack_register = =3D 0; uint64_t start_addr; diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 50e3a25ea384..9295e46be25e 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -73,7 +73,7 @@ void acpi_build_hest(GArray *table_data, GArray *hardware= _errors, const char *oem_id, const char *oem_table_id); void acpi_ghes_add_fw_cfg(AcpiGhesState *vms, FWCfgState *s, GArray *hardware_errors); -int acpi_ghes_record_errors(uint8_t source_id, uint64_t error_physical_add= r); +int acpi_ghes_record_errors(uint16_t source_id, uint64_t error_physical_ad= dr); =20 /** * acpi_ghes_present: Report whether ACPI GHES table is present --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 985591BD00A for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=J3p/RxOYS+cJeYXKfbz1gfA3rM3taz6YRqx8du3w/z6Paiw+RzpBLaWIPSaNZ7Z5fTYJHfO3vGPfQiu3deSWArnyh5B90L9gpaAP3QtDyEJ8rN84GKBdflDxZA7Hn971446Q4c989+hS6+sQKHefn0OrsyXNI4MVzHY+DXurzU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=2mlfX2QWqbukd38FKj+LVr/77D7WaOjiB5Yx+metSsc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ouT72pU7zrft0sLn8oWe/O786oXIJtnugf2e1n6TGjsXj0ajnjcOmO35SmDEFjnO7jzMHOFNpkf/MZiRWuWBhOxvOxxwErGI22LQzo05us0a0eHo7nZmtFrk2ND0AzQoOYi4+chVs5T79fQDdq8oQFwrnw2lFDxIvzMTOXSRsrY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f0sSX034; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="f0sSX034" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 21519C4AF09; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=2mlfX2QWqbukd38FKj+LVr/77D7WaOjiB5Yx+metSsc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f0sSX034qrLL6+X0oXhUOtU7ZS1Jm2snNt5VKXyWO9acOOgWXrgngvxGEEn2RiJGI s7XB69tDbYqX6+CTEFtqHf/mEgPZpAVTvpWQcTSuCRkiZBlZno4CSqZ8fYMYeTN/lU U+6CeSOB/9f9ZQKcaeT3WCBZBaeu30855egKNRcUxP0T1yOcd951oKAI+HtsKu/naa yt6JVEgYSS7o6RismuV/OjcD5J37giVjkFrdoUHnNPd1Qn5xNXxeFVsDwZtcsTJ9Yk naAdTcYR/lEqnRZgkBE6VOxG+Rs2fOK8BZ2LAL11dbCR0X7xqGbZMOVXKdsuDoyqhE lGCdnWiznHm+w== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0t-2Yvu; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , Peter Maydell , Shannon Zhao , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 08/15] acpi/ghes: Prepare to support multiple sources on ghes Date: Tue, 1 Oct 2024 09:03:45 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" The current code is actually dependent on having just one error structure with a single source. As the number of sources should be arch-dependent, as it will depend on what kind of synchronous/assynchronous notifications will exist, change the logic to dynamically build the table. Yet, for a proper support, we need to get the number of sources by reading the number from the HEST table. However, bios currently doesn't store a pointer to it. For now just change the logic at table build time, while enforcing that it will behave like before with a single source ID. A future patch will add a HEST table bios pointer and change the logic at acpi_ghes_record_errors() to dynamically use the new size. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Jonathan Cameron --- hw/acpi/ghes.c | 65 ++++++++++++++++++++++++---------------- hw/arm/virt-acpi-build.c | 5 ++++ include/hw/acpi/ghes.h | 21 ++++++++----- 3 files changed, 59 insertions(+), 32 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index edc74c38bf8a..f3d0283beb3b 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -233,17 +233,26 @@ static int acpi_ghes_record_mem_error(uint64_t error_= block_address, * Initialize "etc/hardware_errors" and "etc/hardware_errors_addr" fw_cfg = blobs. * See docs/specs/acpi_hest_ghes.rst for blobs format. */ -static void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *li= nker) +static void build_ghes_error_table(GArray *hardware_errors, BIOSLinker *li= nker, + int num_sources) { int i, error_status_block_offset; =20 + /* + * TODO: Current version supports only one source. + * A further patch will drop this check, after adding a proper migrati= on + * code, as, for the code to work, we need to store a bios pointer to = the + * HEST table. + */ + assert(num_sources =3D=3D 1); + /* Build error_block_address */ - for (i =3D 0; i < ACPI_GHES_ERROR_SOURCE_COUNT; i++) { + for (i =3D 0; i < num_sources; i++) { build_append_int_noprefix(hardware_errors, 0, sizeof(uint64_t)); } =20 /* Build read_ack_register */ - for (i =3D 0; i < ACPI_GHES_ERROR_SOURCE_COUNT; i++) { + for (i =3D 0; i < num_sources; i++) { /* * Initialize the value of read_ack_register to 1, so GHES can be * writable after (re)boot. @@ -258,13 +267,13 @@ static void build_ghes_error_table(GArray *hardware_e= rrors, BIOSLinker *linker) =20 /* Reserve space for Error Status Data Block */ acpi_data_push(hardware_errors, - ACPI_GHES_MAX_RAW_DATA_LENGTH * ACPI_GHES_ERROR_SOURCE_COUNT); + ACPI_GHES_MAX_RAW_DATA_LENGTH * num_sources); =20 /* Tell guest firmware to place hardware_errors blob into RAM */ bios_linker_loader_alloc(linker, ACPI_GHES_ERRORS_FW_CFG_FILE, hardware_errors, sizeof(uint64_t), false); =20 - for (i =3D 0; i < ACPI_GHES_ERROR_SOURCE_COUNT; i++) { + for (i =3D 0; i < num_sources; i++) { /* * Tell firmware to patch error_block_address entries to point to * corresponding "Generic Error Status Block" @@ -286,10 +295,12 @@ static void build_ghes_error_table(GArray *hardware_e= rrors, BIOSLinker *linker) /* Build Generic Hardware Error Source version 2 (GHESv2) */ static void build_ghes_v2(GArray *table_data, BIOSLinker *linker, - enum AcpiGhesNotifyType notify, - uint16_t source_id) + const AcpiNotificationSourceId *notif_src, + uint16_t index, int num_sources) { uint64_t address_offset; + const uint16_t notify =3D notif_src->notify; + const uint16_t source_id =3D notif_src->source_id; =20 /* * Type: @@ -318,7 +329,7 @@ static void build_ghes_v2(GArray *table_data, 4 /* QWord access */, 0); bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, address_offset + GAS_ADDR_OFFSET, sizeof(uint64_t), - ACPI_GHES_ERRORS_FW_CFG_FILE, source_id * sizeof(uint64_t)); + ACPI_GHES_ERRORS_FW_CFG_FILE, index * sizeof(uint64_t)); =20 /* Notification Structure */ build_ghes_hw_error_notification(table_data, notify); @@ -335,9 +346,10 @@ static void build_ghes_v2(GArray *table_data, build_append_gas(table_data, AML_AS_SYSTEM_MEMORY, 0x40, 0, 4 /* QWord access */, 0); bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, - address_offset + GAS_ADDR_OFFSET, - sizeof(uint64_t), ACPI_GHES_ERRORS_FW_CFG_FILE, - (ACPI_GHES_ERROR_SOURCE_COUNT + source_id) * sizeof(uint64_t)); + address_offset + GAS_ADDR_OFFSET, + sizeof(uint64_t), + ACPI_GHES_ERRORS_FW_CFG_FILE, + (num_sources + index) * sizeof(uint64_t= )); =20 /* * Read Ack Preserve field @@ -352,19 +364,23 @@ static void build_ghes_v2(GArray *table_data, /* Build Hardware Error Source Table */ void acpi_build_hest(GArray *table_data, GArray *hardware_errors, BIOSLinker *linker, + const AcpiNotificationSourceId * const notif_source, + int num_sources, const char *oem_id, const char *oem_table_id) { AcpiTable table =3D { .sig =3D "HEST", .rev =3D 1, .oem_id =3D oem_id, .oem_table_id =3D oem_table_id= }; + int i; =20 - build_ghes_error_table(hardware_errors, linker); + build_ghes_error_table(hardware_errors, linker, num_sources); =20 acpi_table_begin(&table, table_data); =20 /* Error Source Count */ - build_append_int_noprefix(table_data, ACPI_GHES_ERROR_SOURCE_COUNT, 4); - build_ghes_v2(table_data, linker, - ACPI_GHES_NOTIFY_SEA, ACPI_HEST_SRC_ID_SEA); + build_append_int_noprefix(table_data, num_sources, 4); + for (i =3D 0; i < num_sources; i++) { + build_ghes_v2(table_data, linker, ¬if_source[i], i, num_sources= ); + } =20 acpi_table_end(linker, &table); } @@ -391,28 +407,27 @@ int acpi_ghes_record_errors(uint16_t source_id, uint6= 4_t physical_address) AcpiGedState *acpi_ged_state; AcpiGhesState *ags; =20 - assert(source_id < ACPI_GHES_ERROR_SOURCE_COUNT); - acpi_ged_state =3D ACPI_GED(object_resolve_path_type("", TYPE_ACPI_GED, NULL)); g_assert(acpi_ged_state); ags =3D &acpi_ged_state->ghes_state; =20 + /* + * Current version supports only one source, as assured during table b= uild, + * so no need to change the start offset based on the source ID. + */ start_addr =3D le64_to_cpu(ags->ghes_addr_le); =20 - if (!physical_address) { - return -1; - } - - start_addr +=3D source_id * sizeof(uint64_t); - cpu_physical_memory_read(start_addr, &error_block_addr, sizeof(error_block_addr)); =20 error_block_addr =3D le64_to_cpu(error_block_addr); =20 - read_ack_register_addr =3D start_addr + - ACPI_GHES_ERROR_SOURCE_COUNT * sizeof(uint64_= t); + /* + * As the current version supports only one source, the ack offset is + * just sizeof(uint64_t). + */ + read_ack_register_addr =3D start_addr + sizeof(uint64_t); =20 cpu_physical_memory_read(read_ack_register_addr, &read_ack_register, sizeof(read_ack_register)= ); diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index bafd9a56c217..476c365851c4 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -890,6 +890,10 @@ static void acpi_align_size(GArray *blob, unsigned ali= gn) g_array_set_size(blob, ROUND_UP(acpi_data_len(blob), align)); } =20 +static const AcpiNotificationSourceId hest_ghes_notify[] =3D { + {ACPI_HEST_SRC_ID_SYNC, ACPI_GHES_NOTIFY_SEA}, +}; + static void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables) { @@ -945,6 +949,7 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTa= bles *tables) if (vms->ras) { acpi_add_table(table_offsets, tables_blob); acpi_build_hest(tables_blob, tables->hardware_errors, tables->link= er, + hest_ghes_notify, ARRAY_SIZE(hest_ghes_notify), vms->oem_id, vms->oem_table_id); } =20 diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 9295e46be25e..d6e2801d9cd9 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -56,20 +56,27 @@ enum AcpiGhesNotifyType { ACPI_GHES_NOTIFY_RESERVED =3D 12 }; =20 -enum { - ACPI_HEST_SRC_ID_SEA =3D 0, - /* future ids go here */ - - ACPI_GHES_ERROR_SOURCE_COUNT -}; - typedef struct AcpiGhesState { uint64_t ghes_addr_le; bool present; /* True if GHES is present at all on this board */ } AcpiGhesState; =20 +/* + * ID numbers used to fill HEST source ID field + */ +enum AcpiGhesSourceID { + ACPI_HEST_SRC_ID_SYNC, +}; + +typedef struct AcpiNotificationSourceId { + enum AcpiGhesSourceID source_id; + enum AcpiGhesNotifyType notify; +} AcpiNotificationSourceId; + void acpi_build_hest(GArray *table_data, GArray *hardware_errors, BIOSLinker *linker, + const AcpiNotificationSourceId * const notif_source, + int num_sources, const char *oem_id, const char *oem_table_id); void acpi_ghes_add_fw_cfg(AcpiGhesState *vms, FWCfgState *s, GArray *hardware_errors); --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD7601BD016 for ; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; cv=none; b=tb2G/tjxy5x/Fr+p7H29xh5JYfRfdFMFP0yxVhgU8zI1FQJUVJEbkg3wAczVWu79w3VbubLqoFC4AJiiU+TF+/vpjheINrVAbPtVVHODOxmLkuBumgujaP1FMTfKsf9zbVEFbv4qAUjUExBO8gCWqDLUIf8Gxuc/YjuZc2rmhIw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766251; c=relaxed/simple; bh=QHt+gnqTpaphyai7kv9uVY59Gc4Uxgng4YQ1h6SRinc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=evvKPyGiOk1Qf4ErvTNO4Y6jaouSwZDjcMNqTDVT8PiDfe8KTMI98KwjggykOsIsCVl5i2Gdgo6BuNywMpsORBNwXrsz6Zh6pUbJCphY8BgTZ6/rIzIasJkdy3gbvYcez163h1oNfl+vN0ri335pUu4AW9BrKbTJHOXAMf5H9i0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OlyljGVV; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OlyljGVV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 33966C4CED7; Tue, 1 Oct 2024 07:04:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766251; bh=QHt+gnqTpaphyai7kv9uVY59Gc4Uxgng4YQ1h6SRinc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OlyljGVVI6jn2Mp5gIk//Yg84Uz56cGRnWrrI1MrYlQIFmCeZ7fyS6qkzK7qlzihz AMk9W6BRNufY35TlXfzlXo+BkVi0zUSXGJhgmfG1Yeyp5WGzqy0KGgClOiSXk/rwdF WixtTEAqWIWg4ljCRakJT7bFOVtFaUgoDWENPRPW1beF51MUaSdXbYE5ckzSYn5vHF R5wFml3tDpEP3epBSyEEzAKjLupd/9G6t1W9WVreZhay4CKlUiqLpGGTYqHjFsHLT4 9q3H1S0quZRl2y1U9zPsU3JwwQyUf+1ThqyWANxnL637xIZldFjomoQDvhnEquCPNw jAjJIRkpZQCvg== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V0x-2ja7; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 09/15] acpi/ghes: make the GHES record generation more generic Date: Tue, 1 Oct 2024 09:03:46 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" Split the code into separate functions to allow using the common CPER filling code by different error sources. The generic code was moved to ghes_record_cper_errors(), and ghes_gen_err_data_uncorrectable_recoverable() now contains only a logic to fill GEGB part of the record. The remaining code to generate a memory error now belongs to acpi_ghes_record_errors() function. A further patch will give it a better name. Signed-off-by: Mauro Carvalho Chehab --- hw/acpi/ghes.c | 118 +++++++++++++++++++++++++---------------- include/hw/acpi/ghes.h | 3 ++ 2 files changed, 74 insertions(+), 47 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index f3d0283beb3b..628fa9b22f4b 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -181,51 +181,30 @@ static void acpi_ghes_build_append_mem_cper(GArray *t= able, build_append_int_noprefix(table, 0, 7); } =20 -static int acpi_ghes_record_mem_error(uint64_t error_block_address, - uint64_t error_physical_addr) +static void +ghes_gen_err_data_uncorrectable_recoverable(GArray *block, + const uint8_t *section_type, + int data_length) { - GArray *block; - - /* Memory Error Section Type */ - const uint8_t uefi_cper_mem_sec[] =3D - UUID_LE(0xA5BC1114, 0x6F64, 0x4EDE, 0xB8, 0x63, 0x3E, 0x83, \ - 0xED, 0x7C, 0x83, 0xB1); - /* invalid fru id: ACPI 4.0: 17.3.2.6.1 Generic Error Data, * Table 17-13 Generic Error Data Entry */ QemuUUID fru_id =3D {}; - uint32_t data_length; =20 - block =3D g_array_new(false, true /* clear */, 1); - - /* This is the length if adding a new generic error data entry*/ - data_length =3D ACPI_GHES_DATA_LENGTH + ACPI_GHES_MEM_CPER_LENGTH; /* - * It should not run out of the preallocated memory if adding a new ge= neric - * error data entry + * Calculate the size with this block. No need to check for + * too big CPER, as CPER size is checked at ghes_record_cper_errors() */ - assert((data_length + ACPI_GHES_GESB_SIZE) <=3D - ACPI_GHES_MAX_RAW_DATA_LENGTH); + data_length +=3D ACPI_GHES_GESB_SIZE; =20 /* Build the new generic error status block header */ acpi_ghes_generic_error_status(block, ACPI_GEBS_UNCORRECTABLE, 0, 0, data_length, ACPI_CPER_SEV_RECOVERABLE); =20 /* Build this new generic error data entry header */ - acpi_ghes_generic_error_data(block, uefi_cper_mem_sec, + acpi_ghes_generic_error_data(block, section_type, ACPI_CPER_SEV_RECOVERABLE, 0, 0, ACPI_GHES_MEM_CPER_LENGTH, fru_id, 0); - - /* Build the memory section CPER for above new generic error data entr= y */ - acpi_ghes_build_append_mem_cper(block, error_physical_addr); - - /* Write the generic error data entry into guest memory */ - cpu_physical_memory_write(error_block_address, block->data, block->len= ); - - g_array_free(block, true); - - return 0; } =20 /* @@ -399,14 +378,19 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgSt= ate *s, ags->present =3D true; } =20 -int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address) +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 = =3D 0; uint64_t start_addr; - bool ret =3D -1; AcpiGedState *acpi_ged_state; AcpiGhesState *ags; =20 + if (len > ACPI_GHES_MAX_RAW_DATA_LENGTH) { + error_setg(errp, "GHES CPER record is too big: %ld", len); + return; + } + acpi_ged_state =3D ACPI_GED(object_resolve_path_type("", TYPE_ACPI_GED, NULL)); g_assert(acpi_ged_state); @@ -422,6 +406,10 @@ int acpi_ghes_record_errors(uint16_t source_id, uint64= _t physical_address) sizeof(error_block_addr)); =20 error_block_addr =3D le64_to_cpu(error_block_addr); + if (!error_block_addr) { + error_setg(errp, "can not find Generic Error Status Block"); + return; + } =20 /* * As the current version supports only one source, the ack offset is @@ -434,24 +422,60 @@ int acpi_ghes_record_errors(uint16_t source_id, uint6= 4_t physical_address) =20 /* zero means OSPM does not acknowledge the error */ if (!read_ack_register) { - error_report("OSPM does not acknowledge previous error," - " so can not record CPER for current error anymore"); - } else if (error_block_addr) { - read_ack_register =3D cpu_to_le64(0); - /* - * Clear the Read Ack Register, OSPM will write it to 1 when - * it acknowledges this error. - */ - cpu_physical_memory_write(read_ack_register_addr, - &read_ack_register, sizeof(uint64_t)); - - ret =3D acpi_ghes_record_mem_error(error_block_addr, - physical_address); - } else { - error_report("can not find Generic Error Status Block"); + error_setg(errp, + "OSPM does not acknowledge previous error," + " so can not record CPER for current error anymore"); + return; } =20 - return ret; + read_ack_register =3D cpu_to_le64(0); + /* + * Clear the Read Ack Register, OSPM will write it to 1 when + * it acknowledges this error. + */ + cpu_physical_memory_write(read_ack_register_addr, + &read_ack_register, sizeof(uint64_t)); + + /* Write the generic error data entry into guest memory */ + cpu_physical_memory_write(error_block_addr, cper, len); + + return; +} + +int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address) +{ + /* Memory Error Section Type */ + const uint8_t guid[] =3D + UUID_LE(0xA5BC1114, 0x6F64, 0x4EDE, 0xB8, 0x63, 0x3E, 0x83, \ + 0xED, 0x7C, 0x83, 0xB1); + Error *errp =3D NULL; + GArray *block; + + if (!physical_address) { + error_report("can not find Generic Error Status Block for source i= d %d", + source_id); + return -1; + } + + block =3D g_array_new(false, true /* clear */, 1); + + ghes_gen_err_data_uncorrectable_recoverable(block, guid, + ACPI_GHES_MAX_RAW_DATA_LEN= GTH); + + /* Build the memory section CPER for above new generic error data entr= y */ + acpi_ghes_build_append_mem_cper(block, physical_address); + + /* Report the error */ + ghes_record_cper_errors(block->data, block->len, source_id, &errp); + + g_array_free(block, true); + + if (errp) { + error_report_err(errp); + return -1; + } + + return 0; } =20 bool acpi_ghes_present(void) diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index d6e2801d9cd9..1b988ac1e2f2 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -23,6 +23,7 @@ #define ACPI_GHES_H =20 #include "hw/acpi/bios-linker-loader.h" +#include "qapi/error.h" =20 /* * Values for Hardware Error Notification Type field @@ -80,6 +81,8 @@ void acpi_build_hest(GArray *table_data, GArray *hardware= _errors, const char *oem_id, const char *oem_table_id); void acpi_ghes_add_fw_cfg(AcpiGhesState *vms, FWCfgState *s, GArray *hardware_errors); +void ghes_record_cper_errors(const void *cper, size_t len, + uint16_t source_id, Error **errp); int acpi_ghes_record_errors(uint16_t source_id, uint64_t error_physical_ad= dr); =20 /** --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 760F71BD50B for ; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; cv=none; b=FZD/sTuwisd6gob8zu/5ksIucHW/2Plz2V84NWL8TZonYDhhmTxl4IrB4VSgjoZFhaRF5r/FwPAMQrJwid7bvoBDYw6P0si5jYiuHI2+9khPSC4SuVa6shF0smUhIzUzBWCrdnDaQics8fYyB0MolodGMzZci4AgnrhpXa9Xogg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; c=relaxed/simple; bh=+WtTbHUT4iomth9t7xJ9WDT5mR2fPZd0bO/qGgVR9tM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i641pcZB7ieIyicmjhnBWxtkC6TeNsgYEgjfpUn39TpHS7n5y6IRIKfhhB8q4d37ppnh1ybFAvUNNg3Jl9F3BiV0YL/F8mJqkGhJ/lq9OJCP8pA7JEFnq10h1B6YtQW8T/Phtg0lrWx7yfTihY7Z1VH+awn60sbOxu3B9qiXgKk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HgmzsIvm; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HgmzsIvm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C1BFC4CEDA; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766252; bh=+WtTbHUT4iomth9t7xJ9WDT5mR2fPZd0bO/qGgVR9tM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HgmzsIvm5QyXVzHLRaeBRKGpkQJrMe/MLnxCciIFIsBApB3e3K7ZHsbmocw3fuanZ etV4wAB0vARrPBdx+eMRIDhivDKJmw76U0c1+qZ3dkpIhqhKZ0yvNW6/UENFUBszb5 NeNobPOuTFA9uQMoCMJEIz2EvuO2g2CzlbHScQ6mqT4uwBMchJxP+DzdZ8HX4VDtkY f/lXr10EJJRtuWg1GXhE45SAgRJ7QSRCvvIt6B4MTQ5f3KoTZU9SnH8nY7kYJ2GqXK Ftuo09HWmVwcy4ryIIIgyXBFIya3rl4BQI2LeCqUS6fOP3G/5kkp+ur3LoynoJ3gzh rJeKufAR9GLVQ== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V10-2ucP; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 10/15] acpi/ghes: move offset calculus to a separate function Date: Tue, 1 Oct 2024 09:03:47 +0200 Message-ID: <84226f5976fd29e23ce47d3a5cd311821c8111f8.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Jonathan Cameron --- hw/acpi/ghes.c | 50 +++++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 628fa9b22f4b..900f1571bc97 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -378,11 +378,36 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgSt= ate *s, ags->present =3D true; } =20 +static void get_ghes_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 =3D 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 =3D ghes_addr + 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 = =3D 0; - uint64_t start_addr; + uint64_t cper_addr =3D 0, read_ack_register_addr =3D 0, read_ack_regis= ter; AcpiGedState *acpi_ged_state; AcpiGhesState *ags; =20 @@ -396,27 +421,14 @@ void ghes_record_cper_errors(const void *cper, size_t= len, g_assert(acpi_ged_state); ags =3D &acpi_ged_state->ghes_state; =20 - /* - * Current version supports only one source, as assured during table b= uild, - * so no need to change the start offset based on the source ID. - */ - start_addr =3D le64_to_cpu(ags->ghes_addr_le); + get_ghes_offsets(le64_to_cpu(ags->ghes_addr_le), + &cper_addr, &read_ack_register_addr); =20 - cpu_physical_memory_read(start_addr, &error_block_addr, - sizeof(error_block_addr)); - - error_block_addr =3D le64_to_cpu(error_block_addr); - if (!error_block_addr) { + if (!cper_addr) { error_setg(errp, "can not find Generic Error Status Block"); return; } =20 - /* - * As the current version supports only one source, the ack offset is - * just sizeof(uint64_t). - */ - read_ack_register_addr =3D start_addr + sizeof(uint64_t); - cpu_physical_memory_read(read_ack_register_addr, &read_ack_register, sizeof(read_ack_register)= ); =20 @@ -437,7 +449,7 @@ void ghes_record_cper_errors(const void *cper, size_t l= en, &read_ack_register, sizeof(uint64_t)); =20 /* 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); =20 return; } --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CA4B1BD515; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; cv=none; b=ErcDIFIqGj+CZYr+/I7qSa3jx6hLwf/0D3ACzF3r24VCxaFhxI0+ZvA+dy9TdUeZGQWxK/Xtx8sFjgfnECXTOzF3mSModF5gEfZo3Uw2tCejVJvtVHDhjU1g1ZkZhWIDY/90+VWRjivE9zWg8jTLsuOr/mzxrVNmP8AJpsdkNQQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; c=relaxed/simple; bh=M6ZBH/kqF0I5mZJYxAtLu/jJCCwPXj3PnNDutmx6SRo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z2EXCIXJteiicEryPYtUIQ9cAVtyyfB5++lluj7KbjXtOfEed+w8Fvbs3MNjdBnUWfb2/LVOPJ3esr15PH49KE0IVYLAOPiF/bQrRCiOrEFYtdUzZ9vMhAAqrG89RqukC+AKd2t4BJtG86rWgBI8G8jxoiN37thZvNuZ3X9lw/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KF5f9aH4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KF5f9aH4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 11CB1C4CED3; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766252; bh=M6ZBH/kqF0I5mZJYxAtLu/jJCCwPXj3PnNDutmx6SRo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KF5f9aH4x/x8ZFxJRpIU2jA5yp6UXpuMUBPPB9risIqFeWW4yhtVO4vr/PuovIbtu uPkwK5MJ9/oZiUMAR7aKZkSWGnHNCeR76/8Q2RDd2sompVD4Ook2G1HSGQCAOVdqfW VV3RAy2luPcRuMOhnwMjOkTis6lQsIMoU4m/ZJ6lb9/VaTIkKx7tYgHYeEaGarRYEP 6ii4CEwAZP+UKLno467xyTYpB0HJ7NJJkgR1sE89oWok/fJ0hR0bYtPKjbThSV/Sb+ 38aCfFhoDnXw+FE7nTU1eqP39irxA7pZIfN/X+W33ASF3XHDL/lZI5RbJl8pCRkys5 V0Eul1Aqg8b3A== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V15-363P; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , Paolo Bonzini , Peter Maydell , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 11/15] acpi/ghes: better name GHES memory error function Date: Tue, 1 Oct 2024 09:03:48 +0200 Message-ID: <27549d393ac4194dc321305d12d557ba3bc976cf.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" The current function used to generate GHES data is specific for memory errors. Give a better name for it, as we now have a generic function as well. Reviewed-by: Igor Mammedov Signed-off-by: Mauro Carvalho Chehab --- hw/acpi/ghes-stub.c | 2 +- hw/acpi/ghes.c | 2 +- include/hw/acpi/ghes.h | 5 +++-- target/arm/kvm.c | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hw/acpi/ghes-stub.c b/hw/acpi/ghes-stub.c index 2b64cbd2819a..7cec1812dad9 100644 --- a/hw/acpi/ghes-stub.c +++ b/hw/acpi/ghes-stub.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/acpi/ghes.h" =20 -int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address) +int acpi_ghes_memory_errors(uint16_t source_id, uint64_t physical_address) { return -1; } diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 900f1571bc97..3af1cd16d4d7 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -454,7 +454,7 @@ void ghes_record_cper_errors(const void *cper, size_t l= en, return; } =20 -int acpi_ghes_record_errors(uint16_t source_id, uint64_t physical_address) +int acpi_ghes_memory_errors(uint16_t source_id, uint64_t physical_address) { /* Memory Error Section Type */ const uint8_t guid[] =3D diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 1b988ac1e2f2..051a9322141f 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -81,15 +81,16 @@ void acpi_build_hest(GArray *table_data, GArray *hardwa= re_errors, const char *oem_id, const char *oem_table_id); void acpi_ghes_add_fw_cfg(AcpiGhesState *vms, FWCfgState *s, GArray *hardware_errors); +int acpi_ghes_memory_errors(uint16_t source_id, + uint64_t error_physical_addr); void ghes_record_cper_errors(const void *cper, size_t len, uint16_t source_id, Error **errp); -int acpi_ghes_record_errors(uint16_t source_id, uint64_t error_physical_ad= dr); =20 /** * 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. + * safe to call acpi_ghes_memory_errors() to record a memory error. */ bool acpi_ghes_present(void); #endif diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 849e2e21b304..63419b87e8c6 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2373,7 +2373,8 @@ void kvm_arch_on_sigbus_vcpu(CPUState *c, int code, v= oid *addr) */ if (code =3D=3D BUS_MCEERR_AR) { kvm_cpu_synchronize_state(c); - if (!acpi_ghes_record_errors(ACPI_HEST_SRC_ID_SEA, paddr))= { + if (!acpi_ghes_memory_errors(ACPI_HEST_SRC_ID_SEA, + paddr)) { kvm_inject_arm_sea(c); } else { error_report("failed to record the error"); --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 761481BD50C for ; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; cv=none; b=ntKSpRNf+4UpIezrHaEJ9Lkquy97CmZPa9+vsey8i/SkcDHym75/tjFVNC7qhPPgFfxHFIBdduz0uDcy9/9kI2ox23JrA5uNAXbMfh1qXmOCHRLC+KHLHnsQlYB2pko5VbTxONeX7GEgyZjPia0z1mu9X9yqE0uZKONux865Svo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; c=relaxed/simple; bh=sRsbSliw/+ZXQ/ZQ+dhrxx2M70UfTSUIKGoJ5MP3coc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gGKOZ+rIXF+vrkm/3MJ/e+mVBabSG5IGdssmkBzEUYImPB2P3+4Mk5kmgctS6BXN+t+lGtxnHjijAMZMbwqZgRuXGtCtMe7ZlZWGr6NkNZ3loUM6Oi+cpPP782GHGDnMpbtTMPCL6D1KrzIoOgVQW1GLOhcLeTDGUdtnaP0RJDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LwvHTe6s; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LwvHTe6s" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0606BC4CED2; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766252; bh=sRsbSliw/+ZXQ/ZQ+dhrxx2M70UfTSUIKGoJ5MP3coc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LwvHTe6s+Vq2Bv/Ow3XuXGR2JU7N7lNKsHZj32WvdnHbN+H1IoS4hiExkhqBc9ruy 3kGaNbcdy89SUVAP18D9CxArlAhVD71sKgdiHBJa+hSXS6VDGZM4qswrOjal6j1ZC4 OJ6KKrTTsLIIsObtOOgXQIH+fB+SE4oySlWyc+t3ZWpnlVD3VUQGy9usvLqSEnYOIZ MQr4bkcYrXtINiHwhnsdaYm+wmcadeIzTP/16G/rfYbpKQ8f+M8kD4hKSv4azh5+MD KiuvQkPtOoXP3UBWUVBi8Y+Nme8/KeKjPUmUPNRIEosodOZF2v0R4mxLP/JksyYQtC 9j1M9/vZSpwhg== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V19-3Khk; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 12/15] acpi/ghes: don't crash QEMU if ghes GED is not found Date: Tue, 1 Oct 2024 09:03:49 +0200 Message-ID: <18c69e8c7a6b6ac365397fe1f442f3ba0cb83be8.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" Instead, produce an error and continue working Signed-off-by: Mauro Carvalho Chehab --- hw/acpi/ghes.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 3af1cd16d4d7..209095f67e9a 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -418,7 +418,10 @@ void ghes_record_cper_errors(const void *cper, size_t = len, =20 acpi_ged_state =3D ACPI_GED(object_resolve_path_type("", TYPE_ACPI_GED, NULL)); - g_assert(acpi_ged_state); + if (!acpi_ged_state) { + error_setg(errp, "Can't find ACPI_GED object"); + return; + } ags =3D &acpi_ged_state->ghes_state; =20 get_ghes_offsets(le64_to_cpu(ags->ghes_addr_le), --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C9831BD513 for ; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; cv=none; b=rIFnPOHVDYP5xjYHTG3ZcbUHpxoIyFWsxudKGdcaJrM/UXdSulZwCMFKtcnLgAAZ7M3yYYOXjXF82POR9Wdd0GEOtuzCxw2NUXcfsG27+uECS6RNycUJt/vIXTUoacp1bOFzGPcZzlwICOvY7TlEMmBf4Ee1ZzLTVvu2p0aqH3A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; c=relaxed/simple; bh=fHSTsxvv+Z8LEvHFkd2qCjHK4sGGxcTrsy7twT1DclM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bi8vMIelSwPed1NxPr6Pq+EVx/qpYwlx76PcYJI8h3aK9j3Itxb0PlK4Y2NnoWpi1+fSEeth2VLGy7V7kgz8e5m9/4aH1/xBOaN5W/I38nf7ATSzzfU7uHknNsGIpJ36V4XUVTJW9Y64tJBMb+KsSS+M32v8mQYjLlOON1/XfhU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OvffvA+i; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OvffvA+i" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26DB5C4CED4; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766252; bh=fHSTsxvv+Z8LEvHFkd2qCjHK4sGGxcTrsy7twT1DclM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OvffvA+iC3CfKOZlsm183Hr95S5GhTjwZdmTfUbCF+N5b9d5jjG8dbcFPHyQjWZAV C8g1eK38EmmrBHD+1ehIbFumRue3GSl9LuJv064G6zX6uwjzCOXgMie2R+ZdBzZmUK 0WatXfCC+IIKVVuC/R4NP5egSj20BBghKmRJ+xKS4I9bGL/tUS3Y+pRA+ubyPyzDJz vfQf+tkCvuUPkrdAvsGdQ3tRFRaOmbyTgRpQUNoPhi138iJRYWWr7roC+kdPBZV1KT zc8CsTQDn9OCjIg8NxY3xJp0J9tQIv8x60Ajr4cL5JQ2xwHLN5VEiIYtuJo19+jZvY S8emzuQU3PBMQ== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V1D-3XWI; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 13/15] acpi/ghes: rename etc/hardware_error file macros Date: Tue, 1 Oct 2024 09:03:50 +0200 Message-ID: <88813bed95714ba8cef6168ffef12c8af2a55be4.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" Now that we have also have a file to store HEST data location, which is part of GHES, better name the file where CPER records are stored. No functional changes. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Igor Mammedov Reviewed-by: Jonathan Cameron --- hw/acpi/ghes.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 209095f67e9a..3d03506fdaf8 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -28,8 +28,8 @@ #include "hw/nvram/fw_cfg.h" #include "qemu/uuid.h" =20 -#define ACPI_GHES_ERRORS_FW_CFG_FILE "etc/hardware_errors" -#define ACPI_GHES_DATA_ADDR_FW_CFG_FILE "etc/hardware_errors_addr" +#define ACPI_HW_ERROR_FW_CFG_FILE "etc/hardware_errors" +#define ACPI_HW_ERROR_ADDR_FW_CFG_FILE "etc/hardware_errors_addr" =20 /* The max size in bytes for one error block */ #define ACPI_GHES_MAX_RAW_DATA_LENGTH (1 * KiB) @@ -249,7 +249,7 @@ static void build_ghes_error_table(GArray *hardware_err= ors, BIOSLinker *linker, ACPI_GHES_MAX_RAW_DATA_LENGTH * num_sources); =20 /* Tell guest firmware to place hardware_errors blob into RAM */ - bios_linker_loader_alloc(linker, ACPI_GHES_ERRORS_FW_CFG_FILE, + bios_linker_loader_alloc(linker, ACPI_HW_ERROR_FW_CFG_FILE, hardware_errors, sizeof(uint64_t), false); =20 for (i =3D 0; i < num_sources; i++) { @@ -258,17 +258,21 @@ static void build_ghes_error_table(GArray *hardware_e= rrors, BIOSLinker *linker, * corresponding "Generic Error Status Block" */ bios_linker_loader_add_pointer(linker, - ACPI_GHES_ERRORS_FW_CFG_FILE, sizeof(uint64_t) * i, - sizeof(uint64_t), ACPI_GHES_ERRORS_FW_CFG_FILE, - error_status_block_offset + i * ACPI_GHES_MAX_RAW_DATA_LENGTH); + ACPI_HW_ERROR_FW_CFG_FILE, + sizeof(uint64_t) * i, + sizeof(uint64_t), + ACPI_HW_ERROR_FW_CFG_FILE, + error_status_block_offset + + i * ACPI_GHES_MAX_RAW_DATA_LENGTH); } =20 /* * tell firmware to write hardware_errors GPA into * hardware_errors_addr fw_cfg, once the former has been initialized. */ - bios_linker_loader_write_pointer(linker, ACPI_GHES_DATA_ADDR_FW_CFG_FI= LE, - 0, sizeof(uint64_t), ACPI_GHES_ERRORS_FW_CFG_FILE, 0); + bios_linker_loader_write_pointer(linker, ACPI_HW_ERROR_ADDR_FW_CFG_FIL= E, 0, + sizeof(uint64_t), + ACPI_HW_ERROR_FW_CFG_FILE, 0); } =20 /* Build Generic Hardware Error Source version 2 (GHESv2) */ @@ -307,8 +311,10 @@ static void build_ghes_v2(GArray *table_data, build_append_gas(table_data, AML_AS_SYSTEM_MEMORY, 0x40, 0, 4 /* QWord access */, 0); bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, - address_offset + GAS_ADDR_OFFSET, sizeof(uint64_t), - ACPI_GHES_ERRORS_FW_CFG_FILE, index * sizeof(uint64_t)); + address_offset + GAS_ADDR_OFFSET, + sizeof(uint64_t), + ACPI_HW_ERROR_FW_CFG_FILE, + index * sizeof(uint64_t)); =20 /* Notification Structure */ build_ghes_hw_error_notification(table_data, notify); @@ -327,7 +333,7 @@ static void build_ghes_v2(GArray *table_data, bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, address_offset + GAS_ADDR_OFFSET, sizeof(uint64_t), - ACPI_GHES_ERRORS_FW_CFG_FILE, + ACPI_HW_ERROR_FW_CFG_FILE, (num_sources + index) * sizeof(uint64_t= )); =20 /* @@ -368,11 +374,11 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgSt= ate *s, GArray *hardware_error) { /* Create a read-only fw_cfg file for GHES */ - fw_cfg_add_file(s, ACPI_GHES_ERRORS_FW_CFG_FILE, hardware_error->data, + fw_cfg_add_file(s, ACPI_HW_ERROR_FW_CFG_FILE, hardware_error->data, hardware_error->len); =20 /* Create a read-write fw_cfg file for Address */ - fw_cfg_add_file_callback(s, ACPI_GHES_DATA_ADDR_FW_CFG_FILE, NULL, NUL= L, + fw_cfg_add_file_callback(s, ACPI_HW_ERROR_ADDR_FW_CFG_FILE, NULL, NULL, NULL, &(ags->ghes_addr_le), sizeof(ags->ghes_addr_le), false); =20 ags->present =3D true; --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C9D41BD514 for ; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; cv=none; b=NxgCnJjJGY2GtWtS5BZfUMUMWfqndhYrRG8g6ECkY0jIZPSYCENpt2Tzp0W5Ud08DPxb2+BmSgbAZSf+w1KKCFy2E3DGI2T7JmQNdi+GV4Li6e/9vAOVVxcVptjbBUK5R8cV+dk2BhEhF60pZfEBmFK6z8OLQy/S9HRHfMbIDCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; c=relaxed/simple; bh=R6b9iFm+J5ePDJRMa4bxU4gGLlv0rrR7/FbDw9oeAsU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tcKuqwBMWRhkPGY1pf6p3VLZQ47a/Uf5mSzR/fl59JhIIjM8vgkJUjJ/anuw2KNyHYQ47gjVwtvwJb8oZLAohfEUMOz5DayJOCUmc+Ix1XYTHx8TT+4Irji1KeVjEw4GsWHqyD0RRgZE1CuuCMhZzffZF37Ocmx4BVIc0mfnc8Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EX1PUIHs; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EX1PUIHs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48D2AC4CED9; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766252; bh=R6b9iFm+J5ePDJRMa4bxU4gGLlv0rrR7/FbDw9oeAsU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EX1PUIHs8Wj7ai8ewOZd93EJpDrIdtKs5j34mVK7Q7mNpRDmvKfr6b1nPM4G6qdAv 9JzaHlHvP0awzimjl+ipvCRTV484tnCE5j3PwXjTMQ5fVDIQUnOX2rA1V37vQKwF+4 NCnhKu3QhClRRtzmcy0+QWMvNTj+on+UkJnMf2dbYv3WhUNn8TzjqX0Mqe/ZLeh6GH 0f7SXs58+2oLxI5oOG52IH+8Ydayi9JhFaH9sWmlv2JrxJBg47Nl6+l4tVRXhqO6Y1 vjL+UPq5++zj+haHVeQ3hmu7lORoiLr/bikWmD6ONV/38aKfKZVu724AthPeLKhsMj KVSBYSRXGhcIA== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V1G-3kar; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , "Michael S. Tsirkin" , Ani Sinha , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 14/15] acpi/ghes: better name the offset of the hardware error firmware Date: Tue, 1 Oct 2024 09:03:51 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" The hardware error firmware is where HEST error structures are stored. Those can be GHESv2, but they can also be other types. Better name the location of the hardware error. No functional changes. Signed-off-by: Mauro Carvalho Chehab Reviewed-by: Jonathan Cameron --- hw/acpi/generic_event_device.c | 4 ++-- hw/acpi/ghes.c | 4 ++-- include/hw/acpi/ghes.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 15b4c3ebbf24..d4dbfb45e181 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -346,7 +346,7 @@ static const VMStateDescription vmstate_ghes =3D { .version_id =3D 1, .minimum_version_id =3D 1, .fields =3D (const VMStateField[]) { - VMSTATE_UINT64(ghes_addr_le, AcpiGhesState), + VMSTATE_UINT64(hw_error_le, AcpiGhesState), VMSTATE_END_OF_LIST() }, }; @@ -354,7 +354,7 @@ static const VMStateDescription vmstate_ghes =3D { static bool ghes_needed(void *opaque) { AcpiGedState *s =3D opaque; - return s->ghes_state.ghes_addr_le; + return s->ghes_state.hw_error_le; } =20 static const VMStateDescription vmstate_ghes_state =3D { diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 3d03506fdaf8..8b3292be07e7 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -379,7 +379,7 @@ void acpi_ghes_add_fw_cfg(AcpiGhesState *ags, FWCfgStat= e *s, =20 /* Create a read-write fw_cfg file for Address */ fw_cfg_add_file_callback(s, ACPI_HW_ERROR_ADDR_FW_CFG_FILE, NULL, NULL, - NULL, &(ags->ghes_addr_le), sizeof(ags->ghes_addr_le), false); + NULL, &(ags->hw_error_le), sizeof(ags->hw_error_le), false); =20 ags->present =3D true; } @@ -430,7 +430,7 @@ void ghes_record_cper_errors(const void *cper, size_t l= en, } ags =3D &acpi_ged_state->ghes_state; =20 - get_ghes_offsets(le64_to_cpu(ags->ghes_addr_le), + get_ghes_offsets(le64_to_cpu(ags->hw_error_le), &cper_addr, &read_ack_register_addr); =20 if (!cper_addr) { diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index 051a9322141f..e47ffacbb5c9 100644 --- a/include/hw/acpi/ghes.h +++ b/include/hw/acpi/ghes.h @@ -58,7 +58,7 @@ enum AcpiGhesNotifyType { }; =20 typedef struct AcpiGhesState { - uint64_t ghes_addr_le; + uint64_t hw_error_le; bool present; /* True if GHES is present at all on this board */ } AcpiGhesState; =20 --=20 2.46.0 From nobody Thu Nov 28 12:43:33 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D2021BD51A for ; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; cv=none; b=qzmK1c61sPbLySCw/cruzmQ08E7e0JtFlmx4d8XBiOeSNoa0+lKGWP3EYe/bVGtRQeCjWYkdZssNYyT2F53aJG+QzCOfAAMHUnwqcsah2OKvCAObQ8rKkwc75hVpY5Md0CybmSA73Nm2yPCvzLd7TWcZprTz18T72Wfm8fsXcVw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727766252; c=relaxed/simple; bh=bZBTFsxaIkRHKH/tMfUarpWye8vmGL/o69fO3i5EElA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hKpV/OfSe2LzpjKkh0hiC2dkFTjJs7bA0VFFALc6zmgw+P18OfkonutvCTFDUyG242kTdAPlW8PS5oDRryCsKIxpgCZjG6LzHJT0Sy094IyJjzpGbJtlX4FTkL6wX1vynbOuVsXSo+HF8hvVGAuldIb0HYGQpUso8rWzVa2TtRA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IGsrzWfa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IGsrzWfa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6AB54C4CEE1; Tue, 1 Oct 2024 07:04:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727766252; bh=bZBTFsxaIkRHKH/tMfUarpWye8vmGL/o69fO3i5EElA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IGsrzWfajA9Mf6z3n5LvEQ3g9cBwTF6hVuULNaoOMuE1pbu3OfussfwUQLdWU/K0L cEZTiYIWhnu4hJ4gp3pprr0EvX0TZxtx6PFHDbAwk0VRBW38y5J/4vudvA0MQEFMOk wZKVvY7a6qdP1mwSr2cPYNLuu0XLaDDJMmpHOFh5/y7JPqVvjE+rF8ZslUXjLH5gAm WfDSBg+TQuIcFWmK/nS2XbyNfxHvjDu/UJ0ACoVOAKaVGknm/F78BVIHhuG5TuCgRW cKpGr4yG1+e86KtVELRvaP44WbiSrKTwk9+1emeo+IScaAU+u+xUQ/Wgp/mLiAu3Uc flXPGiD2GLxbg== Received: from mchehab by mail.kernel.org with local (Exim 4.98) (envelope-from ) id 1svWvY-00000001V1L-3xBi; Tue, 01 Oct 2024 09:04:08 +0200 From: Mauro Carvalho Chehab To: Igor Mammedov Cc: Mauro Carvalho Chehab , Dongjiu Geng , linux-kernel@vger.kernel.org, qemu-arm@nongnu.org, qemu-devel@nongnu.org, Jonathan Cameron Subject: [PATCH v2 15/15] docs: acpi_hest_ghes: fix documentation for CPER size Date: Tue, 1 Oct 2024 09:03:52 +0200 Message-ID: <1d2c5d8dfe077677a1a45558c518b4e58f77e830.1727766088.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab Content-Type: text/plain; charset="utf-8" While the spec defines a CPER size of 4KiB for each record, currently it is set to 1KiB. Fix the documentation and add a pointer to the macro name there, as this may help to keep it updated. Signed-off-by: Mauro Carvalho Chehab Acked-by: Igor Mammedov Reviewed-by: Jonathan Cameron --- docs/specs/acpi_hest_ghes.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/specs/acpi_hest_ghes.rst b/docs/specs/acpi_hest_ghes.rst index 68f1fbe0a4af..c3e9f8d9a702 100644 --- a/docs/specs/acpi_hest_ghes.rst +++ b/docs/specs/acpi_hest_ghes.rst @@ -67,8 +67,10 @@ Design Details (3) The address registers table contains N Error Block Address entries and N Read Ack Register entries. The size for each entry is 8-byte. The Error Status Data Block table contains N Error Status Data Block - entries. The size for each entry is 4096(0x1000) bytes. The total size - for the "etc/hardware_errors" fw_cfg blob is (N * 8 * 2 + N * 4096) by= tes. + entries. The size for each entry is defined at the source code as + ACPI_GHES_MAX_RAW_DATA_LENGTH (currently 1024 bytes). The total size + for the "etc/hardware_errors" fw_cfg blob is + (N * 8 * 2 + N * ACPI_GHES_MAX_RAW_DATA_LENGTH) bytes. N is the number of the kinds of hardware error sources. =20 (4) QEMU generates the ACPI linker/loader script for the firmware. The --=20 2.46.0