From patchwork Thu Jun 12 23:13:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zaid Alali X-Patchwork-Id: 895764 Received: from SJ2PR03CU002.outbound.protection.outlook.com (mail-westusazon11023120.outbound.protection.outlook.com [52.101.44.120]) (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 EB6CA239086; Thu, 12 Jun 2025 23:13:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.44.120 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770026; cv=fail; b=l+bYdg9xtPmMTbWdH8/WdO0AB0WWXQpEI5Q4LSFnKQvxlQdrCxefO4y090aSw90GI7cIfttrKNxO2IJgupxHtxlTpsdz3wr5rlTd/D9WK/kK647fJ2N6pIMA5s5kQbfvxOTR1HCnNHBVBpxfyQJCQDm43MisNwFuBehK8fM1xec= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770026; c=relaxed/simple; bh=QM1UNGN060DdhZ7pRrT+W2lh5wby0/k2Am5el3qMIFo=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tTNYCOen/Ithyx58GAsW2D1rBcIu4tAGIr2enPV8CePK4+uU9xxWyyqvmnvqBQoly7GOnFrX6w49oF3ajVE4lJYu6jQgj5D5rtbhC+jrHTfflt42n/rP4X/9B9OPxCsl4lTfHb6skN80SSB71dM4+3KoXNspAtGwxfbAAGCK3+8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=B9B+/EOF; arc=fail smtp.client-ip=52.101.44.120 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="B9B+/EOF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CkczjY7iOpkcE48+nyNeyQRbL4a14v7mnG30Oav99+2kQnBD8Yq/k3SJN0rCXj29iMGVJdQwXa889x84mbc9wKLtt77v+OFG88DDAKxaYDxcOlQCh1SznCs7zZIUb/TmgO0su+Q2Pn/ReTslhmwe+ycjB99U8vgWSJmmjCwNUo1QJipqPsuzizbw+rkzBpKTKo35ajFYuuUctaUlzKjXIAvCwZ00Os3i6xdM5ujI5n9HTBGkoLwT8bea0n3pcQfIwQbiO7AnjQp2R4NU1T7CdA+KWr+kDiu0LXRM30Srv/m6Y5EoZPxSmN1LhHs8BoM3c+AIC3n+vxOHkruXPU0yFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QtJFPzhU6u8qB61le+DYlFjq16maaIcIziuy9WWYJKQ=; b=fNJn088L7ydQRRE5fjlOhIjf7WzZiMG/iteFAAKmkvvF/hOnBSTo/olcVmeHVoGLPy2rEengFT8RbzTVPXysF6/fRs7WhERFvudAWe9ZfTItr4bmn/UG1BXJrweX6saBhLaot+PhHKvePF7zezwWJsKuLOGYP3jhMQExl0N72eQYHb5gc0AEY8DnnJ0mdCsD3OKKn/lIl7MAweZplK/jA9T9FBCyhdJjCH9+5XQHHxuwbZmMFEVY9W9T7I7M7wYj+R+koDZzLZhA6Y6x3vXCWpayclvEEUkmjJe4Z3bFyjAqKpovof6mAhZ61Tx8v/EMjVj8XZC0gXnkv6lNW6ic/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QtJFPzhU6u8qB61le+DYlFjq16maaIcIziuy9WWYJKQ=; b=B9B+/EOFAtSoUwYZLT7mbDHwxxI5ozQQYlvLT3aF5pCUj8+/CgaV68K/pQ9/65EO1tP3kcJcNT1k/AclGg6eGC4mLuezqDa78/mee7pK01V4R+v8cfuUFGIEBo2hiZAlhMhdBo2EQHD3QlvfIORI8KUFEs02SFadJqX1EPuCRZs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) by DS7PR01MB9364.prod.exchangelabs.com (2603:10b6:8:24f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.19; Thu, 12 Jun 2025 23:13:42 +0000 Received: from SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f]) by SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f%7]) with mapi id 15.20.8835.019; Thu, 12 Jun 2025 23:13:42 +0000 From: Zaid Alali To: rafael@kernel.org, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, bp@alien8.de, kees@kernel.org, gustavoars@kernel.org, zaidal@os.amperecomputing.com, Jonathan.Cameron@huawei.com, sudeep.holla@arm.com, jonathanh@nvidia.com, u.kleine-koenig@baylibre.com, dan.carpenter@linaro.org, viro@zeniv.linux.org.uk, ira.weiny@intel.com, alison.schofield@intel.com, dan.j.williams@intel.com, gregkh@linuxfoundation.org, peterz@infradead.org, dave.jiang@intel.com, Benjamin.Cheatham@amd.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH v9 1/7] ACPI: APEI: EINJ: Fix kernel test sparse warnings Date: Thu, 12 Jun 2025 16:13:21 -0700 Message-ID: <20250612231327.84360-2-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250612231327.84360-1-zaidal@os.amperecomputing.com> References: <20250612231327.84360-1-zaidal@os.amperecomputing.com> X-ClientProxiedBy: MW4P223CA0030.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::35) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS7PR01MB9364:EE_ X-MS-Office365-Filtering-Correlation-Id: eb97100d-6d53-4bce-fa22-08ddaa06c592 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: ViorSQRkf/CWpuA6UMV53bvSczSxA6xty3zfvmi44hywBk33XRc7jALTVybr57rWzkABNPf2xTseuVf3lUdSLgeZ+ItT1zZg9C6x3qS2cAbLmkyPimVcht9CHSAlEMpygbtRzbGBOcT9w0HwrlumaCmkknbp6kzYGBsIQj/kRgcbUkiE+annXET46NWk91iK9Vk2o23ahIEszRQMFSHzC6wFrplLEyKzmWcXcCpnc4dg02v6FRCGV+HiJqUvYncqtSkRl32NDBdMakkiOIWNpBzqEz9XCUbiqNeWLWFmkQOx1LlCz1RNTtgD5FaKBy/snn02LjhpW60tZ3wxoVsycRjgMUKSzHWfG+M6pkM3uJpblU/HYHceM35BDBkocGvNtzXLb9GGRuv6ZPpEDP8yfUqkcUJnyIOpu7OFvwR4y+5FEccqUIg6Ei+v/oWkDe+KWooTRserrntP3VZwowZhZWCj7AGmbV4XlbY4btJUL1bVt5KMNn9P8Zv9cIOQQpzjM1nO/wFHPmVKJRwLh8ws/vuk+WxyJAq7lmFjdBMme290k6WIKBwlEpcl29rx5nPZPpvQfVOIZM/wH2pW+HdtsItbxLzClHdRQH2eaO8FJd4PyYTfsZkMRjpbdF3rr1x7t6gCPcrdOLjdL8IvrABqQ8Wwi/DXHzQbKGLi9UzwdsjGAcc76yCHlhQGvlkGiYRwlQkXyeo0Pc61dwM3Ttfe5Mqn58m9MYp7SCbP/ut8HuCNJIoOFu2G16efEZo/KHm6OoXvIg+C1sXWcABLJ3S5Hqa9a+g1FoDBxo7qRdlaYRtcnZC9nPbqsCXvMFlzAwcixUYPoeG6Dy64Uzm/fGE0066eM3zyztFqBEdwJt1dmdBKTbW0xm81hgXfTkdBR10wMkzBwa9sf/vsWmAS9knwjUiVnF+5TArrnooit0jFZ3TgxOZDLHZ5s5cmKq/aMTq09WPsR4CdhL/a12YrhXBwHLShpHeCfJ2JchEduJXTC8UyjXQOE17uXmZAPFZfRpeZ3GH9I3x7DLXZtuWVQYUrrA4Mfu7qdbcQVIUkHlFzGhHZa4NEihJZO/hFMwe82Ji6oBJrxvSyFvVJYZifWvgig2QzhGV6Dhamo8y+X6008gfhgYxtB70nfZuT0JDsblzD+qqJgGIpnKB9x4WCW1WIwqzyAW9GcVjX2M7hNdq62y73GwNIVWt0nRF5qbKZL3J+bLJsxYuLBHH2M9+FPIN4j0EUUGPfZ0ufvTKz2BWRdrTAaRw1yRRtdcTWMmBY0sbRdspXu+QxBbgppbbxwkQeqJNjrDU4O0uCrGCKOPGTpYglkixDJTgF6ez4LSzyc7YvRS0KAca2NHNO1zFDYyaEPzg7Ua7mnwXAgUqh5maabcw48fk/gozIqIHGOdCtq3NtdfJ6ct2eTYEUhyywWr0r/rcUMXbZ20wSLlyxVjg78Lo0nGceutdTo/DAr39xX9uSQNtJCdxYwpRGmwiaUDhlMM+IHf4p3WDGEsiFZf9oF/sbgT6bKapYUVbSEeefnCor X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR01MB7903.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Yn8H79ibKjN9HWZ01/WgVSdbg+5zfvHA5yC9X8czPW7YMqKPyhhwEjWPDWLnz80b+ABEw4z19EQcoNtfGH6b4+oiYP+F2sUkvYLiqOG6gBQiIyuVD5txZj4oSPr3KjdygmwF3itT59kkoFPP9/oQbcE6VUrpXxL5ouoeu/R96xqKBmeK1No96jZZ/HFp/LakNJ0Dw+y7thf59TW4WZF2tnjwxxTr4c88AU9xP99m4ZoP5SiI2ejT6Td9AzVWpTOdNjzuMDJW6j0vjLKq1CNgFipInUzjoHMrslljHATOjf4K/Eh7oVXJsYNvdZ1FQEsScqixA1R3w1YvA6+MQMvXj7tAkzgg96zpPmj2VejCxhaoA2FlbdFdTAh5ngqJ4zYBdooH6N+pbAGrS3JaITipv3E+LgDgBv5q2485KuXEsZ8ZkuAVdVxbZ/xAcTlXB4lSxOWf+PyJ9g3KOcW/c8yDdY2scjaLgmvraxBF+Wtd5zET5EcLZpmUvkrWpEMy+Do/kSJhdj/SBkhWKa/M1+jh6ktqjk/R76YL4E2HxL2YOuIIZ4nSIdVK8y0vcHxh2UeXR+MNDHIq0q+U64eFJ8w6uznN2i8oLboXT+QrBWCtJiCLBolx4jbbTGFFMWqBop30nGTmjWSDVRTfAgVq1tYCu8X2X9L8T7+8Fk5NcmtR4Bh9I8TfiRmqHOOKPjD+w41vI3Y8omrveDOZd7kj3rraOvvjn38OuHyafLndwHLXbjolUvYZp0YOuwRRjh8sS3mfHth//5AzxAxwCbMEt97LebPza1fo36qM9rhCl2XiO9jKtRaCrtEtMA+x/kSE8fpYEU0yiNyS+lOP5RKToiZduQx586tyurlyWCDvn1i7suKcrYNdGwE0F/EI7SptJXpleHlnqEzO3DMOV9sTNylsNXZ53j5QDIOIKDt3RNwyiceSYUv6LkfpMt7MfZYRAZHecly2cX6B8EGRDa54InSS7Jkhlyu5FXc9D4nu88Zf+bYNeuQvOlLE7+W5r5BrYd1TuZtGBW2CKQ6aVr3pC6i7CVTTC/s4COBk11tQK378sdTlTVtCcjvWWzOMPzeGbvXQSHmrhEUYNYesaCQCG+U+DA8Cvd4UmeUlUPLvo7fde0lzp6vySXRJnv5b5VhUeLgImA+9NXdsRpD23pLyH60IusYIfnc1s9/j1yZA1nNTGLtHSMyDEX8PmGiKKOs9VTkgRnogMq2e1xefs8S5zSkdeyylR3ORCzeKhvmunb/w13cBJp0p5Xhhv6D/iGI0H0bTqWany1o9fiitET0NYJt60rha66rLxXwsZDF+BXo1dq6RZwmyUdWcntM5kwJT4gFUkdVVm16rEp0UCeqjhXJqTcNr6Te3PkBG8KUHUviCArkHvojkNXarHHsgcOkUf+V2b/TjStLM3btrum9dbSRGjDE1yvfzoPwsfhGY9t4EliacwX3AekvIBulH9au75VLnMeiyFHIGhcw/WkKnYlm3K8NzohmbTR+ZXRenUl0F5C0XWfGhKeWOhhXlg9H1vi4vsXSnNJedbktI/XFONbzAm8+02YOh9anpRpIpqLedWdTy1+RArUVDu+WkS7wAOmuRmUQcgqz17HPURtFK4PPJrD4BdyMcBJdfDlxXRq9wrg0= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb97100d-6d53-4bce-fa22-08ddaa06c592 X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 23:13:41.9556 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Kc6RnUWWzHO8xgd8XxGVG9YH6FJRwTABe+Wa6vStLid/qPClpq77sz7Ait+UEDJ3cArhVqxAFI85i/HM+E7IxrnLuudpx1+auLjbcHX6Fa8C6und7+7e4sUEH+wZZRKo X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR01MB9364 This patch fixes the kernel test robot warning reported here: Link: https://lore.kernel.org/all/202410241620.oApALow5-lkp@intel.com/ Use pointers annotated with the __iomem marker for all iomem map calls, and creates a local copy of the mapped IO memory for future access in the code. memcpy_fromio() and memcpy_toio() are used to read/write data from/to mapped IO memory. Reviewed-by: Ira Weiny Reviewed-by: Jonathan Cameron Reviewed-by: Tony Luck Signed-off-by: Zaid Alali --- drivers/acpi/apei/einj-core.c | 106 +++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 46 deletions(-) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index fea11a35eea3..b9cdd3e44855 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -151,7 +151,7 @@ static DEFINE_MUTEX(einj_mutex); */ bool einj_initialized __ro_after_init; -static void *einj_param; +static void __iomem *einj_param; static void einj_exec_ctx_init(struct apei_exec_context *ctx) { @@ -216,24 +216,26 @@ static void check_vendor_extension(u64 paddr, struct set_error_type_with_address *v5param) { int offset = v5param->vendor_extension; - struct vendor_error_type_extension *v; + struct vendor_error_type_extension v; + struct vendor_error_type_extension __iomem *p; u32 sbdf; if (!offset) return; - v = acpi_os_map_iomem(paddr + offset, sizeof(*v)); - if (!v) + p = acpi_os_map_iomem(paddr + offset, sizeof(*p)); + if (!p) return; - get_oem_vendor_struct(paddr, offset, v); - sbdf = v->pcie_sbdf; + memcpy_fromio(&v, p, sizeof(v)); + get_oem_vendor_struct(paddr, offset, &v); + sbdf = v.pcie_sbdf; sprintf(vendor_dev, "%x:%x:%x.%x vendor_id=%x device_id=%x rev_id=%x\n", sbdf >> 24, (sbdf >> 16) & 0xff, (sbdf >> 11) & 0x1f, (sbdf >> 8) & 0x7, - v->vendor_id, v->device_id, v->rev_id); - acpi_os_unmap_iomem(v, sizeof(*v)); + v.vendor_id, v.device_id, v.rev_id); + acpi_os_unmap_iomem(p, sizeof(v)); } -static void *einj_get_parameter_address(void) +static void __iomem *einj_get_parameter_address(void) { int i; u64 pa_v4 = 0, pa_v5 = 0; @@ -254,26 +256,30 @@ static void *einj_get_parameter_address(void) entry++; } if (pa_v5) { - struct set_error_type_with_address *v5param; + struct set_error_type_with_address v5param; + struct set_error_type_with_address __iomem *p; - v5param = acpi_os_map_iomem(pa_v5, sizeof(*v5param)); - if (v5param) { + p = acpi_os_map_iomem(pa_v5, sizeof(*p)); + if (p) { + memcpy_fromio(&v5param, p, sizeof(v5param)); acpi5 = 1; - check_vendor_extension(pa_v5, v5param); - return v5param; + check_vendor_extension(pa_v5, &v5param); + return p; } } if (param_extension && pa_v4) { - struct einj_parameter *v4param; + struct einj_parameter v4param; + struct einj_parameter __iomem *p; - v4param = acpi_os_map_iomem(pa_v4, sizeof(*v4param)); - if (!v4param) + p = acpi_os_map_iomem(pa_v4, sizeof(*p)); + if (!p) return NULL; - if (v4param->reserved1 || v4param->reserved2) { - acpi_os_unmap_iomem(v4param, sizeof(*v4param)); + memcpy_fromio(&v4param, p, sizeof(v4param)); + if (v4param.reserved1 || v4param.reserved2) { + acpi_os_unmap_iomem(p, sizeof(v4param)); return NULL; } - return v4param; + return p; } return NULL; @@ -319,7 +325,7 @@ static struct acpi_generic_address *einj_get_trigger_parameter_region( static int __einj_error_trigger(u64 trigger_paddr, u32 type, u64 param1, u64 param2) { - struct acpi_einj_trigger *trigger_tab = NULL; + struct acpi_einj_trigger trigger_tab; struct apei_exec_context trigger_ctx; struct apei_resources trigger_resources; struct acpi_whea_header *trigger_entry; @@ -327,54 +333,57 @@ static int __einj_error_trigger(u64 trigger_paddr, u32 type, u32 table_size; int rc = -EIO; struct acpi_generic_address *trigger_param_region = NULL; + struct acpi_einj_trigger __iomem *p; - r = request_mem_region(trigger_paddr, sizeof(*trigger_tab), + r = request_mem_region(trigger_paddr, sizeof(trigger_tab), "APEI EINJ Trigger Table"); if (!r) { pr_err("Can not request [mem %#010llx-%#010llx] for Trigger table\n", (unsigned long long)trigger_paddr, (unsigned long long)trigger_paddr + - sizeof(*trigger_tab) - 1); + sizeof(trigger_tab) - 1); goto out; } - trigger_tab = ioremap_cache(trigger_paddr, sizeof(*trigger_tab)); - if (!trigger_tab) { + p = ioremap_cache(trigger_paddr, sizeof(*p)); + if (!p) { pr_err("Failed to map trigger table!\n"); goto out_rel_header; } - rc = einj_check_trigger_header(trigger_tab); + memcpy_fromio(&trigger_tab, p, sizeof(trigger_tab)); + rc = einj_check_trigger_header(&trigger_tab); if (rc) { pr_warn(FW_BUG "Invalid trigger error action table.\n"); goto out_rel_header; } /* No action structures in the TRIGGER_ERROR table, nothing to do */ - if (!trigger_tab->entry_count) + if (!trigger_tab.entry_count) goto out_rel_header; rc = -EIO; - table_size = trigger_tab->table_size; - r = request_mem_region(trigger_paddr + sizeof(*trigger_tab), - table_size - sizeof(*trigger_tab), + table_size = trigger_tab.table_size; + r = request_mem_region(trigger_paddr + sizeof(trigger_tab), + table_size - sizeof(trigger_tab), "APEI EINJ Trigger Table"); if (!r) { pr_err("Can not request [mem %#010llx-%#010llx] for Trigger Table Entry\n", - (unsigned long long)trigger_paddr + sizeof(*trigger_tab), + (unsigned long long)trigger_paddr + sizeof(trigger_tab), (unsigned long long)trigger_paddr + table_size - 1); goto out_rel_header; } - iounmap(trigger_tab); - trigger_tab = ioremap_cache(trigger_paddr, table_size); - if (!trigger_tab) { + iounmap(p); + p = ioremap_cache(trigger_paddr, table_size); + if (!p) { pr_err("Failed to map trigger table!\n"); goto out_rel_entry; } + memcpy_fromio(&trigger_tab, p, sizeof(trigger_tab)); trigger_entry = (struct acpi_whea_header *) - ((char *)trigger_tab + sizeof(struct acpi_einj_trigger)); + ((char *)&trigger_tab + sizeof(struct acpi_einj_trigger)); apei_resources_init(&trigger_resources); apei_exec_ctx_init(&trigger_ctx, einj_ins_type, ARRAY_SIZE(einj_ins_type), - trigger_entry, trigger_tab->entry_count); + trigger_entry, trigger_tab.entry_count); rc = apei_exec_collect_resources(&trigger_ctx, &trigger_resources); if (rc) goto out_fini; @@ -392,7 +401,7 @@ static int __einj_error_trigger(u64 trigger_paddr, u32 type, apei_resources_init(&addr_resources); trigger_param_region = einj_get_trigger_parameter_region( - trigger_tab, param1, param2); + &trigger_tab, param1, param2); if (trigger_param_region) { rc = apei_resources_add(&addr_resources, trigger_param_region->address, @@ -421,13 +430,13 @@ static int __einj_error_trigger(u64 trigger_paddr, u32 type, out_fini: apei_resources_fini(&trigger_resources); out_rel_entry: - release_mem_region(trigger_paddr + sizeof(*trigger_tab), - table_size - sizeof(*trigger_tab)); + release_mem_region(trigger_paddr + sizeof(trigger_tab), + table_size - sizeof(trigger_tab)); out_rel_header: - release_mem_region(trigger_paddr, sizeof(*trigger_tab)); + release_mem_region(trigger_paddr, sizeof(trigger_tab)); out: - if (trigger_tab) - iounmap(trigger_tab); + if (p) + iounmap(p); return rc; } @@ -446,8 +455,10 @@ static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, return rc; apei_exec_ctx_set_input(&ctx, type); if (acpi5) { - struct set_error_type_with_address *v5param = einj_param; + struct set_error_type_with_address *v5param, v5_struct; + v5param = &v5_struct; + memcpy_fromio(v5param, einj_param, sizeof(*v5param)); v5param->type = type; if (type & ACPI5_VENDOR_BIT) { switch (vendor_flags) { @@ -492,15 +503,18 @@ static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, break; } } + memcpy_toio(einj_param, v5param, sizeof(*v5param)); } else { rc = apei_exec_run(&ctx, ACPI_EINJ_SET_ERROR_TYPE); if (rc) return rc; if (einj_param) { - struct einj_parameter *v4param = einj_param; + struct einj_parameter v4param; - v4param->param1 = param1; - v4param->param2 = param2; + memcpy_fromio(&v4param, einj_param, sizeof(v4param)); + v4param.param1 = param1; + v4param.param2 = param2; + memcpy_toio(einj_param, &v4param, sizeof(v4param)); } } rc = apei_exec_run(&ctx, ACPI_EINJ_EXECUTE_OPERATION); From patchwork Thu Jun 12 23:13:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zaid Alali X-Patchwork-Id: 896019 Received: from SJ2PR03CU002.outbound.protection.outlook.com (mail-westusazon11023120.outbound.protection.outlook.com [52.101.44.120]) (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 DF9132DECD0; Thu, 12 Jun 2025 23:13:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.44.120 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770028; cv=fail; b=cbAKQcGc0XqcIbXQEnSg+i8DoA3ekDeGFk9YPQ95iX7U8wezgwjCxws1Vdq/J/TvejVwrEm/r+hOHhD4BWWSotUsVWpN9FQpYKRHed7msCMOuCWUqLheLcNUD2q4tH+uayC9jwadq0x8Ck4BHrzuOzQicBvPRAD/vMj8MytzexI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770028; c=relaxed/simple; bh=VE4XGtYRsUOe9f60ySOgDCJPtO+rS/KYrzEme4zvNCY=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=lezW6QvDWTAu7SytoKULAyDDzclSP5xcTaxLZ2B4OA8V+KCfhLwGomYZAaUb0z3SIs2cC0NbufDcwzG/Md/EsV34yi1IK5sYPYiwG2jf9AClIH5g7vRROhgym4fWHCyFl/pwmmbD0zNBKHhleWht7YYekQnKqvOyjgr829Ck3eA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=sQeFecMX; arc=fail smtp.client-ip=52.101.44.120 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="sQeFecMX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=X0aO6nRuOeM/WwUt6cl0u6+Dc/CIfpREAf2yPnvmW0sgUSNjkZv9MX12va7j7x7ch7EprXA2MZH6iZgGARQlOc67SVwAOGQvlJfoRM025NBBklBYJcU1z95sStPC0lH5I5cVROMCNw5/Ll09Sd4x83TiLo6yWgdHSYiv/siJyx+py1KfS9MbabxOjCgm/dZXx+Tbbpib+NIR270BUir3/bCMBXvGr+BfyhE3HK/W1XvHQ+CEAfkK/Mspql+tipvFfs5wIVaM4pmo7pNDZer1bhVfEP4B82B8N1vOPX/B76nEe3BxG/2rhdhSdlRoj+0prTOb/wwnOsiDltqeYTTmlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0aV42x5o1xI2VHsjrdNiltl0pyAvBvPV48bTRuL7RrM=; b=NTCVcMem5pG9jWoFqn31GKPOpl4CuZSCH21Op+odEV8QKvMwt2cVIwi0H39840D/A6MHtH77DAEZ54zhSdqT9E+ybAKsgazl02MEmCcdgWCx3yE73LoBDyhXSanvil+OUjMveT9hOdRO2Bkgr2BWET51ncSZ8udFqW8rypv9OlT5KjTHVZh5zxT/1PxQ87UwWLxxXgT3uCPKRINAWcaVLnWhNmv5eN7C3RnbBAvLXL2/IV0GJ4Y4W0z3VvZ9aih3TQrimwqCuuLj0tWIIhQWM+4+2rlHWkzWMyxj1IEX2B9yVQCiuFoc/AZYwjwEJd0ZnG7x0IO/XMkAdbu/PLf16g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0aV42x5o1xI2VHsjrdNiltl0pyAvBvPV48bTRuL7RrM=; b=sQeFecMXlQ9PFdoMXWHhFZ8tXhZpW4GdCJphckOsrjC24EYFLMBCsSBEnYX9BzcYPiSO8S3vjdqRl8/HbbOkW0ZEZPwiaHVfuCLtxcd6nqPryXniTXUYmH6YPq07Vd08145ghE2iQq0kBktO6JrFMDPXXwDV86R7907EgLXj27E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) by DS7PR01MB9364.prod.exchangelabs.com (2603:10b6:8:24f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.19; Thu, 12 Jun 2025 23:13:44 +0000 Received: from SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f]) by SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f%7]) with mapi id 15.20.8835.019; Thu, 12 Jun 2025 23:13:44 +0000 From: Zaid Alali To: rafael@kernel.org, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, bp@alien8.de, kees@kernel.org, gustavoars@kernel.org, zaidal@os.amperecomputing.com, Jonathan.Cameron@huawei.com, sudeep.holla@arm.com, jonathanh@nvidia.com, u.kleine-koenig@baylibre.com, dan.carpenter@linaro.org, viro@zeniv.linux.org.uk, ira.weiny@intel.com, alison.schofield@intel.com, dan.j.williams@intel.com, gregkh@linuxfoundation.org, peterz@infradead.org, dave.jiang@intel.com, Benjamin.Cheatham@amd.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH v9 2/7] ACPI: APEI: EINJ: Enable the discovery of EINJv2 capabilities Date: Thu, 12 Jun 2025 16:13:22 -0700 Message-ID: <20250612231327.84360-3-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250612231327.84360-1-zaidal@os.amperecomputing.com> References: <20250612231327.84360-1-zaidal@os.amperecomputing.com> X-ClientProxiedBy: MW4P223CA0030.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::35) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS7PR01MB9364:EE_ X-MS-Office365-Filtering-Correlation-Id: 76614012-4413-4db6-8b3c-08ddaa06c726 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: pPAORS3aOan6smV/SDZJ/07bTHxE9R9Szu4PfHu+YPusyVNSs99AA9VE2Te6oilVyIJ2+K5sTOK1q/QXRhLoVuYNqme1V2AAbqoPk7e8m49Par5133qCvlTgBW7B2IMLkBANTMmyCIu21JXvmpaotXuQ9+CL1GbmspOeeTRh8REP+75qDkuv69eGPUHr7imf10A+2TPzZj5zl24a5P9tB2dzXHGdzm1ugs7u3vRq6j09E/HhteJk2DEBL2jFNjhQiQimIxEQ+cRlOYQKtLqIpLzAY2K7AP4e15RO82hMcEvfNBIq3+1rB+NeoW6bvw4rHKDUJr+5K8t2MoSohHgdiiUBrTKIuUNZ2aOskOGCMHPYrLANuVzg17TwNwfIcZfXz+5cD5xu++RJE6FhHRf9FVIvRVwta3BrntQQyyaV65E2rth2lIzaL5Ixtvl8unutvjGvpsHgruK1gVc4l30v2LAAHHFYjUXKVimyb7Xbc/bYb96BoSWnFDwraK5fj/kO8O/j+aGYHpMVnLnMx7a1bRzBh+JuQYjz4crEjUeYkiAQpCzx9JvndTZe/M4rHwFmPNSgd4jYpLCBJfzChqZHEpzYuLvzPpPCWPkc3ZBwvmJgwO+rln4JIXC2TDzjZBTIvrR8Ky0iQjOvYboXGXiM0arvlj9sRQkRIZOQYXQanN+Muue54Zc1Ou8wTwTmyuroFJPbVIk3egLyO206hGkmXfSdoVoIYBCsEIyCutdUVZibufHLxmxzMGvIA9rEj8Ncwls2wKDn41XewkbYvx+q/Ba2HOCDE6m+VrXuiQllA0sqV++g4txX1U+rIclpgKcT97aoK8vLiJCImKfti/uJEaah9WnYbdjwuf3Bbtl/S0RKRFoC5y+fw5hvXcyAbIcColaAzoepMZlSgl2DWZWi6MRmOU0bS2ND3xfFtgQaiDmpEMjqLPkCG675SMvFHHLfQSnF6mOPEsSa3KMvHgM/6ie9vGhp3OGdbJ8dVIgfyzSaC7JeUz+o5TUSvWbBdCZ/TCKMVVCXpRBMi0oXQvp/XLCTokRAHEofpt9KsJo4YBuW6dobaZ1uswzIZ6ZJhixgtEpGtTHv35Nw0tGmGEExgYXjty7KVy7Ybf6I6Z5Hm6xv35rmf29nflSagQFgH3qeonV3eIZcwx2S7pwVqBmrnJj65q5oYZXJnmi1enIDuRK1tHVUcM+t3llIdeY3sqRG66T4XKf4DMtzoYCg7FlDJAPk4GhDl7aWhGNe6CXw9S800FaKbCrs0RNGsP6DYusNH68eDA9HG6xefiyuvbUW/b7PCV6BxmzLVUJB9JSt1nyRRaF0ZU7FG7E7AQMqOyftj+4Un68bhi0NpA1iJJYmZH6kJAAffvRL7IMDKDULd3GyLb8j/Ll48wdodCBWj8t1KkBueSaPYIFNvSre38GjdI9GskMal0L7ZJTl+x+SQRbJ8b+UfCCOP8/2vlybLGGR+aGR1irsMRsE1rt0Jgu+a9Z710CxM6Nd+SOkFYGaiHU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR01MB7903.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0E1HdhdN5vo57kF/EXXrRXYPRd8VkHm/wGCeXVbaGQvuFZo8vI2x+UyEYyOPIRpVNGwu5QFJo8+2db2OCIT5Sjrmv6ylaOs49/YWhCrJsdNZ76BnlrBy/La+zF+pLIjq6+4FDGiacZAL6lVN5INSF3ZpEfQ1P7+P0Tyq/25iSDiZ5YY72tS4BG48B4m3urF5BwMCIpWIOdpTm9VRRuCgSQxNVGSRc4vokxhdipaQxoVz+v/eked/nhsBD3RHXyfHXIHXM7g9HcUvAOgHXCglz4YnyXjaB7nfiFRkzEj3aprbSlZ/K6w31pxE+nRR5JLCxor6vpoTkRK1FIHOWan1NqZkG1Rx5gI+s56E5v1cuLH63uWi1lZCv4f07FRYUUMdF3WKsU8J+CyONlTZy5FUEVF+nJdEHrJWt4ltKMQpInVVsSgAq9raXbqWu7AluZTO8er5VWA659LlHGpIvDfgI+FuBuf7GB6cD8JpX5p6F0u91JMyY18xAlqSRJ3K0mItFaugqiQb5o+H8A7Yf79WuF2VvK4/yjF3UC4i6s8i51+E9z1towApm71zNx9HTgiPzjqoCiRRZC352tEwi11zJ6PKQt6jx5LDUHtFkAaJ7aINLyMSLr00HogqVyj6VWmYJNUn15kuCf+GYdhJ5m5d8GXnjIq43ROHMNxjEls0OPGmtl02K6hWgcxkq4d/iUBSCaK17XO4cFuMSWLA4pPRfkxMqUgodT/M8zaNFUtUQ8SfOKxpkSNeP5WaFp+XEzTmvyzGZ1ujRtlL3g3D//LRDOWIH1A3Po618RA6nT0gkhR1sRrOwzOplsyW511RnKoB5vpQSWmtf9F2RP8y6c0bNseqXl4KLACQD0dbSfpdni66cpAnDjWFWjF1N3KU4eUkzmtLPirj1E1zLDXrksTOX8ZhyIRqaKkOZRdHqtidFMs4GJ4uCN6vYZtis4KMlEvLakm/unwlvLrbvsRI0+Qe3fM5F9WJLStySWy02cDmlD1OC3xcplog/nX5S0I1kbcuYYV/ewaJZkhfvn3leYCO99Km9+fDx6ATpL/YEeJ3VTqbf1ThUzB+ZXpytsbU/YMhubQfzlni8BD/0aNInCrHA/wvctwgMWC5iTcN56p5BEKVkD9x6Otqm/pls3A0vRSOerg7OIlA+d9Y6iiIm9vWTxE+zzztOsBBnE+ml7TIyJk096pAitIT4xaM/aYnJdk1By/P2V8yr65ZbDCQTObRm3DSFAnm0MZnYeiITVWFym69H39mqO5+rP+yXuUv7hZeUdtk50obUfK9EP4yL1WgfXFSrz0A0Z8xksgRFq4l2q2a3G6BOBcbWKOcqj0q6jzeU6DH322GzjZGDd96qtrwLAbmmFr1Ngd2FH3lWJLvMXXwfTwbZa/qQb+Exp1NfxJZMT52US3ZtmQHpzM9uyuxZ2b2/Xgxv09DyuOxDafm+u1Ir5ZMv2AwB9u3p8sQaftavNp0sxe3XyOD1y8MlQL70z0aOmgS3+jqg3W5DWAJFMTtKg/fCbMtfZ4mYAG2cdh+FqODIoMKMWQZJz4bdXgb55FHKsKvjcH91eI021ThH5usWM84YP9pVUInX2W2yOEJjswAjNBgwADuo9/p78gLSYFtJ0I7WvWc7lHSX1EGoBE= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76614012-4413-4db6-8b3c-08ddaa06c726 X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 23:13:44.6111 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dBRW6FqRN44TWW1o86+E5HzWzCou+DJq4wOF69t+v4V6FV0J23GFMsDXnRX1tDotqeR7OB7Tmg683EnH2zu5+Rqhm2FUsq7JIoz0+TVMmRyRGpbWLdcgINNSo7CuMPF3 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR01MB9364 Enable the driver to show all supported error injections for EINJ and EINJv2 at the same time. EINJv2 capabilities can be discovered by checking the return value of get_error_type, where bit 30 set indicates EINJv2 support. Reviewed-by: Jonathan Cameron Reviewed-by: Tony Luck Signed-off-by: Zaid Alali --- drivers/acpi/apei/apei-internal.h | 2 +- drivers/acpi/apei/einj-core.c | 75 +++++++++++++++++++++++++------ drivers/acpi/apei/einj-cxl.c | 2 +- 3 files changed, 63 insertions(+), 16 deletions(-) diff --git a/drivers/acpi/apei/apei-internal.h b/drivers/acpi/apei/apei-internal.h index cd2766c69d78..77c10a7a7a9f 100644 --- a/drivers/acpi/apei/apei-internal.h +++ b/drivers/acpi/apei/apei-internal.h @@ -131,7 +131,7 @@ static inline u32 cper_estatus_len(struct acpi_hest_generic_status *estatus) int apei_osc_setup(void); -int einj_get_available_error_type(u32 *type); +int einj_get_available_error_type(u32 *type, int einj_action); int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3, u64 param4); int einj_cxl_rch_error_inject(u32 type, u32 flags, u64 param1, u64 param2, diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index b9cdd3e44855..f018d3970de8 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -33,6 +33,7 @@ #define SLEEP_UNIT_MAX 5000 /* 5ms */ /* Firmware should respond within 1 seconds */ #define FIRMWARE_TIMEOUT (1 * USEC_PER_SEC) +#define ACPI65_EINJV2_SUPP BIT(30) #define ACPI5_VENDOR_BIT BIT(31) #define MEM_ERROR_MASK (ACPI_EINJ_MEMORY_CORRECTABLE | \ ACPI_EINJ_MEMORY_UNCORRECTABLE | \ @@ -84,6 +85,7 @@ static struct debugfs_blob_wrapper vendor_errors; static char vendor_dev[64]; static u32 available_error_type; +static u32 available_error_type_v2; /* * Some BIOSes allow parameters to the SET_ERROR_TYPE entries in the @@ -159,13 +161,13 @@ static void einj_exec_ctx_init(struct apei_exec_context *ctx) EINJ_TAB_ENTRY(einj_tab), einj_tab->entries); } -static int __einj_get_available_error_type(u32 *type) +static int __einj_get_available_error_type(u32 *type, int einj_action) { struct apei_exec_context ctx; int rc; einj_exec_ctx_init(&ctx); - rc = apei_exec_run(&ctx, ACPI_EINJ_GET_ERROR_TYPE); + rc = apei_exec_run(&ctx, einj_action); if (rc) return rc; *type = apei_exec_ctx_get_output(&ctx); @@ -174,17 +176,34 @@ static int __einj_get_available_error_type(u32 *type) } /* Get error injection capabilities of the platform */ -int einj_get_available_error_type(u32 *type) +int einj_get_available_error_type(u32 *type, int einj_action) { int rc; mutex_lock(&einj_mutex); - rc = __einj_get_available_error_type(type); + rc = __einj_get_available_error_type(type, einj_action); mutex_unlock(&einj_mutex); return rc; } +static int einj_get_available_error_types(u32 *type1, u32 *type2) +{ + int rc; + + rc = einj_get_available_error_type(type1, ACPI_EINJ_GET_ERROR_TYPE); + if (rc) + return rc; + if (*type1 & ACPI65_EINJV2_SUPP) { + rc = einj_get_available_error_type(type2, + ACPI_EINJV2_GET_ERROR_TYPE); + if (rc) + return rc; + } + + return 0; +} + static int einj_timedout(u64 *t) { if ((s64)*t < SLEEP_UNIT_MIN) { @@ -646,6 +665,7 @@ static u64 error_param2; static u64 error_param3; static u64 error_param4; static struct dentry *einj_debug_dir; +static char einj_buf[32]; static struct { u32 mask; const char *str; } const einj_error_type_string[] = { { BIT(0), "Processor Correctable" }, { BIT(1), "Processor Uncorrectable non-fatal" }, @@ -662,6 +682,12 @@ static struct { u32 mask; const char *str; } const einj_error_type_string[] = { { BIT(31), "Vendor Defined Error Types" }, }; +static struct { u32 mask; const char *str; } const einjv2_error_type_string[] = { + { BIT(0), "EINJV2 Processor Error" }, + { BIT(1), "EINJV2 Memory Error" }, + { BIT(2), "EINJV2 PCI Express Error" }, +}; + static int available_error_type_show(struct seq_file *m, void *v) { @@ -669,17 +695,22 @@ static int available_error_type_show(struct seq_file *m, void *v) if (available_error_type & einj_error_type_string[pos].mask) seq_printf(m, "0x%08x\t%s\n", einj_error_type_string[pos].mask, einj_error_type_string[pos].str); - + if (available_error_type & ACPI65_EINJV2_SUPP) { + for (int pos = 0; pos < ARRAY_SIZE(einjv2_error_type_string); pos++) { + if (available_error_type_v2 & einjv2_error_type_string[pos].mask) + seq_printf(m, "V2_0x%08x\t%s\n", einjv2_error_type_string[pos].mask, + einjv2_error_type_string[pos].str); + } + } return 0; } DEFINE_SHOW_ATTRIBUTE(available_error_type); -static int error_type_get(void *data, u64 *val) +static ssize_t error_type_get(struct file *file, char __user *buf, + size_t count, loff_t *ppos) { - *val = error_type; - - return 0; + return simple_read_from_buffer(buf, count, ppos, einj_buf, strlen(einj_buf)); } bool einj_is_cxl_error_type(u64 type) @@ -712,9 +743,23 @@ int einj_validate_error_type(u64 type) return 0; } -static int error_type_set(void *data, u64 val) +static ssize_t error_type_set(struct file *file, const char __user *buf, + size_t count, loff_t *ppos) { int rc; + u64 val; + + memset(einj_buf, 0, sizeof(einj_buf)); + if (copy_from_user(einj_buf, buf, count)) + return -EFAULT; + + if (strncmp(einj_buf, "V2_", 3) == 0) { + if (!sscanf(einj_buf, "V2_%llx", &val)) + return -EINVAL; + } else { + if (!sscanf(einj_buf, "%llx", &val)) + return -EINVAL; + } rc = einj_validate_error_type(val); if (rc) @@ -722,11 +767,13 @@ static int error_type_set(void *data, u64 val) error_type = val; - return 0; + return count; } -DEFINE_DEBUGFS_ATTRIBUTE(error_type_fops, error_type_get, error_type_set, - "0x%llx\n"); +static const struct file_operations error_type_fops = { + .read = error_type_get, + .write = error_type_set, +}; static int error_inject_set(void *data, u64 val) { @@ -778,7 +825,7 @@ static int __init einj_probe(struct faux_device *fdev) goto err_put_table; } - rc = einj_get_available_error_type(&available_error_type); + rc = einj_get_available_error_types(&available_error_type, &available_error_type_v2); if (rc) goto err_put_table; diff --git a/drivers/acpi/apei/einj-cxl.c b/drivers/acpi/apei/einj-cxl.c index 78da9ae543a2..e70a416ec925 100644 --- a/drivers/acpi/apei/einj-cxl.c +++ b/drivers/acpi/apei/einj-cxl.c @@ -30,7 +30,7 @@ int einj_cxl_available_error_type_show(struct seq_file *m, void *v) int cxl_err, rc; u32 available_error_type = 0; - rc = einj_get_available_error_type(&available_error_type); + rc = einj_get_available_error_type(&available_error_type, ACPI_EINJ_GET_ERROR_TYPE); if (rc) return rc; From patchwork Thu Jun 12 23:13:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zaid Alali X-Patchwork-Id: 895763 Received: from SJ2PR03CU002.outbound.protection.outlook.com (mail-westusazon11023120.outbound.protection.outlook.com [52.101.44.120]) (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 CBEBF2E1720; Thu, 12 Jun 2025 23:13:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.44.120 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770030; cv=fail; b=BHyVGrKwkGkWMyk4d74ci99w2VFngrFKCMHuzKHqM8G9JGHFSfw2MS3GfVxAH0tt/oZa9KuhYH3As+eHkeuY01YKO+NR1ksc/zm2A7xzI14oScL+RMG8/cITbMInt0bqS5sDehd62KkPks5lY+nADx78mG3N+5cRkANZ1I3S9EQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770030; c=relaxed/simple; bh=xgI3jeDtaD2/q4xq3FJpaOuIeBpIb7N2i4WLk9hKe1Q=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=sne/13hUx0Xfud1D94nXHTZ4/0u6hvmQEaq4ehFivFRQZBe6xmdfPe0FogBcyf4owiVt1s1U5mRmZqpWgn/yH5ZsSc6i7IyLB3Tx846fvhzyUmKAnDF70NuijdL/P+JJ7MkKwrwFHViCsX8G2sNN3lQW6P4bYwqj/g3EGPfhSoA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=j2A1i5DV; arc=fail smtp.client-ip=52.101.44.120 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="j2A1i5DV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YH46rTmPReFbazvE+pbG+Q2mUNkR51DcH1CbbE5V1dESGsYC2cJznvHP1B4SIW9uEdbyyNymE2VoDFPXMMaKxy5UbbeJernIIKScD2+mEZTs2iNlyuxqurNCxgjyuPw2Ywy8UCX+QFWhWNk8/qaQ3aykT8hdX4Jynn+KMmDPaECko9FB+nOC24aEgERNvuiB7X1RNLDxF1MTn8mNcyWE0oyMwiisOqwhtLKUXACd2m0KQRcAvK1VuExt68La+j6oyeRcKjRPcUdCZQJZY2zBKovZ0zqhHO1hgsv/nV++kEbXY5/lkCME3zSn4hS9LLWOijvFHAybJba6Am/vqSJPBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=U0o/WDau3piXchYih4pUzWzLIaKvM1V/8K5qhhdLFzw=; b=brqOhiEPGHqiMPc0OnMSsmSZkEhgnbZKwc6leYYwIKJB+1oyOZz2RlPdp2H5eGX7Xo0EmoMt6cWl/ghSE9z8uzOcI2JXYXoXwSHiSsdM/6KUHWTYHREJM9P5USz70883fxzmDJ0I/dgmaZws/8vKRJ7cXuSpzRqqX3ciwwhEFmrRx526M+whc2KfL/YadVZlssk+t/WI2FlxTMfXNSjrC7L8e+XjLZgA46Veov4irifS4rFAXjrH89H1vRKBUtOlCUTgu457SWdFEfUdE8CQh0ysV91XzcfVAjo6Yqtcol/szffIZRY/XG8OIDFgR3GnnhmsN8fnx53mts/gFlL+dA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U0o/WDau3piXchYih4pUzWzLIaKvM1V/8K5qhhdLFzw=; b=j2A1i5DVTpTSwKhrHERfJeK+/FXZj8HkdVhpjNvbRm9Yd12HAsbA+amUb84JTuZydiPzVYY+dF1P/ao9F8KYv0sIwWJpPR7a6EZO2O5GNUmscXkgXYEJgPpAd8WWi0ZsLuzrdwuCEo89HJZtd9KMUhL6RS4R9w7K2Kh1A8cjJI0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) by DS7PR01MB9364.prod.exchangelabs.com (2603:10b6:8:24f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.19; Thu, 12 Jun 2025 23:13:47 +0000 Received: from SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f]) by SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f%7]) with mapi id 15.20.8835.019; Thu, 12 Jun 2025 23:13:46 +0000 From: Zaid Alali To: rafael@kernel.org, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, bp@alien8.de, kees@kernel.org, gustavoars@kernel.org, zaidal@os.amperecomputing.com, Jonathan.Cameron@huawei.com, sudeep.holla@arm.com, jonathanh@nvidia.com, u.kleine-koenig@baylibre.com, dan.carpenter@linaro.org, viro@zeniv.linux.org.uk, ira.weiny@intel.com, alison.schofield@intel.com, dan.j.williams@intel.com, gregkh@linuxfoundation.org, peterz@infradead.org, dave.jiang@intel.com, Benjamin.Cheatham@amd.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH v9 3/7] ACPI: APEI: EINJ: Add einjv2 extension struct Date: Thu, 12 Jun 2025 16:13:23 -0700 Message-ID: <20250612231327.84360-4-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250612231327.84360-1-zaidal@os.amperecomputing.com> References: <20250612231327.84360-1-zaidal@os.amperecomputing.com> X-ClientProxiedBy: MW4P223CA0030.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::35) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS7PR01MB9364:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e18c859-7983-499d-5826-08ddaa06c888 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: UOJlD+AAEBcsideVWruxdWAfztR3fk8nPYwF5mUVIvj6b6yjycBJAN2X9xovbaaAhEVPE/dXDOrdekkiYb/yRsP8NMjYWG4z4OMkiV8S71pMc3QoSj7dxT7ddCJW1V8EeuvfbVArV4MjwMO3vzgZce8RPn+y35TVNKju+MmL2OkelBMmjC8+rdUsXdryOiKBQTCrRHYSdznc2YAFjYce+gI2uWS9cITEt0EUyyFCjiRPOF57XOyVHDJ4cyVlf/COlOMZGReQLkjCwTk5GMHCsxo47bsiw8KG4DePbq1vKI2xWbeJpyaE7b4jcrMYK2+gJ1ywPjtmIlUBSAhpoVHpQoMzkgnlkHjeYRudsUAfKGEzm7TXdhfVrjo5TRRcoSbrTBs57YR3ND/Rzb5D0kiRijRJV18buPNIDPipM35kb0ZUaK6OiyzJ1jzSle/mI+0DhzwFSEB5mrycZ5L0r5Xo7PRsFGYM23PQUcxV879pUIM7ZpapcAcNkqnkMunvKMLsUteTHbBtxJ/O1H2ELF5vPzsmTSPqYq0oR4OR2mxQNQzpDW444JqdP7uEjaojc/fs9zsHkGkh+hSuZNxX4cPXMz/vQ085OOuGNBviG2BBvqhNzUMet4U3ljOHkP6RI1nCDEIHD0Neodoj7Fk9KRYIRxX/4GehGG0EyLusB2Qws6Wu8haodxTTqrYbHY9t8pf3TqdqiJkLGknYJKG4eH6W6Ipp8DFVx1covWtSl4r50Wu5oW1pe2UCPfOhjJqoZ1lN4mwMyuyRKBq47vU8jZ5DstBbICYZc/nrD8YQyKU4jAMFLvCCkYqLJYrdzpNrmTKabjyekkQETrdlniQWEuQQPb3NU6Vq074ITz973vpNQTv/3vCcWMMQitPEfKnxOdGTjgIawjPH7m4dcPlK0HPH1/SoMnoH2bVkuwJ5Ifxg1R47fwUNVI6FVAaUk42CjcVcB0bVXVXNLyRaTnXKLMjZaDpGS4f3/6uheA+uTXzn7QrfK1jq1vOQ+1fuyDgsgexQXDy5yx/YY/EhwN2RsKB3QfqTAhEUx4Nm92tJGP07GAUJV8WjQqAj1ifoxvOzlsG7Rmirh6aKbHhJyL+XUIb1dJ9G8fSnk8l7RupWB0KTdGwEbIT/2v7QIV6QXaIsWh2N6F0quHBPytqS9+6OI9MJBWFjNni4YZoAldHll4qBGBlqyTi3ikkcFSqm3RwYbGWa3k36pUN/zme/j2LfC457MzWaZXgrYI69zDlM3duQZuFPXRWpxHHha2pLyAbDtQmHUn76p68CbZ9fikSIMjxoiX76WAWXrBmPEVcB1+JtelhVsOYTkA07YCSdl+0mx/almUl5B8SAbI/Dis1ia79vMHZkpgJF43Toknb+IocNyMBMrAChb+6pU93THEbWibPr2l+EYLeD3CUbnDUkqlStY+db5D49phdq5YMhyfmPpqn4KKm/k03nB46TM0/N90k8 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR01MB7903.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Nl4Dx2syYPHiH05+eHVSeOO3GW5LUHFtlRP/USs1BnvS+byDk3m+1/FHuT81Pqwk1Se93FjGclMOnuJII2YWZXTQig9d/Z+cOFDrq5oNeVoKPEBZKita9Kz4jmJthovm3xiiOFLsVsdveCsf5p1/dBHN/ZtPepzHeBD26PrjFpD22aIU2/1pesnJnimKP5VT+TSzp7CV2csBvDpGx2GsLrl+1mHacTbLVhIW4KCco7r6AgE5q891AH4sxIAjlah5NzoI2QMvNgDVZiNfVXg3S1P2d3wMZ0Br1roqw3s35cjRW3C3iU7gX6ZJSV0bDF2RGABhETMy7wO3L4U7wB7OdlQphtW6hSoEPh5X2W9ixzhDAjX2AHj65QGw9zDsp4hTAPah9qm7FAKB1ErmY+TfswGGLRKqzuh1dPEvIEiY6FkMfc6wJeEQ/NBbtqK8erw0r40A2lZF2bDOjU2rVfksy9smMH0liuXPnMHIr+bi1hGGbGTgOjSZDQDR8fwwBhaJ+9z2xVP2HaBtwUjJO80OfWVybs3dt1FivB32xqjXcLCcWsO2ZHjpKwAVN/74ap0xk/MGDCbgi6cxdsoVQJKQbpJQOofK/xvk8q/+LQg/6qeRx1RAIimbYFBMKdAa4S6dcWHl3uQhh2DmH4x/RzdqIxdWiGcrdyHUJ+/hl//FoVyQjuOvCebVnnmeg4He/7RXvvRwilYGGF9qAMX9IsQYEOiD+W6A7OmLmriTVs4nFbd3rVFWQp314mufssZAFdrdCmXC+bSLAtSOH2tLhkPZHDlgQ/p5AIPwRLQk73ZTCbQJ5r59+FzMxY8n0+p9XaTgMNuOezcje1MAaguP/OoG2yH4FsYmUZhSxpGYct27dROm2Fsw4m4s8ug2SmZSOdRskvgMgUEh66HPpDn/BN0D5F+hSxuQxik+uKxwWst2OdrmYf1qD1rmik5ytX+Z9mf2JMWW4P9exbpE9u9HrhJf2IO3Hyp/oUfxCYLoJYVP6BLM6H5qZ0jqgp2++iNGUTavLfz06RWzo1B3WJ3pzguS0xedcllkbU5WSuCzwnrtzFIb4C9RUzZsbUH8XGoP0NNJVEGvnjdASdUC1/1n4zaGDLV96BHMKx8Lmuke/LRHM0L/3gY22BE1dUiNNHKVRTssq9crKnTuoCquVwmwRJzqCT9BIMe0Bo70efRznj6KnrVusasofC4kRs286ufme6UR7KrAWREzWTJGVVbwO8Kso3CleTpnuGK/z4LIFLHp100Z3M7/duLArswkk+BdbWArkdDwOwEZer9WDCbfUWYR/LroNINFSY9oKwf0S2661+qqKCVLvs2ZiqM3l6nWGrrDe2IgMe0ZnUMKoCYWrf1ahvzHOOxtZP665cBFRNhG/v8CS4LsXFvSf/r0ieJ36vddHXHB5bTfFG3zMt2/yn0IViUb8mDrw6J249cEub/ZuxvK9s7gmWDhuWgzb8286tWAVBxZlJ5xjpbOPqIiIHehcNG+UVTr86FwSxeJVreUM9bSogsH/rYSDFKPkr/2ZKDwdI9InLm6NsyIOOyG9tdSPQxeS7nvs+pSS/otgGrAZhoL5CDDbDG15/YFByz6skA28X29YbitUYIGZ4X6SPUrxck3e3JAI4mAIwz/6mFB4/4= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e18c859-7983-499d-5826-08ddaa06c888 X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 23:13:46.8975 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BbC/4iantws2cXIXu7Usyh8lpuwlA3Gj17oJKx40mAf680OTHQk1j5cNLR5WRh2Q4sccQFdL1nk48CD1nTNYVtrTV4Xb7R89hTJAKtJusWJdQIN5JpQ76wYTkgCbb1GU X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR01MB9364 Add einjv2 extension struct and EINJv2 error types to prepare the driver for EINJv2 support. ACPI specifications[1] enables EINJv2 by extending set_error_type_with_address struct. Link: https://uefi.org/specs/ACPI/6.6/18_Platform_Error_Interfaces.html#einjv2-extension-structure [1] Reviewed-by: Jonathan Cameron Reviewed-by: Tony Luck Signed-off-by: Zaid Alali --- drivers/acpi/apei/einj-core.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index f018d3970de8..e74281f5044e 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -50,6 +50,28 @@ */ static int acpi5; +struct syndrome_array { + union { + u8 acpi_id[16]; + u8 device_id[16]; + u8 pcie_sbdf[16]; + u8 vendor_id[16]; + } comp_id; + union { + u8 proc_synd[16]; + u8 mem_synd[16]; + u8 pcie_synd[16]; + u8 vendor_synd[16]; + } comp_synd; +}; + +struct einjv2_extension_struct { + u32 length; + u16 revision; + u16 component_arr_count; + struct syndrome_array component_arr[] __counted_by(component_arr_count); +}; + struct set_error_type_with_address { u32 type; u32 vendor_extension; @@ -58,6 +80,7 @@ struct set_error_type_with_address { u64 memory_address; u64 memory_address_range; u32 pcie_sbdf; + struct einjv2_extension_struct einjv2_struct; }; enum { SETWA_FLAGS_APICID = 1, From patchwork Thu Jun 12 23:13:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zaid Alali X-Patchwork-Id: 896018 Received: from SJ2PR03CU002.outbound.protection.outlook.com (mail-westusazon11023101.outbound.protection.outlook.com [52.101.44.101]) (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 E27CF2E1759; Thu, 12 Jun 2025 23:13:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.44.101 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770033; cv=fail; b=oWh6bUxrKxjJAuf5dXp/BgIVfjh0XMtn7/FL4+BMW2g4kxHEuYsTVnqvxfEDcgRVUdoi/tmoFgsILJWQ8uhj8b7kmZI1m180w4zQzn/U234TJYPVcnA1FmJNLxsc7a8yKGmdSODLF9nuGFEo4LhoMdU3Xqp0WATIJqp/L7emr0A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770033; c=relaxed/simple; bh=clFLvbJC5Js9y3RhwUbikYdlJBkVml2Y9Fdjt/yDoEc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SIhVeB6G8QlzueqIZE/JmM+I/LBfjgmi+wJvpkYIH4RbC7TxFfPqQjW1nqLLoZaCJE96GUeroMG2yEaC+3QqMgGmqXSiKzzSDq1CTLOXG6lIYYvLSV9AoYxwpAWoQq8q3Z2ATol6OOPylWyOg3vNtOuELLGpKzVCJEro6g5f304= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=ZZtYv0+O; arc=fail smtp.client-ip=52.101.44.101 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="ZZtYv0+O" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jiUpLTkVEi+YHvdUZ+DQhBYBDzCn0wArms1AX7HnjBfA0ww9tQ4Q2Afj6UyL9iwZXSGI0SScSe29yI2X/LBbzyCP3rHG7uix07eH334cY+bIyGi6nqaY3YvQbs3X2mKscHXqs7CIm3Yg4rrfsBBiaJbya9mXXW9LTOiC+pYr/yaTHczaOvCy80VHlsH6fZWoMfMfF98FIbcClUuTXs/TkOMZdHcg+i3zHQqlA2UVmM6W8MHydQRulukUbQeHgP3MxLMM9IiDFJG4bo83XZFKIiS5/AB2w8nZcLOCkYn9ZSefPru2Qr11Mds/R/5XYMdKbHz5gLUQ9NkEcO0j+LY86g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WnpjU/5erDTMU0FOiBoKfz4SW2lHS2hC8wZP4mFVIeE=; b=elgFDFWsgbby2x2s+0g2PEDQG6Q/pkwUxoFLL/xESKRWw32reAl6JmzcBK9H58p3B7XduADOJaZzP0+7XXjLTAiB5Af12kQAJDjSZQGZme5z+sWXtm+9rseNthjabYC115dKwB7WqQGUXXc8/2B8O2vwBffEK5+76cXQ4oPxucDQFv+CjRQW13RmSKZ/0Nx33blCSI/YfteWM0i/HvH4f70t2Bjqvk8GP0vBxAYRlbmMVNQddDt1sfLu3GL1Ws3OX8cMQ+hEtwG08C/gCvbJznhIlD2s8P73RZTVQAAPhKOsnKmBRd5Eo0Y/HwDjQav3Ow8A0RbwdcWbehcjksLomA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WnpjU/5erDTMU0FOiBoKfz4SW2lHS2hC8wZP4mFVIeE=; b=ZZtYv0+O41MCj/Cej0rS6ud3BYs6g524jbBxfelzgbiXqY5BLBoCx8fzIHdG7z+UnSAkeW0T9PYgoFLQYlY6WaqtDtTxfWu5/iiFWalx6WKHD2mGjflCxDHE1wRZDpSeMqXUuBWhXZK/6Sp4ZYR/obm+H1HsDKja/pNoUMZ30UI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) by DS7PR01MB9364.prod.exchangelabs.com (2603:10b6:8:24f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.19; Thu, 12 Jun 2025 23:13:49 +0000 Received: from SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f]) by SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f%7]) with mapi id 15.20.8835.019; Thu, 12 Jun 2025 23:13:49 +0000 From: Zaid Alali To: rafael@kernel.org, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, bp@alien8.de, kees@kernel.org, gustavoars@kernel.org, zaidal@os.amperecomputing.com, Jonathan.Cameron@huawei.com, sudeep.holla@arm.com, jonathanh@nvidia.com, u.kleine-koenig@baylibre.com, dan.carpenter@linaro.org, viro@zeniv.linux.org.uk, ira.weiny@intel.com, alison.schofield@intel.com, dan.j.williams@intel.com, gregkh@linuxfoundation.org, peterz@infradead.org, dave.jiang@intel.com, Benjamin.Cheatham@amd.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH v9 4/7] ACPI: APEI: EINJ: Discover EINJv2 parameters Date: Thu, 12 Jun 2025 16:13:24 -0700 Message-ID: <20250612231327.84360-5-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250612231327.84360-1-zaidal@os.amperecomputing.com> References: <20250612231327.84360-1-zaidal@os.amperecomputing.com> X-ClientProxiedBy: MW4P223CA0030.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::35) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS7PR01MB9364:EE_ X-MS-Office365-Filtering-Correlation-Id: e10ff6d2-0b14-488a-5839-08ddaa06c9dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: lhA7fnfdVetw0M8kYae+iZGeiZcVSpqzEwKFKJqLb1xt1052uGKHmdyqBs5PX1jXE/jI9wh1xT89O+PuhDUfrHBowW5pAvO3w3mkG9aFNZpkSmPbD6pUtP38O/nBLCxO1SVXhM4UNoRyg4TZ/Rdsd3bodVdzfhtSo1Bv/XQ3y3RHpwnO6TmcNwOnrGu5PBcg8xZhXVARJMbme/+lavHEAlP4JtqYOBN9Dyoy0Uk8Zeh82qfTOemDpG45g6A0HB9mItpjey86rt+UMWSItDSeODzoa9uPfSUkxOkun7mem43x9HP8Uyy0Wv3BYFAwQSnoSxvTBESn2HKsF6WaHiFHTslXoa06LIzWA17iQ8dTSoZ3pK1xuMaMfGhLEQxdqbH5egAbGKPYflawkrOaMtEH1z5gLDVkhABeNoQ+KB0RjLsP7RZWei+7o3XQ9o1pnYA6q0X2TjjzFxVCfc+u5B8ud+Byshqn9VXpp3Vb733L7r6j3ffJ19gyOSaKNsGQF2V89BL24DpKtNI2ipuOLWnr6EOw/G9ieqoJpZxvEiqaX3qIhIP/W+YXeIAddu+ihAvLqjCOIzHvzc2DrysMrddhDcg3T2KL1lYqjzVU5MwRhPmoUPI9WITY9163gRXQ+OB9RlIRLN5R6xkV8fFFbYPou0knCo/P/fXBVlooQeuL3NSIivUDo48PZ6HHgv6D1Sf8XjEsh1VKlDNsEr4RtYZCv1ny0T0MQGwtJiTNpVp5WijcsxYuV5kBJ3wcPLMCb3/icww/onUQSoN6/cfT9FqChYVsttHwta5wA1jUYSwR/ynqCrw4I58cx6AmFOiOg8ROFdyxHkANW0TeECaVKarqicJNXOJ4AA1De4v4aV1IOGnfY44ceb6UkU88jthG4Z0uYq049MjtGA7Gssu0lTTY/me1DoOl9Fzya9rKwyLdHpVSj31Zppsi+1iC6pnC8tyEDP4iMS4yhcgwO3p9A28GmuA1eGR72HdYNKxfK+US04id0Ky1bvdvsrk0GmQ3CMiy0ynOeWmCCbgZONIMUT1S01Ze5bx5FLCEFlaBbPaNbHnfovCrKxYCpwJQufxSwkPsM+GTVhlx1KKZpcKb5pwny2gDqIFnO7tLufpp18CDjbdiDC6oiUCMBo7c2TlLmsG3N31ljACYlee98r++vzTvkVVVOUbdMPb1MmwoYhIYc50X72lmG8x+HtwV7fCoHDiUszVAqnuQ6uEnij4KhlxJN5mQPVUDX1EOkR601oPeHylbvOBBhhzhxTdT501ckph67Ys+wxo9Rxc/QXpebilG8RxvULpc7piJsdXNLQtoG7NcSCi+kn+OxnMhMTfcwk8cVix5Lsa9zMrDmPQZ0KK33zRA+a/bttgLv9CKacWXxzhnfbr1TSAb4UqkQgkAw7Q0FA1DqVYPWNNeaIxFIrGykKIfnQTXQbfKe9+NthSw4mkqSSmh79ZUMAsWy/3MkGoeF3vadX2wRVvrfFkcq7IsE5SKyanRoEBxXSvwPiaGmmw= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR01MB7903.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: z4nXoX+99BKLANSomjhUzbVliVH/JI+0lGACnZ/xcqfy82iCdk50pyxTRUTZBGnFJ2aEb3hxL6b+A5drlsEU90OYaSq+z8P+/+1W8cWkS0VDbTf6WZGzoLmGJIjigowW5VF0UMYZFzt9YMXC0ukMOSpkdYre3IoPyIgeCaWKZv5XWvutcHf+G3pHKf96s5wDWp79ysmg4IU/t4ue9rFfzZniAn3g0gOPsD6MYhfomME2bEbLEmqilNGJMgvpiX3x/E4XsIxvE7ISSB81Bf8dkYCWZJsltPbVCVEa4C3Lm7wD1NQarhvxuIIJJhqbh24TPgHi1gb/1qmO5ySw3LdHLuBmo8aaxLyk0HZVVTbAsYSbE15kqZ02BCXRjkKgrFP73rm5Al1rQS6vgDJLUsAOHElU0X4P3/52+m/u4Yjb4oLtDkyPFbmDDYgUtSWeCOdUJQeMLNboillOoOsS6HlPKLlpqdfylSXB8xDU6lueLHFqyYkzOXMTTC6AFZo2Hy+kr02FFkamxD+wPVMG/AsYGf9Y5ocLhSNTYjJYGMYeaeUM8E7F956+Z44hYNJeBCW/bhz2P7Lex3mgo8cdsEc2ncX67CEHY+We4ML9KXk7nUMmOO2lsSo3lanox4ES+JZ/38xj4EutAaBuJE++hgUedPocG3ive3Uuai4cPYpgPOKlVOsRMH909EGbEZOCS7/ndFpcgT5jaBaJwCIJBaFT03nOT/Bs/qEMTtQdOtjtPiYUIcLafH1opOVCXavBRgqRSdS9K+zqt9I1NbJYOxZo6Gr+g1xaEdbph1ntj8oKad5av7crgR+AsgLGeAjTfvXdZ9zeTCVj8g0JZWaqcs2aSnH0ppmP6bhB3H25TkQlJaso7+upZ632ypBBium7YDLuDP6dZvMXqtIxBHsdUro6FzM9vHmdeUdz+qbPnhYbZZwWxK+43AUnpP2MBypuHzqqZ9Pte2DLZop7RrbG3lbhP6+qDnM9g4fF/2MHh2qVIpr3buBZp3+vS+/mVSM1CT31b23QpJi5r5RrQCqCeuewX5fJ9F7o4O04K9eiAaOibdDIw5B/0s8tLqKAVQU9XhZ971un441PuebKhb6wYzVb2l4cMnMLZwKoV5UTm3Y/yJWVaSbifWnPBXMN3R6quHh1zLEFgP3d2ixDyLF5O5ig6LCHyFCOKngRTbxpX2kyuQLQzVwEOkrzsUHmThaez4cfHa0NS5QOtSxbQETW9AWUsOhDbBZiI91dk01kwf5VDHIWmtyPnrHLafWpZ+5HyyPT5xCyPIMWmap97bvs39bCfJUCHJqwpDQhCblVTP5A2wErjbmizebX+bwwc2MX1/uTR6o2a00CLdY8LNcNjD3svNgJaxJXUy83N7Dj9EAMpnV9wlN3Ec0YXm7JIs1VwrI6BcTMfk3pYsEZTAAAu/j/jjpVhGvGRhtpYtjPuUDZVfldUaX8l4VJyjUU9a33NxxnFlTYJMZtnmxzJtpexJ4tUhE5QVFdxr9XRwmb+2/qWldRv/5kVuFnns0dqP/OMgzYb9gQ012nVYi3fT4Z7XZ+xbifkXQUR+Phr63l6MRo4hehzvaq+i4ETaql93fEwE095GgXqO1J7dWDN4WL4fzfLTXSoCZjnZucyl3+GzNO4pw= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: e10ff6d2-0b14-488a-5839-08ddaa06c9dd X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 23:13:49.1233 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5c3DjdgGnX7UXzY4Qoo1SN9xDZjoV7PmNJzWjk6GeQlNSkF+7Z9gZPlHcHPR5XB0xxYxVwWOireXrOGxbcRSX5JOwaQzVBILcczBIkG1+4WI1SOiTFrbczg7ogwHQQTq X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR01MB9364 The EINJv2 set_error_type_with_address structure has a flex array to hold the component IDs and syndrome values used when injecting multiple errors at once. Discover the size of this array by taking the address from the ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS entry in the EINJ table and reading the BIOS copy of the structure. Derive the maximum number of components from the length field in the einjv2_extension_struct at the end of the BIOS copy. Map the whole of the structure into kernel memory (and unmap on module unload). [Tony: Code unchanged from Zaid's original. New commit message] Reviewed-by: Tony Luck Signed-off-by: Zaid Alali --- drivers/acpi/apei/einj-core.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index e74281f5044e..08cac48293a2 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -107,6 +107,7 @@ static struct debugfs_blob_wrapper vendor_blob; static struct debugfs_blob_wrapper vendor_errors; static char vendor_dev[64]; +static u32 max_nr_components; static u32 available_error_type; static u32 available_error_type_v2; @@ -177,6 +178,7 @@ static DEFINE_MUTEX(einj_mutex); bool einj_initialized __ro_after_init; static void __iomem *einj_param; +static u32 v5param_size; static void einj_exec_ctx_init(struct apei_exec_context *ctx) { @@ -301,11 +303,31 @@ static void __iomem *einj_get_parameter_address(void) struct set_error_type_with_address v5param; struct set_error_type_with_address __iomem *p; + v5param_size = sizeof(v5param); p = acpi_os_map_iomem(pa_v5, sizeof(*p)); if (p) { - memcpy_fromio(&v5param, p, sizeof(v5param)); + int offset, len; + + memcpy_fromio(&v5param, p, v5param_size); acpi5 = 1; check_vendor_extension(pa_v5, &v5param); + if (available_error_type & ACPI65_EINJV2_SUPP) { + len = v5param.einjv2_struct.length; + offset = offsetof(struct einjv2_extension_struct, component_arr); + max_nr_components = (len - offset) / + sizeof(v5param.einjv2_struct.component_arr[0]); + /* + * The first call to acpi_os_map_iomem above does not include the + * component array, instead it is used to read and calculate maximum + * number of components supported by the system. Below, the mapping + * is expanded to include the component array. + */ + acpi_os_unmap_iomem(p, v5param_size); + offset = offsetof(struct set_error_type_with_address, einjv2_struct); + v5param_size = offset + struct_size(&v5param.einjv2_struct, + component_arr, max_nr_components); + p = acpi_os_map_iomem(pa_v5, v5param_size); + } return p; } } @@ -932,7 +954,7 @@ static void __exit einj_remove(struct faux_device *fdev) if (einj_param) { acpi_size size = (acpi5) ? - sizeof(struct set_error_type_with_address) : + v5param_size : sizeof(struct einj_parameter); acpi_os_unmap_iomem(einj_param, size); From patchwork Thu Jun 12 23:13:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zaid Alali X-Patchwork-Id: 895762 Received: from SJ2PR03CU002.outbound.protection.outlook.com (mail-westusazon11023101.outbound.protection.outlook.com [52.101.44.101]) (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 B4DE22E2EF4; Thu, 12 Jun 2025 23:13:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.44.101 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770035; cv=fail; b=Xeo+LfE/julIfcidbbG5ksGsmt4RlwCuH3QzA4Yj+ZMP/XW3dsTcNC8h4r178z7LhqP1i3cDmh0+ejK/Acw6tXc/Xg2uCGikmy+Uc7C5fh/ZawaO3vZCaLX2kqQ3etgpt0k5nODKjxOTiqdU9L90/MYNsoq1zrln2OrWPLqkL3Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770035; c=relaxed/simple; bh=PuAstvfzSZ+Xv8JNyoid1C2KdE57FrOuGQREJg8fOXo=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kGIeVezkeiDbwS0QeIvR6V/ErMSekw1+q5P8+QuNzL/vU6CWRTMQXRxbWXeTr28CHCgUCsMI9hw0EgSDXLgyHuNNChbUQSnXT/16NxyxzvJ7+Fzyf5gTeVOJ6BZpnDZkTx255OLz55317x+J5CHX+TYEg86ZEocr7iiJ6YBTvcQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=D/HSKD1V; arc=fail smtp.client-ip=52.101.44.101 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="D/HSKD1V" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KouXXdyT22i/63akpin/emijynxQAH5j5T9LbbOBKpKzHz82jkQwycSyYIlfCA3byuCcELJZRlahOLZCzYvZclXoUb1gGY988puyzCuPX/YMcpV+ctsD2sSCRmCd8nmSCYpGveE5zh+QD4Y/xvlUs8mjbGUsGR+6OEqFe9kqYPuYAoGM0wiGDhFL+OwRyMQQ9/8eiAIKMsHAE3vOxNqOH+E9a9P4R3j+aJK8DVR8hivJ0q0ceme20fP8c2eWdlvsef8+bqRo3MEjV/15qX2vgAHb7CWFdTrS1igDQiiNBw0s9yjlRD8blOq4PdaVgMCXY3qaNHznHRINfwYsXihKXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BP4jsgzUxaemQyb8N9sXH3giTLCs5orhfORAS1wCAZM=; b=jhDGf5BWSLv1cYgmn0hW7wwwwQWgD52Q9fTCdXRL7FC/mnszRrSixh4GeYcQFgI2iPN6ujtlJY7SUtFN0Ge02cae75b1rtQUinEaBtONQbe02jKgVKCbfQL1T182tIPKTabJfi2xS7H7bfZCcdqBOgmaXIhLJRrCTVkkLqhiONZp2ikwVDrgmCcr/eMMHzR6gELDJ96ZuTYZAhZGT6tcJNOedKdZRV0Gn0ysylIrASGcJQ88MlDGAhyd1Sj9t2VfAuc63V56KXsiPjC3yuHhMkWzbzAkUDbg7US+/IoRy67nrFVL/EvRicqD9SLb3FUKhHioxt2fbEveikiKGSFZeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BP4jsgzUxaemQyb8N9sXH3giTLCs5orhfORAS1wCAZM=; b=D/HSKD1Vn2B6DB564EBIjjWTqmost0bYD2gJExd3BbogOtMOnfn+SDdZkuW6jrP+F27DiFBdI0dbJ5sZbLrXqSzu59wv/nkuRwaohnHAHnda+soxGIyC7OsU4W13b0HKEAElSAej0qW278t5oJbkK+fis4nQqIcsZyg9EGpWraA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) by DS7PR01MB9364.prod.exchangelabs.com (2603:10b6:8:24f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.19; Thu, 12 Jun 2025 23:13:51 +0000 Received: from SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f]) by SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f%7]) with mapi id 15.20.8835.019; Thu, 12 Jun 2025 23:13:51 +0000 From: Zaid Alali To: rafael@kernel.org, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, bp@alien8.de, kees@kernel.org, gustavoars@kernel.org, zaidal@os.amperecomputing.com, Jonathan.Cameron@huawei.com, sudeep.holla@arm.com, jonathanh@nvidia.com, u.kleine-koenig@baylibre.com, dan.carpenter@linaro.org, viro@zeniv.linux.org.uk, ira.weiny@intel.com, alison.schofield@intel.com, dan.j.williams@intel.com, gregkh@linuxfoundation.org, peterz@infradead.org, dave.jiang@intel.com, Benjamin.Cheatham@amd.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH v9 5/7] ACPI: APEI: EINJ: Create debugfs files to enter device id and syndrome Date: Thu, 12 Jun 2025 16:13:25 -0700 Message-ID: <20250612231327.84360-6-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250612231327.84360-1-zaidal@os.amperecomputing.com> References: <20250612231327.84360-1-zaidal@os.amperecomputing.com> X-ClientProxiedBy: MW4P223CA0030.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::35) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS7PR01MB9364:EE_ X-MS-Office365-Filtering-Correlation-Id: decf65e0-c2dd-4869-3f7f-08ddaa06cb2b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|7416014|376014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: fVmwEgisR8oJ+JJQb59SOTmNF+nbIjx6ZkQ8YePS+JmXzCsIq3eQpyWbLoqvAtBg68aUBGSJ4ekiadQfjzniQa4oFgJ0ja4hqV15b/hFQg9FXhXe+47ytj6ACLXrylVBQfXYPbTQRntU0c4+dJRKO2VKyOCspe9Cb3rujhcapznOQTYex3zOxb2eS8Y5BWkVlww+8ZirFoYaN7R0e28/ZqVIfBvor9QdFjwNScHgvhGEp55+EaZDFM261rCFg+Z9ke6/d9fiJte98K6hSyN+pldwXdH58oXJnM3Qn83+DUORkXSM2TzKQLUIgyC5Fxob076+nCw/Bua5hhEgiRhrwI3L57LB7aSIxRFrO6rlwduNoTPwSP2dr3JndqGtP98kTaKJ5Cnu0KxaxSO8gxInlg0gZGBR92JRFifZ0y1fP2zCbTHb0ir1qOIGRk0o25m3aTrXVHfnqcbuSyZqeAZPBd6lljl11h8Ki81PHpBLgA6QnulDM4WcrHDa1eLwYN5emPcMilxa6G/PxV2e+XDXLd2SoFUXMiz8US47ZCKSK28oIF4g0WBsPnEUVOl5myo7sJkVjSDiJ2xw7rb1eqzYM/AL8rDqTlZXCyqSSd2pnjBbHYKBaMrysGD5B/jfPRx+gkOB6Rqqxk0idYWFQKsdTWUgqIRAjYLnQcZhFwmJZMUmmTFE7b79DoxHuUMgFvOtg9lQIcm4w/ISiirXIvFCkCZguQJ2sbJZ6tw2+LdqAT+tkXPCLFucHrc0lN/h7tgsbJK5L+zOYgT+I+t8C0stA2Yf+kf4Rp81020pNdp4bt/1elVtRIhVbRW/DVpKcZh3oIe2MnCzmiuq8ClPrtAbjZZQgx6mmXt6ly/v5aPFKk9IaNdzDj7VYgeb6qvtKrb8/6AgeKsQaaAe4R3CElgz17gUB96HmXzhpETrvKzl1zTkSzLclwX4r3iP9l4Y/r/lpKLpM6qO5Sa5q0f3Kulc1dlnMa8xfmZEG7jMOZw+cjZIGDodKx7VGuKYq1FQBeH3bhnV0aNWyKzghvD0Aia6ib4GcrKAayQDzVapz6fWVt2MIEGE3cbq0gEucGAYNK9P9ugMSnIZbKrkfGZYx54+OlrGUZ5IFkPF0AbansbdG6985fH36Y4EbN0R4ZScy/fuDVUhwbUehdJBJZymSJmUYjyVuho4HxSGvNwHJXlYVym4vVH8Hnynx9Ut666/PUPwehzcRgKIcTySlYIy0LnK25om/BEiHYk6Pyn0YBx9QKUmd+lODfgDjvKq4TekwrdWXVMMqFhrn+bsU23YisGU9BEVlMODGDqj9LfGBMZVWVOiJNgcMmO45RgGkiE8cj5lgNOGwf+ix1J51wEe6mgCdPY5Yjf+UcrLuNurDEst2NRR3TFjHEYQNO5Em/MEUkGDk5ifB7LScYMD2UzGS5GX93yaZlnF1EDER4hmsKmMsWeI6NnfQAXYWmclA8qPzX28WO9RpgB3gYdBC5EZwj98wfbgF2rjbCiuuEbLMGwYoRY= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR01MB7903.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(7416014)(376014)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hO9ucTRdNVWDDqfvMBvhdr6+VkLcQCD1YPNP9rgc/bt+sGZTJnGbKJ8fNwfjAywTq50oKXXmKV7sDxUpSPCcPIOfkR9q/gIvmZ4tCjAytMRuVA2//6ChXf4Sy5HpNT4GZJHyXwEm5x1UUKrmGRHcQDK7hOailI/pFTq5Q+xvN3Oh+Pdk4Rx7ed/d57n0UZ6pAM/GG5A1Rn2oSqfmghMZHgOtlC3FO3867ivxOPS1CEcH26J/47EyTZ+TJeHWnmI/dGCLejyg2awd6g3B6SmgIGbSl+lUBPdRv1tUofv1Wc+94JGXNyzMgI6XLmPq4XacJ9nN2d3QjTiu8cBD3eWO5vriS8Rx9T18GvneGKvQoqUJAMBVPw1bSCrbWtSPg406JXiVOI7vwp/1mM5lMKMPwyxQmM4GPW9R1IcrIgO/RP7wcdBmLRf2MQhKw6Jmzv+bLYP+p8p0Mjn+YsQrvQSzD/RMqjtgFooeAKQ3xjTYwEQSWKS7129RhaESW9V9tLiWgHOXFpFG0vch5J9tqEzBitySG3F/ulwa25FBxCGw4dRqFoJWVhuSI4cVzuDdhKqejXVwsIHTPC3092vT0E/9JFH9OmojjalkwFa/bbRa670q5Tx7kSc1qjV0RziI7e0KuzlDMvBjGTnOsomOeN7PSrF64WksvedsRZxGOgG1qWFgo6uoVG95aDRmbY/491Gg7C92KTSRpkh/znAjOqdMZKGTcDoCvPZluA0c395kTzW+frG4HVthK+vrVIeG5fK+YCsVxQMPAZUuR5u8qbSxHyA5JqLlvKbQhDYrwIIUHJXv8JrsyDzYnyUqpkxKkTHzzTdh4XrvZo78GUflG8cLiCVCRM9zPD0Ozw89qaIAWzOc5+1EPLjQUFbJKVxfhlPDvnhI9l2OPyvFjCE46NYqWWHEhqdnKmufYoR3rI0jtefin7yXJXeumhx8p4NxJVb5r3GTboHgP8uB64mNb1keTSoryGWAXzJ3xFjjG5e0ma/liygWWp13e2lw2Ex44aXvc+O5fPy/mC9WHj2a928S/wtS5S/oHx5wVOsuEgcKBbYMNFyc8LgQnvTi/97JI5OrS3IP0KdhcYpaX8Hd/5Y/xie2m+sD1Mj7mcEf3FRkrmTaj4u+2ha1Dcy+DrraZBDd2BHW+UC/SXZtrpNnro6I35iCm/efuslD7rpbSXKcK76kuzc+sQIOL+arDZ7bCyJp/7YAoAtQ9XyVkSNOkNy+jdxw8xrtZYM65PrfHcQ0aFN8CmSXdU39zYTVFinNoMiZDYESv57VDdA4riwstXWRR6qg+Sz5QK0l85yAtyDO0/N244M7wPvcFvO+z60zXI9sFaYWXkx9gy43miAU96J1U+4Eq4A3y6LGXVN1cw8B97O6U7ebMe184AQFd7ZFtjF+nVTRZpcfWTggNuwRlJFlXn1nWI6nJUYsRoozipkgvUu9kTFvePUwODaDkCKEKimtVics5KImHZZ6L873X5Ejda16iYERCTmrW2/jWlL/uY4kVC20nP0+eLtsfe2mRD8Pik5IIAZNb67bf8J+ft5BQvqpYsJTZzpxpL9RX6qAGWJhn2DnYDgtgN9BoJNxnl+Hc8ir6tZBoPLuU4Vu0M3mN0cEN25y2z9Ewyo7CMesTWc= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: decf65e0-c2dd-4869-3f7f-08ddaa06cb2b X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 23:13:51.3315 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: D+y2h65CpzoLquXNw7uFs/jLKVMFOeT+aIjJA2T0ocHaPQIUhYOc7CE5/BTiL5ncmtSbXpT9imQefW+SzesGoOJkUx6GAgYYSb841/VUpHJ6FeflKLe/QujhnwGDDx8n X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR01MB9364 From: Tony Luck EINJv2 allows users to inject multiple errors at the same time by specifying the device id and syndrome bits for each error in a flex array. Create files in the einj debugfs directory to enter data for each device id and syndrome value. Note that the specification says these are 128-bit little-endian values. Linux doesn't have a handy helper to manage objects of this type. Signed-off-by: Tony Luck Signed-off-by: Zaid Alali --- drivers/acpi/apei/einj-core.c | 98 +++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index 08cac48293a2..8d60e5f1785c 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -33,6 +33,7 @@ #define SLEEP_UNIT_MAX 5000 /* 5ms */ /* Firmware should respond within 1 seconds */ #define FIRMWARE_TIMEOUT (1 * USEC_PER_SEC) +#define COMPONENT_LEN 16 #define ACPI65_EINJV2_SUPP BIT(30) #define ACPI5_VENDOR_BIT BIT(31) #define MEM_ERROR_MASK (ACPI_EINJ_MEMORY_CORRECTABLE | \ @@ -110,6 +111,7 @@ static char vendor_dev[64]; static u32 max_nr_components; static u32 available_error_type; static u32 available_error_type_v2; +static struct syndrome_array *syndrome_data; /* * Some BIOSes allow parameters to the SET_ERROR_TYPE entries in the @@ -711,6 +713,7 @@ static u64 error_param3; static u64 error_param4; static struct dentry *einj_debug_dir; static char einj_buf[32]; +static bool einj_v2_enabled; static struct { u32 mask; const char *str; } const einj_error_type_string[] = { { BIT(0), "Processor Correctable" }, { BIT(1), "Processor Uncorrectable non-fatal" }, @@ -847,6 +850,98 @@ static int einj_check_table(struct acpi_table_einj *einj_tab) return 0; } +static ssize_t u128_read(struct file *f, char __user *buf, size_t count, loff_t *off) +{ + char output[2 * COMPONENT_LEN + 1]; + u8 *data = f->f_inode->i_private; + int i; + + if (*off >= sizeof(output)) + return 0; + + for (i = 0; i < COMPONENT_LEN; i++) + sprintf(output + 2 * i, "%.02x", data[COMPONENT_LEN - i - 1]); + output[2 * COMPONENT_LEN] = '\n'; + + return simple_read_from_buffer(buf, count, off, output, sizeof(output)); +} + +static ssize_t u128_write(struct file *f, const char __user *buf, size_t count, loff_t *off) +{ + char input[2 + 2 * COMPONENT_LEN + 2]; + u8 *save = f->f_inode->i_private; + u8 tmp[COMPONENT_LEN]; + char byte[3] = {}; + char *s, *e; + size_t c; + long val; + int i; + + /* Require that user supply whole input line in one write(2) syscall */ + if (*off) + return -EINVAL; + + c = simple_write_to_buffer(input, sizeof(input), off, buf, count); + if (c < 0) + return c; + + if (c < 1 || input[c - 1] != '\n') + return -EINVAL; + + /* Empty line means invalidate this entry */ + if (c == 1) { + memset(save, 0xff, COMPONENT_LEN); + return c; + } + + if (input[0] == '0' && (input[1] == 'x' || input[1] == 'X')) + s = input + 2; + else + s = input; + e = input + c - 1; + + for (i = 0; i < COMPONENT_LEN; i++) { + byte[1] = *--e; + byte[0] = e > s ? *--e : '0'; + if (kstrtol(byte, 16, &val)) + return -EINVAL; + tmp[i] = val; + if (e <= s) + break; + } + while (++i < COMPONENT_LEN) + tmp[i] = 0; + + memcpy(save, tmp, COMPONENT_LEN); + + return c; +} + +static const struct file_operations u128_fops = { + .read = u128_read, + .write = u128_write, +}; + +static bool setup_einjv2_component_files(void) +{ + char name[32]; + + syndrome_data = kcalloc(max_nr_components, sizeof(syndrome_data[0]), GFP_KERNEL); + if (!syndrome_data) + return false; + + for (int i = 0; i < max_nr_components; i++) { + sprintf(name, "component_id%d", i); + debugfs_create_file(name, 0600, einj_debug_dir, + &syndrome_data[i].comp_id, &u128_fops); + sprintf(name, "component_syndrome%d", i); + debugfs_create_file(name, 0600, einj_debug_dir, + &syndrome_data[i].comp_synd, &u128_fops); + } + + return true; +} + static int __init einj_probe(struct faux_device *fdev) { int rc; @@ -918,6 +1013,8 @@ static int __init einj_probe(struct faux_device *fdev) &error_param4); debugfs_create_x32("notrigger", S_IRUSR | S_IWUSR, einj_debug_dir, ¬rigger); + if (available_error_type & ACPI65_EINJV2_SUPP) + einj_v2_enabled = setup_einjv2_component_files(); } if (vendor_dev[0]) { @@ -966,6 +1063,7 @@ static void __exit einj_remove(struct faux_device *fdev) apei_resources_release(&einj_resources); apei_resources_fini(&einj_resources); debugfs_remove_recursive(einj_debug_dir); + kfree(syndrome_data); acpi_put_table((struct acpi_table_header *)einj_tab); } From patchwork Thu Jun 12 23:13:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zaid Alali X-Patchwork-Id: 896017 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2115.outbound.protection.outlook.com [40.107.94.115]) (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 B088B2E1759; Thu, 12 Jun 2025 23:13:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.115 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770040; cv=fail; b=p91WWMarrd65mTC97yS5JAgbbSFDJ7ugt61XrpZ6Dal+sqg/WypNx0z/ALhG2jEL5jEuDylbUMjY19/P7iIgkzBa7cTJyCQZ4KL4UojsaQwkUnMDgTR98yvpFuPhkEIeBdtPrFyBt7684EAc3g7zRb87IXD+3QCBfOIQtVM3qwQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770040; c=relaxed/simple; bh=75wpIZ6Te8LkEPmcVHvuzGO4W8cYfdVxWbM6hs9pm3A=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SvUo1Dh2rIhGUbvvN7nHkfiffSLh+83mmTYnMbJBudHJRaKKYxZX/WBLVgXb6Lg9yf/Vk1tgkPb2qqDKx/7qOyK5fVkip8fd1awZ8dvM2njjtNlFWx9vkBmOySAudDRddk6Sy1jx0m1hYn+nYMGj3JL2Ql06zjEP+usYcujP070= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=HgdARVkJ; arc=fail smtp.client-ip=40.107.94.115 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="HgdARVkJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wTFxDSbuhUlw9pv/Ks+5JJLSNFicFaw8ybhX2E6zbIKwW5HQ9BKyDh0Rjs21lt3A1MG6l2tzbSqc5z3GFzR2f5gb9muLydUX5DLFAR3FjiIZqWK9vLcjG3hnwGZ75fIHNl8Xl61V+pD5mw3yhhKPCUHimFIXtUQaACgAz0qN5jglbqUGxHwNpZSsb2E5PGNQjSOHWJ/SNijWlasG4xkM4qbeURYJ/+hmXuArbc4rBvRDxoKitteiQEiO8wWhBIB06uerogDJGaQOgjSq1zakgJRBS/IYhn+WkdNANFXJl/44qiYLenljvj91VJ/VIRZIRn5KmpdCmVECveWGhTd/ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1pmjJ+WmZlRIODULlPCaE2smD2KclfxSOQh9AnYSwj8=; b=Po9e2YeTgAZHwSUAPt87tKask1ovbF9qzQ9TBxDwWuTJtGuvHhrKgYA4ZmA8gkEjOy5kqypg0Pz4XA2e546vyPMzECR79AnjlQW+uwS9ujZpys9gZOU4cCGm8I+PCaDMjzVTnPlKVexBas/6867b30MdfDzMWP9RdpvTqHiHrYa58OMK3htkfzubWNvYklBg5MpjmX/02EyBCX88SJxAGUjm72+xqY+uRwEDkR+D3NZIwy6GPAshu6Dy7PAdyP13e4jsB6PH6QvV7NEQjJiZULxkDxU2vIYOp7itvJnZzycauYWmcjTxNm31kN2twLHy8M90tDIFh/ih/MCEp/F0aQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1pmjJ+WmZlRIODULlPCaE2smD2KclfxSOQh9AnYSwj8=; b=HgdARVkJoCdEQdepqLyMtn7Z0uU1njvoEsR1iTgln5ZY3HEuSnocOw8wn9fdTPuSdkD5wioUYFdq+TrH32SCkV8R957xJ9Fy/DuYGjcdzclXUZAJe0VPhRdAxbEyIFX/z8MoPebPe/CBd5uJYuRMaFspJaB0oxQMhMmInRzRWHo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) by SJ0PR01MB6382.prod.exchangelabs.com (2603:10b6:a03:2a0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.18; Thu, 12 Jun 2025 23:13:53 +0000 Received: from SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f]) by SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f%7]) with mapi id 15.20.8835.019; Thu, 12 Jun 2025 23:13:53 +0000 From: Zaid Alali To: rafael@kernel.org, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, bp@alien8.de, kees@kernel.org, gustavoars@kernel.org, zaidal@os.amperecomputing.com, Jonathan.Cameron@huawei.com, sudeep.holla@arm.com, jonathanh@nvidia.com, u.kleine-koenig@baylibre.com, dan.carpenter@linaro.org, viro@zeniv.linux.org.uk, ira.weiny@intel.com, alison.schofield@intel.com, dan.j.williams@intel.com, gregkh@linuxfoundation.org, peterz@infradead.org, dave.jiang@intel.com, Benjamin.Cheatham@amd.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH v9 6/7] ACPI: APEI: EINJ: Enable EINJv2 error injections Date: Thu, 12 Jun 2025 16:13:26 -0700 Message-ID: <20250612231327.84360-7-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250612231327.84360-1-zaidal@os.amperecomputing.com> References: <20250612231327.84360-1-zaidal@os.amperecomputing.com> X-ClientProxiedBy: MW4P223CA0030.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::35) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|SJ0PR01MB6382:EE_ X-MS-Office365-Filtering-Correlation-Id: d9d13148-32f0-4192-5d05-08ddaa06cc73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|52116014|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: rA4jGIAF3d2XTFD1U/DYqbxxhbFM7W1anmETtOLG+BM/avVbAdKhLvoLxLPc7l8SMA5nPO0aVZLAhHlrlYMs4dvwWIx2AtM/AWcZ1WH8FtyDht2V48ea7iGrZI8wuP2DVR4Y8X+zGDyR+zCWZ/zKvL3WaxEJfjvyu6GPdNv/AiBwqU2OzT2TLhCIEi0XON73i2JHWordNGoY4OhjfIolFY0+KKk1muO+0CauL7yF3qB4HIERPhmVoQgc7WKCHW2LayQcDf871Kmllb45bBbpazXDKAHlbwZ2UV9pCZ9RbHRzwQBfAt2M+glIOzH+9xijO1EH/2cNmxUjG2yNgHDTfumpWhN9ggtWrowWZyNvzck96AOsLbwLXlZbI7mlPLmyrXsiWh+rcxgdtZFsHgDBwTCSi7zTbFTOrSy7v2IpIgycW6//lrsLVa0p5m9/jT1dOdWzYNVDcsSsFzwSefUbz3ZwCkgQlj8Y2tLU1euo0q6nUzUhLErjaqEfciYZh3dvgg/tQ+Wrx6S3A5zQXoNtnfejyR7dzYV728VMhsMrAon2cnnhzpcSMz4s8tSNcvW9Ee+3clRlVuZvoQDxehlzzkn9CIaUVEVRs4ItK2h0H21ofJ9fFt0fJ0Pi26pNkgekFP3JlLOGNLeKYsS4YymrKmYpcvZoRlh+XnjRqfZGsoDkqRFGhTporqQSYlAnnQ15ToUqu9tAVLvPDujt8tX8bORItTKw5ymL8mSkcfLaLjRgt1aF8wQQ2lsuvgKLufPecnTZ9780hVtFiW3rJtumPMaujZufhHLvCcW8/axAS8J9ANhnPsODIv/nwHEWBv0MQgi+fqj7Ru39lxY3r7meXhyEYLpYApGwkazGgknnB0N58+HeszADs75Y5aV/iGvCqqEEL1mGBOpFlPruU1PCQaQXc5wZAC2xFKEFZ2mcvzciwcPXkvTfdeEv8WYYC/Agj0ZGV98cNWPP/T2wKePTF3AhvDE2bESXhIhpUXJk4lUgY7Yvf2oNYAJRDI8qtj156XSSw+DOtB1lFe2zNAmCBuYpjAk0QC+0+R3VGxY4e1N9bUAkfWky0RH33H/w7NsJ7+UIvm7BgAZkHEwdrMFZ0hb/AAUg7NS5blTf08WzDqQ6QaK1Tb2vU6Xs3Dme0EZ8xbQ4I6MkLob3CsfImXTJQVfMSmz/kMAiDzotKS48n0c7zAwsZUXTUPV03rSSmzlVrQnvd4tRzOcBIibL4q8jcG3PC/MEXKDwlrDWj/YDgYycUi2o3R/+vIAd/nYImHAAIydBZ7mPncIE++75IEFcLQI+JCR1cbRScl3Ruv5qy6ctS/T93ivI452UnbkOm65P9oHzOSTyTmlMZ2MHOFIncR9DL4i/GSeNEscYXAzRVnbslrHJNrMR3SkDz1ND/ABPHXQ11AF7t2vxJCjFcFTRrTgBegJLJqEUd8TpJg8Oh5BT3v6Lw6YGWD5gOrT/OtskOim+jFL6tbHWBc81QDFqyOtrVeQkSK1f9x+Ndz63GOc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR01MB7903.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(52116014)(366016)(921020)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RuV9Xs6oaol2iGJs+sSrmuv2kQ6iZCXzvSva5Ht+zfCdRuVdw4TzOQpi75j/aSxU7zjyKcyQBtWy6gEUzKnG0rluy2VqIiQ00KZkA+jK/Gx32QhOIsySXnYccLUmtzROgcZdGdl0fDCMr38ancpoxvvdYHHJmLmHFG7AOY7qc/qZHr+NLOCWK7t1tfdgZLh9d7HSjFp5wTbxJmA3XNvQKQKrAqreDFQiB9FpP1hjdsvfThxy/bYgx9BbmKFS3XJ+hxHA+QVYhVQUkdVVb9NI2lQz+kDw6jfa9QvEm1/wIx0OXrUhpOW3nKnKuhcBTId5fvj2pWfNDSGtpgTTc0BmdXttVgxkIgLgiHPuO9mU49w8QUXPMRZ2rPskYZOgrtDi6/RQxeC1zOqrv32sQU8Vs3vUqkW+zXDGbjaOXCmQ/KoLyXisAVa8IuwsNznZzBtyDT5vdGWN5sPoPQ2toYEWHV1R4kqazj804pt+mvCIn4pIRMOeTuNnOb5JL7bR5HFD47l8RAGV47XKAJ3/ZvcTq7+jB0kHJMcO9Yim2AD11uRlacKGrvw5JGWLME7ZRGYgd8fGwXchwnYB3MNXI9IE9A/ojimB9avIP0JJDBqmYI8qTl20wB8DGVPCs9JL3KzjJvAoCjoOetqtqhq/7yldG82nqifn7LQrJsp4YM9VaSqe2S2F0dd1iU9Ov+10N/dKjcHgOt21MycUJaJekrdGPCivrY4FH7/WiDUz/T+B1MzAmdjM3Q+L7PHfdf6azHC64/8Zd6FcRszPOpwBEmYuTgQoMD2O3Gkg2Fo0Im/khNK5b9xUtCDhQtLCIiHEdYS5pfc6KMbheBEiO26Lm+BzwayEd4KM5nuDIGHyti/xII/9UWCvbKIYG1/w7/WJcPOOz5LgJgfZXgh14RxlIcb/SSiZmRwrTgkfyxpGDXgY9iLfg/TUHMsPvDhMEocXhKrfSgeONW/qgfvA4HqtDsvhplQ4j/FGYnX4xQc5yvJGD4zuiLa3+Uu/OXy7Fy31+Qwm5xakHT9IMYtjA6QovUkNOqJRDcLcZD7Z1dPmQx+bY/kLPZtHnWpFdOXocRxRqG2v5il7wemQ08tQPxWH+4TnX37GdFC2xjcRR4iaMc6P3HyfWZF0Z/Liyp2upsPvUxn3h9RgU9pCJqNCVoVhiz/2MbJwBagjtxjErivWix5lqY4/PeexPKzGXqt6WtD8txO/N2m0+VfaCQ/2C4efhTmOgWIV40Nxy9aTFlEX3F/+smqCotY6cqTvW8hGd+8AnJAvgcjWK3zMjOMtElgQqbWp071c015TEOmCJ2X/NJacUF0E/4QogqHWmbKG0BdOjHvYcBs/Xsc41LkGIZWhgWV9QUPp9VYclEjwADzsCo6Z0EqWw+U0XKv3lLbW1r9VskrT2/BCVUs99m4S2Lgpz6hiiVIs2kKentVRefn1X0LqhCuvaS33/bSxT0WjGsVuAmpxzBISHVNQ+22tEG0rLPe6kULDscCF7tc91D+7fn9Te8x9O8Gdb4nPlFabLEtoZdQ9DQ47+CML8rRNh8fDSiZ/893ARaqU6xbb9vXFwqk4eZNZcgJFon5s1ZoEkgsMe0LEmbg6MuT1xjjIj7KPM9mpZjOuNl4hPP1ECMlsLwZn1JU= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9d13148-32f0-4192-5d05-08ddaa06cc73 X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 23:13:53.4921 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9H4kUiM7igu0t/TMrOKT+RXMT11z99BGFVxwFaiW0843LxBzB4ZBfo2JYsANMlHtOXFMnkHODFpaOXpdSt7rvev9J7nZmxY7svWaYfXK4ZvYorX9QJeOOLB5VMaTTSCa X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR01MB6382 Enable injection using EINJv2 mode of operation. [Tony: Mostly Zaid's original code. I just changed how the error ID and syndrome bits are implemented. Also swapped out some camelcase variable names] Co-developed-by: Tony Luck Signed-off-by: Tony Luck Signed-off-by: Zaid Alali --- drivers/acpi/apei/einj-core.c | 56 ++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index 8d60e5f1785c..7741c2082f33 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -87,6 +87,7 @@ enum { SETWA_FLAGS_APICID = 1, SETWA_FLAGS_MEM = 2, SETWA_FLAGS_PCIE_SBDF = 4, + SETWA_FLAGS_EINJV2 = 8, }; /* @@ -181,6 +182,7 @@ bool einj_initialized __ro_after_init; static void __iomem *einj_param; static u32 v5param_size; +static bool is_v2; static void einj_exec_ctx_init(struct apei_exec_context *ctx) { @@ -507,12 +509,20 @@ static int __einj_error_trigger(u64 trigger_paddr, u32 type, return rc; } +static bool is_end_of_list(u8 *val) +{ + for (int i = 0; i < COMPONENT_LEN; ++i) { + if (val[i] != 0xFF) + return false; + } + return true; +} static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3, u64 param4) { struct apei_exec_context ctx; u64 val, trigger_paddr, timeout = FIRMWARE_TIMEOUT; - int rc; + int i, rc; einj_exec_ctx_init(&ctx); @@ -521,10 +531,10 @@ static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, return rc; apei_exec_ctx_set_input(&ctx, type); if (acpi5) { - struct set_error_type_with_address *v5param, v5_struct; + struct set_error_type_with_address *v5param; - v5param = &v5_struct; - memcpy_fromio(v5param, einj_param, sizeof(*v5param)); + v5param = kmalloc(v5param_size, GFP_KERNEL); + memcpy_fromio(v5param, einj_param, v5param_size); v5param->type = type; if (type & ACPI5_VENDOR_BIT) { switch (vendor_flags) { @@ -544,8 +554,21 @@ static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, v5param->flags = flags; v5param->memory_address = param1; v5param->memory_address_range = param2; - v5param->apicid = param3; - v5param->pcie_sbdf = param4; + + if (is_v2) { + for (i = 0; i < max_nr_components; i++) { + if (is_end_of_list(syndrome_data[i].comp_id.acpi_id)) + break; + v5param->einjv2_struct.component_arr[i].comp_id = + syndrome_data[i].comp_id; + v5param->einjv2_struct.component_arr[i].comp_synd = + syndrome_data[i].comp_synd; + } + v5param->einjv2_struct.component_arr_count = i; + } else { + v5param->apicid = param3; + v5param->pcie_sbdf = param4; + } } else { switch (type) { case ACPI_EINJ_PROCESSOR_CORRECTABLE: @@ -569,7 +592,8 @@ static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, break; } } - memcpy_toio(einj_param, v5param, sizeof(*v5param)); + memcpy_toio(einj_param, v5param, v5param_size); + kfree(v5param); } else { rc = apei_exec_run(&ctx, ACPI_EINJ_SET_ERROR_TYPE); if (rc) @@ -631,10 +655,15 @@ int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3, u64 base_addr, size; /* If user manually set "flags", make sure it is legal */ - if (flags && (flags & - ~(SETWA_FLAGS_APICID|SETWA_FLAGS_MEM|SETWA_FLAGS_PCIE_SBDF))) + if (flags && (flags & ~(SETWA_FLAGS_APICID | SETWA_FLAGS_MEM | + SETWA_FLAGS_PCIE_SBDF | SETWA_FLAGS_EINJV2))) return -EINVAL; + /* check if type is a valid EINJv2 error type */ + if (is_v2) { + if (!(type & available_error_type_v2)) + return -EINVAL; + } /* * We need extra sanity checks for memory errors. * Other types leap directly to injection. @@ -743,7 +772,7 @@ static int available_error_type_show(struct seq_file *m, void *v) if (available_error_type & einj_error_type_string[pos].mask) seq_printf(m, "0x%08x\t%s\n", einj_error_type_string[pos].mask, einj_error_type_string[pos].str); - if (available_error_type & ACPI65_EINJV2_SUPP) { + if ((available_error_type & ACPI65_EINJV2_SUPP) && einj_v2_enabled) { for (int pos = 0; pos < ARRAY_SIZE(einjv2_error_type_string); pos++) { if (available_error_type_v2 & einjv2_error_type_string[pos].mask) seq_printf(m, "V2_0x%08x\t%s\n", einjv2_error_type_string[pos].mask, @@ -785,7 +814,7 @@ int einj_validate_error_type(u64 type) if (tval & (tval - 1)) return -EINVAL; if (!vendor) - if (!(type & available_error_type)) + if (!(type & (available_error_type | available_error_type_v2))) return -EINVAL; return 0; @@ -804,9 +833,11 @@ static ssize_t error_type_set(struct file *file, const char __user *buf, if (strncmp(einj_buf, "V2_", 3) == 0) { if (!sscanf(einj_buf, "V2_%llx", &val)) return -EINVAL; + is_v2 = true; } else { if (!sscanf(einj_buf, "%llx", &val)) return -EINVAL; + is_v2 = false; } rc = einj_validate_error_type(val); @@ -828,6 +859,9 @@ static int error_inject_set(void *data, u64 val) if (!error_type) return -EINVAL; + if (is_v2) + error_flags |= SETWA_FLAGS_EINJV2; + return einj_error_inject(error_type, error_flags, error_param1, error_param2, error_param3, error_param4); } From patchwork Thu Jun 12 23:13:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zaid Alali X-Patchwork-Id: 895761 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2115.outbound.protection.outlook.com [40.107.94.115]) (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 96F632E3385; Thu, 12 Jun 2025 23:14:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.115 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770042; cv=fail; b=XBZrch46bI6xmYF9/juoNrqQ6i5dkYxSKsVFPbh8A7XIF3mh63S3iJ8kJOufxtZp1JuXYTgaZsrqJJLQqm372k64UU0zM4FfWCfKp5ub60c9vyhVVcSjQpiwq9oOxZL0tS0cg6ycPJEaJkbUXLkooVxnddbfLAFxkRptQ8vhuP8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749770042; c=relaxed/simple; bh=oLJQbI1EF4mkNGO3lt/Qbq+9IYNag87qeJ9lC7J0GOQ=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=l+I0zH5tOP42aYt2GedUoaigMTkZx52J9ZlE3UZ95gk62yyUJBxbb48yjVneb2Rh6876iWmvvg7ABDB6N1/dtVRF57FK1g+Uc6dXHK5FPInqolZuuPvH+GUByEgIpDLi7YPcmIOhbD3DhNPmZ0T0zrsW8uHZ8nrd/WZLIfOyJOg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=d8swLLh7; arc=fail smtp.client-ip=40.107.94.115 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="d8swLLh7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Axfv6Ei0SKBKFnVSAtRqrhFymwo0yRQryrxLUAtb+6F0gL5SSU4jdt7XXF+7SbrF7QLjoEc+nXmOWs2AHPzp6GQw8BoGAq9yBh9fDYKdHo3JzrD7kkqVtCQbq14Gr02r26Nrkj1A6oYx6TcoW9SHCWps+Haf1ONvfkKSGXK/POKeY+Ia6l7HT782vwz8O0K7xuAnaEnGclUH03a5QN/vfw+i95epgpOkhNkWXynf+s5u+aZVzSf0KtxbQl6ICaWW+KDbxXYNOHvoRFlo+Pj4jZc9yL8dz+ylCpmIlZE8xG2JmPavxntG9BWFgSqtRJNRMLjcGXCfoyXj63/lRpMSiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pSPKTTiBIc8YfRhqV87VCulc/UzyuXW8QrhaqF3yRAs=; b=DPa4Su07uFIXnF59huDOic4v876PlYR+05wV4Sret/7uMK+9+V1IPu49wh0lxG16FjQFPJG2UaIYJG01plIn73CaSan1DQzRMD4Cra1u3TfDs+XgGkRcN63Djnai/IvZahJIFgZdjzKjNwhKUt+mCkIYxwZh3KEwaM+iHAxfkkwsNiclsS+frscKbfWprj0eMCVDvTWOE+VEjr4LcAUdRZMDXaP2Su9Xxc2duqvtVlnmUJ64FFTsz5eCrM4Z1gaJYEKJIRr16YYGcPZ3uH+AJf363DtCyiTZjUhYvDIasze9nZ288rEl6y1ZtMI1tKkjIEMRZ7YoLwfFD+hUoY+D5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pSPKTTiBIc8YfRhqV87VCulc/UzyuXW8QrhaqF3yRAs=; b=d8swLLh7YYqkx+jzzwT02uAtIjta275pOo0tZ6mYihfdbvHEDgkCTpmleHGevGS/zniImdfO0pa9quPodgTRi+xpPqFR+AJmeWA0Y2AjHVS8JunrlNcODWlE/LmZwVb7MeivZZpyNuQ+W5rWnguc3jTkmTnVhX0IkkVu2AbwWjA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) by SJ0PR01MB6382.prod.exchangelabs.com (2603:10b6:a03:2a0::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.18; Thu, 12 Jun 2025 23:13:55 +0000 Received: from SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f]) by SN7PR01MB7903.prod.exchangelabs.com ([fe80::cf45:9855:a64e:382f%7]) with mapi id 15.20.8835.019; Thu, 12 Jun 2025 23:13:55 +0000 From: Zaid Alali To: rafael@kernel.org, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, bp@alien8.de, kees@kernel.org, gustavoars@kernel.org, zaidal@os.amperecomputing.com, Jonathan.Cameron@huawei.com, sudeep.holla@arm.com, jonathanh@nvidia.com, u.kleine-koenig@baylibre.com, dan.carpenter@linaro.org, viro@zeniv.linux.org.uk, ira.weiny@intel.com, alison.schofield@intel.com, dan.j.williams@intel.com, gregkh@linuxfoundation.org, peterz@infradead.org, dave.jiang@intel.com, Benjamin.Cheatham@amd.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH v9 7/7] ACPI: APEI: EINJ: Update the documentation for EINJv2 support Date: Thu, 12 Jun 2025 16:13:27 -0700 Message-ID: <20250612231327.84360-8-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250612231327.84360-1-zaidal@os.amperecomputing.com> References: <20250612231327.84360-1-zaidal@os.amperecomputing.com> X-ClientProxiedBy: MW4P223CA0030.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::35) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|SJ0PR01MB6382:EE_ X-MS-Office365-Filtering-Correlation-Id: 3e46b068-b58c-4217-5110-08ddaa06cddb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|52116014|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: 6Oe5GaYeFqOsd9vdsyERNhTdGpqN95l5qVTkphTyKgoTyV89ZjUzDqFSSpEtdRQNRT1l5oKFCHGsp+hp0j5DwvPd0hTkTslXa7fRYVeFyfRyLssmlmh6ElzRmNo8uGHbFCKvzE8hVnUZMdbmZCH+IiFod5w2O4qbd9BgF9Xnur+6X73WVqccd9HVcwZWWiJvXaEwzko9ET3cmtO8sjew6SYFzPO4V1WCktM+zXNdCqQMuWni5fJfU3OnkVaJS/lNF9v1Aj3nJMdnVblJKcj79xnYgZ9YTlqeIK0dpsM+ko0KdOlnFe4+DNJ3KPh5DRoZMcvdMXCUuOrOQhWgGzGdgP23L/LAumX0pSVxMFkC+UWyXI8015GLW66q7PSsujNHqU/0Q0+akcDvTnjcDemY1RqDnWikpNbS9/d4y2s0wtnZkqvBYX2iuK1xwgnIC0e3fjvlplvxGe29j8NvfnmDv0x3QyBvTpqOX5TKar4hi8CV6sA+ZZhnR6GQaONB9eVlrZxGk2ixc/GqhaYJddMcSOnXQi8tPGGR8bckKRRsVURB3F3Ei6uiS6cgv0nYSC4STwdKhN7z/tYTjb4OKpT0mKECxCJV5Czu6wk4ZcNxk5R+rVyJPygiKuxbkWlCFL3eHFATJSq6Xw8Or0E+t/rIb0CErHrTLCuZQvf/w36faKjY6E7Un/aiCnuvZMA1XF4EcoXlO0spxRh6nOf3sE3LqFWx/+Rilj/CToSOg+DDI62lRH15bmDYvMJUtbIe7/40z1Hoq21SqG/Glv6NRNyKAuM3JbDHc5FXY23Np8ArPNr2+0nKId8s0nh4wCMV5Xqjaj2O2hR+96cTHm68xqNvLSEmjLDIq5X0xNgE++l4XHgpc9l6wSH3m8PzivaAo8EpAQ+ta2Xd+i7LnfcQyg6VkhC3S5WGH47XtAEA7ec3UIgh9hOG8cibd9hwwSJxO/60TTGHFDlUq++9TCDULg9O3FINRLFxLVaYy9+7BHOdASI1sBxIWXbQ1AaAa8OO0BHIx28+MKnjloFNmBKe9J/EzTNIm5KsE6Drt7CKtzMurERS8OduR+ynbz0545LLcY1Uxh7gQAjVBCUGDw0NYuJquexdNpW+0bfTrvuJ+Z+QAmqYVwXq48v6FTXa9cIKFprSsyxNoRQR40DVR9biddmBqZZ01z29FNaNG4a5YhejL3HvXF8h49IQTFjsiIHYUOCjIHcUnJE9OuAwFraVg711YS55BIR1In6YPcA+cW+GZrEMF5uKZhYFPwLMwjkDi5ZyN89b38bnTpve3oddIutQ0JpnnZ87Ww/rXieZduwQlO3CI4W7tW3jOFfc/8V7RJbOLLEJGzhPFS48iffHmbormJt/qRWg6lq9fxDNx/dU64v5GGbUDBRfr6LvpLA9rtPh1tW2f0u2WT5wEVk8D1r9zdG0i/asbheX4HO7cMteYwONWP/bBp5pOPNdHhfGU/LL X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR01MB7903.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(52116014)(366016)(921020)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Bz8K52AZcd3xdbSxDRN0JBZDEhYrNwe/SW8OP+7f0Ss6wFPj4gOFh/GlTUREXcyIiolc8OXgpE8/uz62JzUzm0TgFWY3lfgYUTK3wrInVFUOoEe/SQPtHxw4+wBdJZ/a5+sNvuQ4jPW7XZgPFG01fj9KN8W75qIhH5WTUi722sS1PgZiHN5VA0x2S1OTePq9PHtVPYqCHc2YY1Kbl0KWKdMfhfR1SilV0Ys5utLP3Xir3MV57VNdRRsLSW8ijL0/0GAGLOmXWAgH8C9mcoed+SRzzJVEWr3sXQW+OI6SDQ4cCCuWn7qGWpYDT72v/RRfyLb2CBFJTsQGgupbpe/1b6OgUvAstwfxps5ol3IFFsnnjP8Q5VLSa5kgorzGzku0KRTFez7Z2VX+j/ekOaZ7r4skD/CW3YitIVwX9mKqpa1jiALH5hs+wjbIw8huGshL0iM+ye8QGXExkhJo3bmkJMevytNTQ3ROVy/SIYDI/cYCx0gMAJHeMh/Swa84mtRtaEAg3wPFr/5lmVLwcE/G2ZxySTMcQcNXlneTSzOrjBzAaDvdCmx68DgAR9yhScaDNYSo/jLkd8r2R6N6Kd9XjO36sjNAlFWmv8PRKFmmXCDUiJbF1j6lYcVwl4E8fDP+T5SisJpjIPIBqhWR1UDvGJneBF/4QKZSorW/JD82CMtS1OVbxeyRpph48Ah1XQAC/fB9w/9KhEmEtfLK4PSs8osyrNBoohoBC5pLh/1hqvgvKuwZH6UxS6QXe6Yr3Wu64XVBDh78V0ms4FGMwAimCxY4QLC3ZytGHHdfg0brkpSyMCkTHbPe1j02H019AASpxdlkj+7/KSGudXhfsvizKHaa0tWcWkt+bjinWcIm/x1W37Ya6Py5AJs3lcAbVfoG1+aKvY2VndqIwst8Z3R9ar012Ra3czpsfihVKbeSDfflWD1nAZzcH/XzePLgoGQPt5fmV0xQEdvVQneVayRm7poyIxqiUPEIM9N1K3txBGeUD4MHBS+7FgluOxy7DiYSHO+mxgXCyFEJTTOUcrR+IOpG38C+WZdTWhhez3VBrL3fR+wH+fjlSPnQ1XZG5OcnCc7Ml2ODLWjxvlpNAYNL8fwRfNzUrXxDV+VoK4qnnYOg6kI9XiVHj9tR/K+m2rC+tU9o+0B6n1Qa/+9hDjj99c9UNfAwATo1ySKiEBBURI6HYN5q/XrRyRyT6Q+EIEEIadxP1rXF94w+1EVhfWVoMrSuWBYpv4CiIs6fcNjh33xzwReRjRHb0ugNvayOQd5EPJV/aMkwjBEeEbMYVYLcwvgMWLSxsISz3/5HcQ1ZhBO9D+BTX2d1atq83zokgAWM8ybJaeA0WNVIZRAhi9JnPIX25zOYcMhnBVHI7+RSEpNyFNndt2msp6F3g11Ygp5CX0O5xF4RY+Jxn7Sjd8AqT1/JQ57NusbM+KFpXAjaI4J+oePJcgPyCx5v+nBDDRmaGhUWaJ7tKLjSVsx4vpU9f3Xwy3bUFgKNrVMtvuqM8RFUrv0wjhSmwHEOjceyd+JzfUSn13Cb3L7R2/vLm6btTAL+KCl8HmYHpUOJNI1ChwSYNqK31C1wVeV7L7tKcOx0cWsVrtmILK9wpuI4sIwRLrMcCbQDV2K+I/WEqSibuoM= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e46b068-b58c-4217-5110-08ddaa06cddb X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 23:13:55.7722 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9oGhP7uwEzG3Th9QXQRDiqOuk7IaJEkFtPHjn2edLBemaqv3iqtQRfVKVrD7yGMsIok+ckwYtSMo6kl4kjU8QAVpSBEri0HNEKJ8kje5h58JuHOZFCHs/iLK646NgLGw X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR01MB6382 Add documentation based on implemenation of EINJv2 as described in ACPI 6.5.A specification. Link: https://uefi.org/specs/ACPI/6.5_A/18_Platform_Error_Interfaces.html#error-injection [Tony: New user interface for device id and syndrome] Co-developed-by: Tony Luck Signed-off-by: Tony Luck Signed-off-by: Zaid Alali --- .../firmware-guide/acpi/apei/einj.rst | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Documentation/firmware-guide/acpi/apei/einj.rst b/Documentation/firmware-guide/acpi/apei/einj.rst index c52b9da08fa9..7d8435d35a18 100644 --- a/Documentation/firmware-guide/acpi/apei/einj.rst +++ b/Documentation/firmware-guide/acpi/apei/einj.rst @@ -59,6 +59,9 @@ The following files belong to it: 0x00000200 Platform Correctable 0x00000400 Platform Uncorrectable non-fatal 0x00000800 Platform Uncorrectable fatal + V2_0x00000001 EINJV2 Processor Error + V2_0x00000002 EINJV2 Memory Error + V2_0x00000004 EINJV2 PCI Express Error ================ =================================== The format of the file contents are as above, except present are only @@ -88,6 +91,8 @@ The following files belong to it: Memory address and mask valid (param1 and param2). Bit 2 PCIe (seg,bus,dev,fn) valid (see param4 below). + Bit 3 + EINJv2 extension structure is valid If set to zero, legacy behavior is mimicked where the type of injection specifies just one bit set, and param1 is multiplexed. @@ -122,6 +127,13 @@ The following files belong to it: this actually works depends on what operations the BIOS actually includes in the trigger phase. +- component_id0 .. component_idN, component_syndrome0 .. component_syndromeN + + These files are used to set the "Component Array" field + of the EINJv2 Extension Structure. Each holds a 128-bit + hex value. Writing just a newline to any of these files + sets an invalid (all-ones) value. + CXL error types are supported from ACPI 6.5 onwards (given a CXL port is present). The EINJ user interface for CXL error types is at /cxl. The following files belong to it: @@ -194,6 +206,27 @@ An error injection example:: # echo 0x8 > error_type # Choose correctable memory error # echo 1 > error_inject # Inject now +An EINJv2 error injection example:: + + # cd /sys/kernel/debug/apei/einj + # cat available_error_type # See which errors can be injected + 0x00000002 Processor Uncorrectable non-fatal + 0x00000008 Memory Correctable + 0x00000010 Memory Uncorrectable non-fatal + V2_0x00000001 EINJV2 Processor Error + V2_0x00000002 EINJV2 Memory Error + + # echo 0x12345000 > param1 # Set memory address for injection + # echo 0xfffffffffffff000 > param2 # Range - anywhere in this page + # echo 0x1 > component_id0 # First device ID + # echo 0x4 > component_syndrome0 # First error syndrome + # echo 0x2 > component_id1 # Second device ID + # echo 0x4 > component_syndrome1 # Second error syndrome + # echo '' > component_id2 # Mark id2 invalid to terminate list + # echo V2_0x2 > error_type # Choose EINJv2 memory error + # echo 0xa > flags # set flags to indicate EINJv2 + # echo 1 > error_inject # Inject now + You should see something like this in dmesg:: [22715.830801] EDAC sbridge MC3: HANDLING MCE MEMORY ERROR