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