From nobody Thu Oct 9 10:50:43 2025 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023082.outbound.protection.outlook.com [40.107.201.82]) (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 0E26925487A; Tue, 17 Jun 2025 19:30:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188647; cv=fail; b=VtY8wyTM9M5/aXRI/AHngat4hVGQ91AMkAqLNHnUwkxjIn1ybTWXHgJVveWJiJP4djrNDmxkmsL6nr9QBkCRR8QUiJ87smDw+lWvi3Pct1IXfHwO6iOlcZSqu1uThXzSb/m0Z1mkTiQlsQw20wrPjFJ1x8WGVQVQtvimdDl5mGU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188647; c=relaxed/simple; bh=/aiYS3BfYKyKMK7MbAvF/1FjWUAbQ9tXARf//f0vbUE=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FJOktzQESS4ivEc7jFTPwFeXg7IYqTbIRUSK0arHrnCKDPFgxgutSKelScjsNn+KgTBfcTc876Pg6bBwwgqFuVeuMXijMfQpo1vN3hOIelIXnBOKyRQTSmiRV6/yefhoSR1oR8uriGA4whaAJaNRo3d3NJxdo5KEfx2SQdZ9n/I= 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=ZSnedqTW; arc=fail smtp.client-ip=40.107.201.82 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="ZSnedqTW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MhK8Bq3uJO2dEp7x/deGKDQTE3eKs1rLXYmMI5Ir+pRjThuYwMu/3lE+LCdxZxx2PQn+lMIskBcYRRRS+QlFAW6QeL3JQa6/68TfX6SQrlHNvqD3u70+1CCCVVNdIW701kAWE5LNBbRbrjO0pNU7XAZjdf5VO4VtmZQkTavLr3r/D4agup5gFt7G4DrKKoJnG4OewQ7hVuVEYBBpdkjr0fv5QqtN1L73gNNIEYe/B2DKYMCd6mn9rY/YChdG548oeil2R64OBrUSTl0IkcteIDVwaKk0IP6K2jGCqwOJUuepq9lbsGXwtI2vh/dTWanJh1a7J9LDQsAun4B7+rI/pQ== 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=8xv7yhUuhZnFuKmDRXKrboPqFRyX6w/BTiJ4XNjUqSE=; b=MStBMyrCw82RLAxqtjO/4bhUh5GPmj8x50xewts7RnS5gBiKMguAHLh2pLWeKvEa6/to4U5pPSKK1cFWVmGlgkdVs15DH2UrAmUKHfDb0jorfLCelyB8Qw8pa+ytlly77tOaJaABBvcqDOBHuHVlMalKHw2xTdM72GbZOqtI61+Z+AsWot/r84YnEhM1yB7I1zRmAD4UUX4lvHGOu4oC//pIyfSbakmIPPflkpO2igde0RiFfKh5AAhIS11s6N733OCovqFJ6UxvYSnFQwxI+tPG2csOUih96zFiEEUH5clvvP6TEK5vkQOdPgQXqFgRNzXt+pkdrsdQOnvyR1TRQQ== 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=8xv7yhUuhZnFuKmDRXKrboPqFRyX6w/BTiJ4XNjUqSE=; b=ZSnedqTW2DoSCKmb6s609WOvKjESJjf5+UcWGKtkTdnkFeSDVvijfNN/lZKXyrZIS/H6/a304zsxEmQpZv38Ke8ihAkSSDjKd1EO80Ry0PYtuqONX+uZgq5y5sLRqs888amrx/q4UkCeFU5CI4JNRXPr7ejy+FXzzla7qpVcd90= 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 DS2PR01MB9414.prod.exchangelabs.com (2603:10b6:8:2b0::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.30; Tue, 17 Jun 2025 19:30:43 +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.027; Tue, 17 Jun 2025 19:30: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, ira.weiny@intel.com, Jonathan.Cameron@huawei.com, viro@zeniv.linux.org.uk, sudeep.holla@arm.com, dan.carpenter@linaro.org, jonathanh@nvidia.com, sthanneeru.opensrc@micron.com, gregkh@linuxfoundation.org, peterz@infradead.org, dan.j.williams@intel.com, 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 v10 1/7] ACPI: APEI: EINJ: Fix kernel test sparse warnings Date: Tue, 17 Jun 2025 12:30:20 -0700 Message-ID: <20250617193026.637510-2-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250617193026.637510-1-zaidal@os.amperecomputing.com> References: <20250617193026.637510-1-zaidal@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0179.namprd03.prod.outlook.com (2603:10b6:303:8d::34) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS2PR01MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: a1b8daa1-b469-4c94-0537-08ddadd5730d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?toKlOdECnaChXTGrtdgw3WguZpMRXNqZJo6NnnRjgStn5jAnNrz5m6pgOJCy?= =?us-ascii?Q?EEpd8Q+USaOdY6dnJrQMWmCTt7SzJwVZkZMEQ/uEtX93sjYybnHE+536xazD?= =?us-ascii?Q?ZWzkuniGdEsGMotjJ5JEwO6aWpoHFy0bY/13KgT2r3kh2YZaicaUm5NWSwJH?= =?us-ascii?Q?QkGBZFtCGw4kFqN5QpDfZyEZtIa69dozNf5AvOs4nwm18x5yG5/Ce1gQSq+v?= =?us-ascii?Q?QJjOb6YT2YJgBmtSDTJGheKoYTzdv3u7Lzcl7ZR09DB6bEHS13hVMRsTR0I4?= =?us-ascii?Q?b+ukQnvQn6hDbPsyrdcaglkTm+7yysuJOnUt1h9w2L/IOjNFDTvqrP6k78TC?= =?us-ascii?Q?HCloGGKi/IqAdZF+YDxtdRozxsEVAKK+Ii1CTlgKdfq7m6qOQvHzWpsBXAeo?= =?us-ascii?Q?D/plDfgAtqgIk87dG+gcoI0B/uBEo/z2Nh6ecckDy2Kydk7b2bJufsJlIL1Z?= =?us-ascii?Q?oNCf3f6nwW3suHDSOuPI60x0Ffw76sgeX1F7n4fSJhTjNSXsmAYZS1h/PS6b?= =?us-ascii?Q?+11drfhnqujn6cmbt0Kk3X9y5Bdw/seMzxqlB9sHCRs0u2u2RpMFZVvQNOux?= =?us-ascii?Q?Gr+D4l+hWmqP7aLD+CHD0/0eVA/GsZjubxvUaYm4B2y+2kZrIQN5COQeip+R?= =?us-ascii?Q?oatF3vhGGoGbAEzgsvCKVX3NXIInChGHAkW79ZQqBuY3IHiwJmGQc64l884I?= =?us-ascii?Q?t9bDmAJWsswdZI6l52ghlxD80895D7cBUnb2It9+Xp13c2/NPTPMT2w5n1z9?= =?us-ascii?Q?9TEw2IRWtGKpbawEa3gXNB42jxCYFYV2tCdZthYew9AhIYYJ9QLruyPL+51l?= =?us-ascii?Q?+K3GZUVwuOgGyGZXe6XElk9AeqyxUWFR6yXIUi6kHOVndTH0ovMDVPtAEKON?= =?us-ascii?Q?iO+cYXshx/73nhtOeYon6appMILnC7RfMB8cxnGnHn/il4zyK6OhkQ4Zxgu0?= =?us-ascii?Q?N/EALAWAGty4iUILwQhnP9fZA6dT8C+iN9G3f8TGeV7rC3yO5CfWiqdK6e2c?= =?us-ascii?Q?1OVVqTgxKdwsEijtohe1uNi8MGbYXDZttsY7ofSrjxOTktFWBJnHEOV743k5?= =?us-ascii?Q?YolNDkOZuLnnjYSRagX68jKeXNi8dc73Xb025AVBTiSQP7C9L9hZrRBo/a+k?= =?us-ascii?Q?pztS/lq+iJYVw5e8rZboCLxJldGD/8WyTlOiVHKh8aP2pVa2qwkrd8r59aR2?= =?us-ascii?Q?xVt7VDkUxOAHjqENDMx+gh5+DmmxJMeiqnGDrxmlyGXRXEX9XkGRHPwWkU/a?= =?us-ascii?Q?+SCRcI5PcysR3wovBixslhoeY+1U12rMmhaAcwEPD20+NiVvoc9LFm+FPk8O?= =?us-ascii?Q?mXG8JlJrp4ccs8UGtAuzujY6oDjrGhfbDElMA0aTDg9pD1zy2iq88dSGa91Y?= =?us-ascii?Q?3nScPwG67IOVE40OIfbk8XwsDHLv/pw3VoN7GZXDU7bC2NIdehhy5dLEvzWI?= =?us-ascii?Q?kVjslFRlFysxq/fuEqLya1v2k/25yDMOjNebzPBWz0xx041RbEfQMvGy0hDw?= =?us-ascii?Q?I89FBH4nGto/ot2ZPwDKKktxKbsZPF148ozM?= 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)(7416014)(376014)(366016)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?40cxRAfVBGIJdxVYTXz+AEiwrRaRv7qSLWSwf83RHZRCvpOe1EOaDbRV47XE?= =?us-ascii?Q?2wPxDQj5sUL+ZvnPnxSwBQfbP3voQr2i8quAx/UIXUDSEGJ44wuOu1FZLjme?= =?us-ascii?Q?smbjqvPOLaiXfyTn3xdedmPlO/7xaEPBsq8YPgeQJlY96XG3YAvSAGuXOGZ6?= =?us-ascii?Q?nCz/p+M9PRVbyTzjCpNz/n/jjNjzKMWHKsgN7kDM41jgPb/q44RcKbFwLwl7?= =?us-ascii?Q?kYhtgxiYmOsqdCfUyrZB06z7sbgYYw+YY8JQo7t/0nss7WzFKZ6MY77MuhSG?= =?us-ascii?Q?/jelyWfOabBeOFwyQXanA/exD0VxAO6IVt9Osk2qj3IUizgT6nl69I3pYrnL?= =?us-ascii?Q?gf8gdOx6JTG4AgoBNrmqhRCstHRSfdrBH5WHjOeWauqGMxi/NLevpdURvHFd?= =?us-ascii?Q?AuNc2OopJw/XqNPiZqWLlQ/w8DdBUzkimO4Jd84lRJvJvb8fUiXHl9kdr30P?= =?us-ascii?Q?ooI5kxqzARTWkigg0LDZAXAuroTBq6yCvluifbDmt3cqmJDql8fkguKP3S7i?= =?us-ascii?Q?DcEDtfl9lGo6Pp0Dy5brLczYt9bb1IY/z9+PNjPdmPNBpIDsoQRSBDl+wK4l?= =?us-ascii?Q?06hHhdywDmjWQMDl2VkVf79k4YWrG7ZWFLKhITaA6QgeOFeLHuVr/6PNaNJk?= =?us-ascii?Q?9aQBVcaxF+g767XUp/JJE10+ISdvyw/K08S0XB+7Ovpe0Gd5R+5U8nHUWthI?= =?us-ascii?Q?tahd8vcZBuY5VK7dnLHuWmBncAccHWgR32kWVGIgYqHNL3dd6NsDJct1fiQ/?= =?us-ascii?Q?MbJgY/Zkd3/PT0U1+MSNpV+OmYTmhUt+wJALf1kVR/mlpg629aDAQS+GLa0D?= =?us-ascii?Q?Gw55KF6BC6cUoLNAn1Ek3WrpwIRua9WVyqRfZamHL9y9OnJ4V5nf8nXUSKIV?= =?us-ascii?Q?I6ybVi30nzlQA/oUEXAU3pGchOIc9x7J639efUTYOAVi9y3RBeS21rcc+aYV?= =?us-ascii?Q?wX+29kFUXUcgnCh7Ckr3EnsFzG8nZvASiJLw1fKZy2lFvBBpp8P7K4RVyfeo?= =?us-ascii?Q?/UBvV9i2Ofje6pa3xCzVxzih55bf7HWqwsidho1e8xZCtmEOEaEIoXrNtZJe?= =?us-ascii?Q?+3fcsD8rJXlQ8khVTWuHXalPuZKEI7L7n5EUsfdR5mToqrLBs3KFQuSRgpAd?= =?us-ascii?Q?e7HPTBDThoRwvHbKp2jAELEczn0vlQf1UD1JOuKSgMdednCTgpiLrG42FEvv?= =?us-ascii?Q?EwgbLKuOSMjnm/melorRvE7XBspi3KJ3avQPzyiVQ528gExM1LKkXmPBcqu8?= =?us-ascii?Q?0Dio/OjXGDGySW8LaLqIwxGvgVWbVEuqMwOx53Ikg2sknHBWSBI5fG8vgrZH?= =?us-ascii?Q?Et0G9bgL3DEscjzxpTaUNvJx6YuucbFeWP7QpH0SUvnQhTbOFiG6L4qZVQSL?= =?us-ascii?Q?BlhvlG4KF4IIgIhiJecNqrIYG5SokZEW3/7BKrhilwC/z9RfqMh8kWJTiQ//?= =?us-ascii?Q?xduZYPTiQSUkklV2rWqqNaBlMFGFzxW+8dEn7G+SmZdGaAZ5aQpwMeOJd67o?= =?us-ascii?Q?5D921Y9oDhLnrp5SA8Tb02exFP0BiNAKQAtmG2UjmJZGytOcmU0DrJiQcVC1?= =?us-ascii?Q?8NqOM3/ZDkPVVkViNPgURSfQM5XDpqS0nRwWSuFfZat3110Qovshq3x2PS8l?= =?us-ascii?Q?SQj6NHXN7AHbxn0bksqVD2M=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1b8daa1-b469-4c94-0537-08ddadd5730d X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2025 19:30:42.8626 (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: DJ6qOBr2C4OB9yEMeYVcQRufaAsLwZAhGso6C1W24ih+HLc0uQsoAWCybCB87ZX3edEfSxww9a0lqMwC+6Tuuh0Kcrc3Mm44dSdnUBKUCDnoopuj784dm6xwTXIpsCfx X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR01MB9414 Content-Type: text/plain; charset="utf-8" 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 9b041415a9d0..e4fb4405deae 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; =20 -static void *einj_param; +static void __iomem *einj_param; =20 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 =3D v5param->vendor_extension; - struct vendor_error_type_extension *v; + struct vendor_error_type_extension v; + struct vendor_error_type_extension __iomem *p; u32 sbdf; =20 if (!offset) return; - v =3D acpi_os_map_iomem(paddr + offset, sizeof(*v)); - if (!v) + p =3D acpi_os_map_iomem(paddr + offset, sizeof(*p)); + if (!p) return; - get_oem_vendor_struct(paddr, offset, v); - sbdf =3D v->pcie_sbdf; + memcpy_fromio(&v, p, sizeof(v)); + get_oem_vendor_struct(paddr, offset, &v); + sbdf =3D v.pcie_sbdf; sprintf(vendor_dev, "%x:%x:%x.%x vendor_id=3D%x device_id=3D%x rev_id=3D%= 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)); } =20 -static void *einj_get_parameter_address(void) +static void __iomem *einj_get_parameter_address(void) { int i; u64 pa_v4 =3D 0, pa_v5 =3D 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; =20 - v5param =3D acpi_os_map_iomem(pa_v5, sizeof(*v5param)); - if (v5param) { + p =3D acpi_os_map_iomem(pa_v5, sizeof(*p)); + if (p) { + memcpy_fromio(&v5param, p, sizeof(v5param)); acpi5 =3D 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; =20 - v4param =3D acpi_os_map_iomem(pa_v4, sizeof(*v4param)); - if (!v4param) + p =3D 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; } =20 return NULL; @@ -319,7 +325,7 @@ static struct acpi_generic_address *einj_get_trigger_pa= rameter_region( static int __einj_error_trigger(u64 trigger_paddr, u32 type, u64 param1, u64 param2) { - struct acpi_einj_trigger *trigger_tab =3D 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, u3= 2 type, u32 table_size; int rc =3D -EIO; struct acpi_generic_address *trigger_param_region =3D NULL; + struct acpi_einj_trigger __iomem *p; =20 - r =3D request_mem_region(trigger_paddr, sizeof(*trigger_tab), + r =3D 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 =3D ioremap_cache(trigger_paddr, sizeof(*trigger_tab)); - if (!trigger_tab) { + p =3D ioremap_cache(trigger_paddr, sizeof(*p)); + if (!p) { pr_err("Failed to map trigger table!\n"); goto out_rel_header; } - rc =3D einj_check_trigger_header(trigger_tab); + memcpy_fromio(&trigger_tab, p, sizeof(trigger_tab)); + rc =3D einj_check_trigger_header(&trigger_tab); if (rc) { pr_warn(FW_BUG "Invalid trigger error action table.\n"); goto out_rel_header; } =20 /* 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; =20 rc =3D -EIO; - table_size =3D trigger_tab->table_size; - r =3D request_mem_region(trigger_paddr + sizeof(*trigger_tab), - table_size - sizeof(*trigger_tab), + table_size =3D trigger_tab.table_size; + r =3D 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 =3D ioremap_cache(trigger_paddr, table_size); - if (!trigger_tab) { + iounmap(p); + p =3D 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 =3D (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 =3D 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, =20 apei_resources_init(&addr_resources); trigger_param_region =3D einj_get_trigger_parameter_region( - trigger_tab, param1, param2); + &trigger_tab, param1, param2); if (trigger_param_region) { rc =3D apei_resources_add(&addr_resources, trigger_param_region->address, @@ -421,13 +430,13 @@ static int __einj_error_trigger(u64 trigger_paddr, u3= 2 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); =20 return rc; } @@ -446,8 +455,10 @@ static int __einj_error_inject(u32 type, u32 flags, u6= 4 param1, u64 param2, return rc; apei_exec_ctx_set_input(&ctx, type); if (acpi5) { - struct set_error_type_with_address *v5param =3D einj_param; + struct set_error_type_with_address *v5param, v5_struct; =20 + v5param =3D &v5_struct; + memcpy_fromio(v5param, einj_param, sizeof(*v5param)); v5param->type =3D type; if (type & ACPI5_VENDOR_BIT) { switch (vendor_flags) { @@ -492,15 +503,18 @@ static int __einj_error_inject(u32 type, u32 flags, u= 64 param1, u64 param2, break; } } + memcpy_toio(einj_param, v5param, sizeof(*v5param)); } else { rc =3D apei_exec_run(&ctx, ACPI_EINJ_SET_ERROR_TYPE); if (rc) return rc; if (einj_param) { - struct einj_parameter *v4param =3D einj_param; + struct einj_parameter v4param; =20 - v4param->param1 =3D param1; - v4param->param2 =3D param2; + memcpy_fromio(&v4param, einj_param, sizeof(v4param)); + v4param.param1 =3D param1; + v4param.param2 =3D param2; + memcpy_toio(einj_param, &v4param, sizeof(v4param)); } } rc =3D apei_exec_run(&ctx, ACPI_EINJ_EXECUTE_OPERATION); --=20 2.43.0 From nobody Thu Oct 9 10:50:43 2025 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023082.outbound.protection.outlook.com [40.107.201.82]) (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 08CFB28C5C6; Tue, 17 Jun 2025 19:30:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188649; cv=fail; b=osboRmNfHZFzRjOYxrIui3+qlMNzL4Ny168fGMrtFgcUNAl06FHVUl18V6C/WjoeYRR83agxpzj5so77VgYozmu1yMkBfyhgJIX6N3lUBqi61+Cztci5ztdOI3VJh/V0ajDgJvMykKwGLOdSn4IgSiBp1aRJs4TQJAnrhhm8ttU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188649; c=relaxed/simple; bh=+tIT3fa8hGmamhWjAI9cgXSICI58rOKuwHwpaaoGyX4=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=c2/3+m1d754TxNa057X9hVMLJ9z5+lYfKh4KWhczkV/UoFGhDElA4QnIvB396kswk7ieQJsefXBztKPrwavCvg5BIEtvWdM36kiSIDx29c63SVajzhHvoaoxXsCRwkd45xFqCpdebZnUOu0A2wNb/9NYIp42FgeZzSzjYwJ3swk= 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=gqo5kySB; arc=fail smtp.client-ip=40.107.201.82 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="gqo5kySB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JKHFzMSQw8rLJ6rpLUpDc1bVl3K56CmY080rPVi2QT28n1mMZhVXZC++XoX96srvRr1Okn9LDRtBEPbx5tCt1DDTmMC3xtysgsGgjkLck+/3kPB7CIFonyQN2cs9Pa5+U2GcJdA5h0asF5nmAOqIkO58JyXfZ0nf7wDZFOo4JSJ/9HNHxZTl4pRKdjQnf+1rtiq3c5ZrM6eZ//NwOOoxxAHb2bZ3JOp7bh/ZwmJXjFqXsb9eGpx4cYmKNgjTM01g97XpI++LV7P+sU5pzv0UmW7nhuz0SRTAOPuS5e+c/UbdVd7rXNgnAF0cfx5IJ/L+KaLlOev6TcSiK+dOij7HDg== 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=2KIjzffFo+mNHHrxbJqooarOHKDjKetRVvlc6JX2u/M=; b=iO2sKRxcCDdME+XkI9GiU56FWQ97qVc7eduuvs2aTXIv4CHeZsPQRbhRfwFtZhoGz+tY+9jkebo+h4EYy55JL2u68XNNM1PYS+BATaysXRO/Tl6LNEGafeyMjKTlXXhz1LwbkOPDgpup7VUjDHg0LEeMHKEtYncDqv8dm73E/RUDuItPE+9/oryVjWtbIyJqGsfCqteL9algRlK9erWQeqpLzUkLRmdrAYl/jW8HoXAD+rHgXpzgSJknU2QNSy0Qgjuq6VIbDLL5SVj4c8MHEaXSbB8skhjhueMjUHIGnhZloXzsYuu8uXZR1SAROgqk02tb6KZzCZRJBxmEy1UmSg== 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=2KIjzffFo+mNHHrxbJqooarOHKDjKetRVvlc6JX2u/M=; b=gqo5kySB+J5WN6ughE1WwOVmxzHVklJs7rhAXDbUEd04vFxyi1QaeFiWah8sYazJ7EAzt+Kp0TXhOag4/JYHwd9klZGqsytImOd03tfZtFsdEemo7GEGdWJEjcDUJuB7LZQCP/tKrSuPsLafCM0nPdSpY6OidZ3Xb9VCqJTOc2A= 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 DS2PR01MB9414.prod.exchangelabs.com (2603:10b6:8:2b0::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.30; Tue, 17 Jun 2025 19:30:45 +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.027; Tue, 17 Jun 2025 19:30:45 +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, ira.weiny@intel.com, Jonathan.Cameron@huawei.com, viro@zeniv.linux.org.uk, sudeep.holla@arm.com, dan.carpenter@linaro.org, jonathanh@nvidia.com, sthanneeru.opensrc@micron.com, gregkh@linuxfoundation.org, peterz@infradead.org, dan.j.williams@intel.com, 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 v10 2/7] ACPI: APEI: EINJ: Enable the discovery of EINJv2 capabilities Date: Tue, 17 Jun 2025 12:30:21 -0700 Message-ID: <20250617193026.637510-3-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250617193026.637510-1-zaidal@os.amperecomputing.com> References: <20250617193026.637510-1-zaidal@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0179.namprd03.prod.outlook.com (2603:10b6:303:8d::34) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS2PR01MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: eb8808d9-5ad3-48e7-ab52-08ddadd5745d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?veouu7BjmjmRW0QhiiHe8rDPmiWRSZHea8wFXNC4FJs2yezM7+/qJa9qMkEM?= =?us-ascii?Q?MCgb8yqr+bsoPxs4ZinExL9Zv1T8t1UQkSHYYpiDjixbAfK7Q+5GHSTGLqvt?= =?us-ascii?Q?urFFzoz24WOylQCj/94HSiFFb/hCp0xGVwYEdg+xZM1pEBZ46VbDSF0sZnmI?= =?us-ascii?Q?3jABi9y5oxVznroDEmLMz+rJuzjGkd+0X1BieZw/HC/Nm43OJKqN6ET99/mr?= =?us-ascii?Q?EuB1uA7Ra52kheP7UsC4CuYFeEzWWyaqJ++MqHk0DDrbs3tc3Chi0ix0FWkm?= =?us-ascii?Q?lwYQWWmUbOVSlR2ol73Mm+rX/JmGZbtmvZ3mjShqdPQ5JdEHFIO80NBSmIBc?= =?us-ascii?Q?B1Hu8LrkTbTfMKQnvY7FQpHlaT7fuKiPM2qCHqLkJoii9kGAtmheuJfJjrGx?= =?us-ascii?Q?I/T+WcYcJtll6CY0rJUrvMYsikflUAVm6gxdWxYuZ8dCmQT+MoAY0yG0dQAp?= =?us-ascii?Q?pTIzAQwZ8gDnwpVzFXn6pfWVCHeEuiLL0yhSXJX/S+sI3kBJpbEJgKWgmmAy?= =?us-ascii?Q?H7wholLNThbQEF/Pykn/AtMk2XBfiRCF1Ob+JFkxQg2X09PBe3YlrxgEwmSn?= =?us-ascii?Q?1GE7n12WPHFJcj8CSHPNAEmywFY7pE7K8jGd727LdqILZOnmMFM8SjYUceTs?= =?us-ascii?Q?vFQz/Nc7swzD1UDNzjCg7er8eoPp5GHdbezLWophVLZd9EAWerBOooQccFZo?= =?us-ascii?Q?4mPkmCeTSWsgUoIvxkZDrkmvukTmsZ2tvKd37fm3Du46by5s4nPRCpE3+NO4?= =?us-ascii?Q?VKECO1QfWyP0IhVh11yFWnhBw0U6iVIad269tWTnj5clhBI7twOO4tWIJBr2?= =?us-ascii?Q?0Zl+em4120q6AvBhB922V8UWML5R0nhPePlQZQXruczHsyOpwMOJx1vtqLLF?= =?us-ascii?Q?Y30PVPouxtRzSMxnB4NlUfYpslYvJrp2/4jip6QOud/QThfmV1m8wj4t7yyT?= =?us-ascii?Q?QvF7+JjBE5MK75y9rb3nlKS19tQsj14BEqsmY6vUWSkrQRyJhWxl2Ac2oQhN?= =?us-ascii?Q?OAYHUy7rEM2/sAoiX/nB9uZq/TKtZBxugzlM0v72YJVc3ChA5Q7si9fMFTUJ?= =?us-ascii?Q?pGniUQOR6r+UWQ7mGjIH2YZt3PFysz54RrpyRWEhbSA85bAJWNzxTcPfPgq6?= =?us-ascii?Q?wHmg1rP+DzcvvLOwK+vZiLyCgwSJzByCS7QFCQ6gpUb1i37iNG52Nwdqh+W4?= =?us-ascii?Q?/ojfy2HTK5ak28NNSlackyYLmFCHrEf+Wf/tqR0qSIn9kiKs+dQrtdRTxFmd?= =?us-ascii?Q?cPNe+dGb9Vl2SrThBX6AJzzPpNBXyhurEHJbpK40BbzZO4GVFbCYXtdjdPrQ?= =?us-ascii?Q?c+73PAswaTH2qLJdkLhfYOrgNVmuolYNpSIgHEuh2f/iIMdr9Oph8WuCeRhx?= =?us-ascii?Q?itQwVx9SgOtNuzlLdR2blbxsUSbZLucjjeJ+JQR6ZrYCtAzV6O22d3Ir/PxM?= =?us-ascii?Q?Oc/cBV0inmwW9QKT/iFMh9ymXdNN7iEAyDp9Jbl7j1S3vTZqoN0MJgiT9ygn?= =?us-ascii?Q?j3cNrvougbI286E=3D?= 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)(7416014)(376014)(366016)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?LUT27MvOzdiUxCHlxu792QEQdX7+tRDbDHWuMc/fn/mKFmHib/NykgJLT++t?= =?us-ascii?Q?sZSN8cn1h9sYVzHc/6T4ETzyepiiQXntl0v75beb6aOrjFm7UDQH1ZIsoOjl?= =?us-ascii?Q?M38V08PR5SC/e6kAse4iLzlkN6p8ZCuGiY4t51HENh+qOzSR2bPCPIgZBfX3?= =?us-ascii?Q?xDzAP2nueNYRmZSIGRZgqggZf8CS0p9ZTSDkG0lDTnykcGtV/2WUVKP/YDj8?= =?us-ascii?Q?xsu0jcuoqI4rFKvIUPyrp2hHwbk4Ud4CPVNqs6d7W3eufnFd1wui7Po8FN6U?= =?us-ascii?Q?06wtDu0gXwCcTxj/u/n4jUtK3z7jMo7WRZOtP5ORkrLkurAvxdhe58nfEgtS?= =?us-ascii?Q?jEtt58LSfEvkZ017sP/SbKDEX08gq5QPR+wF1oPRpggi+qG2tDgpCfkmCXYY?= =?us-ascii?Q?bBkWjorwD1+z8BexgPNDvWRvrtD/aLhXCiuioYMjN1s3I/Q59IuZfM0TKnVp?= =?us-ascii?Q?TgC9M0oW9UwSbvAljsUl/ABtpcrLFizRP1jqoldmAQWamslXQez3gxyvWu0f?= =?us-ascii?Q?tbPcCOP/pvd7xqdzAtFUwlQUBGA3hoWwb9zxK25Lt8mUgDv6gfqiB2wSUGhl?= =?us-ascii?Q?RhkYQQCKJqNgSOusm4aUBk9jnIwiv9xK7GvHgvt0po9ffITt+Ss2ACID9vu0?= =?us-ascii?Q?5VloHiPt+68lDx10cP7HDC4GtJSzK/sTkoYw/ZJdzvW8b9BnaGQMQ8aFd7ub?= =?us-ascii?Q?txSfvzfIYuNL2jU1g3Q7GxYHJXHW3VP3tjXTR9SShLkgQut/uuF3s0DvkL/j?= =?us-ascii?Q?0cKyuj1zlxx8hvo598dS+HdE95xqlzR0Md+d8SoBpzif0ZkDgwhSatCngz4u?= =?us-ascii?Q?kppW3jTuOv0ZRBsHX4Y/2/hhyKtDrPOulEkgW3yiUGdnWtqKYCwMzJ8+O6P5?= =?us-ascii?Q?c/nenIouEYDSOEAsRYeZMuzKm5+GtjEKnlmPIfuweilsIyTXXu96f5EdWtXq?= =?us-ascii?Q?O8776+K6kcm5xBdmpGVt1ivKPJCaJee6ToqPuYnNX/dbO0+8LZuvvlUssS4Y?= =?us-ascii?Q?SuCQFxdejzwVBmMiMcy1pdb2f9RkpCf5VYAnUuM0X4e5A7/vDe0ulDvhL6sF?= =?us-ascii?Q?au8i9WswhPCOVj1AZDJ6Ncg6crysKgj1EMbcksLZb3wTWS2iGzAwFuFR59WZ?= =?us-ascii?Q?euZx8Csx7tnXrESNRNvswe9norivEDh1TwrrUCZNGBD+sFzv+TIyu1TQ4J5E?= =?us-ascii?Q?9pZ6rlqwSAQ+9yzj2+NLgxhsqZPhZY8ZVNE9KebCZbK0NIVSjeyPY/4psJvl?= =?us-ascii?Q?uiZZPapCLHowi08TerDceACnO4QtyzvuUhvX3p4qP817wl8lUb+HpvYnOLZC?= =?us-ascii?Q?GKrxhM9Lfku8kC74NcwFOqq791IY3LxefLjD4yvZZHNI4EyOCVDh5ZXS8LLh?= =?us-ascii?Q?wy4V8Xh/kfxeYQkIprWBbYvK7osvmevtCfDwFJPe8CQ8ieMI0rnzEmJds81E?= =?us-ascii?Q?ef99sFhkslfMFnw8y5w4Yt/tvSwsc5nLTypzf3RCD5BKbVuGVo6X9aqsJ7dG?= =?us-ascii?Q?VX8FSdtCSw7rxFrZtv29nDws7DJqLK7TkPtOxIezfCyuhrzhuJG1x62K+NRq?= =?us-ascii?Q?Ns6mC/EftGXiuUgmPbdNFDORYnUuoCn1O0RpmEikwb+q8veylyXfKk74s69m?= =?us-ascii?Q?S5vHmPyta+hgg5tAgphs6TQ=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb8808d9-5ad3-48e7-ab52-08ddadd5745d X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2025 19:30:45.0936 (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: vEZ7+HZ7N5yhHfg8tvDhwhHOfKUtZgphkDoL+US9S4FjsBOlu9qR2gmznEQiShqb8KVuiLo4a084sWlAvXR67TMATEfESGb1wmzLiowEl8owIW+czQ4VLH8RHGvzMY8k X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR01MB9414 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Ira Weiny 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-int= ernal.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_gen= eric_status *estatus) =20 int apei_osc_setup(void); =20 -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 par= am3, 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 e4fb4405deae..a1ff42c226fb 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]; =20 static u32 available_error_type; +static u32 available_error_type_v2; =20 /* * 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_conte= xt *ctx) EINJ_TAB_ENTRY(einj_tab), einj_tab->entries); } =20 -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; =20 einj_exec_ctx_init(&ctx); - rc =3D apei_exec_run(&ctx, ACPI_EINJ_GET_ERROR_TYPE); + rc =3D apei_exec_run(&ctx, einj_action); if (rc) return rc; *type =3D apei_exec_ctx_get_output(&ctx); @@ -174,17 +176,34 @@ static int __einj_get_available_error_type(u32 *type) } =20 /* 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; =20 mutex_lock(&einj_mutex); - rc =3D __einj_get_available_error_type(type); + rc =3D __einj_get_available_error_type(type, einj_action); mutex_unlock(&einj_mutex); =20 return rc; } =20 +static int einj_get_available_error_types(u32 *type1, u32 *type2) +{ + int rc; + + rc =3D einj_get_available_error_type(type1, ACPI_EINJ_GET_ERROR_TYPE); + if (rc) + return rc; + if (*type1 & ACPI65_EINJV2_SUPP) { + rc =3D 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[= ] =3D { { BIT(0), "Processor Correctable" }, { BIT(1), "Processor Uncorrectable non-fatal" }, @@ -662,6 +682,12 @@ static struct { u32 mask; const char *str; } const ein= j_error_type_string[] =3D { { BIT(31), "Vendor Defined Error Types" }, }; =20 +static struct { u32 mask; const char *str; } const einjv2_error_type_strin= g[] =3D { + { 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) { =20 @@ -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 =3D 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; } =20 DEFINE_SHOW_ATTRIBUTE(available_error_type); =20 -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 =3D error_type; - - return 0; + return simple_read_from_buffer(buf, count, ppos, einj_buf, strlen(einj_bu= f)); } =20 bool einj_is_cxl_error_type(u64 type) @@ -712,9 +743,23 @@ int einj_validate_error_type(u64 type) return 0; } =20 -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) =3D=3D 0) { + if (!sscanf(einj_buf, "V2_%llx", &val)) + return -EINVAL; + } else { + if (!sscanf(einj_buf, "%llx", &val)) + return -EINVAL; + } =20 rc =3D einj_validate_error_type(val); if (rc) @@ -722,11 +767,13 @@ static int error_type_set(void *data, u64 val) =20 error_type =3D val; =20 - return 0; + return count; } =20 -DEFINE_DEBUGFS_ATTRIBUTE(error_type_fops, error_type_get, error_type_set, - "0x%llx\n"); +static const struct file_operations error_type_fops =3D { + .read =3D error_type_get, + .write =3D error_type_set, +}; =20 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; } =20 - rc =3D einj_get_available_error_type(&available_error_type); + rc =3D einj_get_available_error_types(&available_error_type, &available_e= rror_type_v2); if (rc) goto err_put_table; =20 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 =3D 0; =20 - rc =3D einj_get_available_error_type(&available_error_type); + rc =3D einj_get_available_error_type(&available_error_type, ACPI_EINJ_GET= _ERROR_TYPE); if (rc) return rc; =20 --=20 2.43.0 From nobody Thu Oct 9 10:50:43 2025 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023082.outbound.protection.outlook.com [40.107.201.82]) (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 0150B2EA755; Tue, 17 Jun 2025 19:30:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188651; cv=fail; b=SU7EzadV1D3/hIPri494+q8ee5qReekvDheKqutuIi/i+kzrbx0SwC53l4nDKhwcyKf6D/ldzxy7/EonyLgcWjIy92Fckm53fHIfJWcZoJtB/lx2XU34OQtu4wq2zZQ0zFqQ/wwJZiqelKIYOEkABWe2+z4sU9iqJMw1Il/RyPg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188651; c=relaxed/simple; bh=4BP1XM4kEwjLAH/pTTeIxDND98D9tU1HE1VKQIuYTG0=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kxKjbECZR/KzO8sdtwLILPUE/FTE3416RxpoVcdV5ktw4SYJi4udBemN+PUbi1adFoP2dVqp0noyYQEdKGkQbAvqX8/0yz3P7vza9/gUlBsEl6bzkyoRXLGMbdNxIPmdUxMfTkCw5O2k3nSL3B0Z/SKwhQhFYZ3kDYKE/YzsYcE= 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=O9KLEO3b; arc=fail smtp.client-ip=40.107.201.82 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="O9KLEO3b" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eI4NB50acDp98FP03Q0Aezm+yAd7fnEPWIDynoccrVQjn438WnJTgbv17xNbd/CqDgnn50dMycYxOrowedHJwp6d+V3vK33QNMZujZ31FKQF256hDoCTskbJla0WR+znKejoFBSXK1mctEINKBQTDcTp21cgP1/f5WMBtBJyfsE0vh+cZfpTB1768h2MziAOgWnywlr+XdYOLkJcYDrDp4QgOjQFuonSxFgJqdMjsdsStkQ0VBNy14SLLj8n1MQT9hS9aAIYyJSj+oBSg7GUzJ34I4GS8kmRUWphx7ikUOoOsG3IUaSkuzCdPUOMr6xlfLxeIqYX7EZMqo+/g6fl1Q== 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=0w9rKx0eJHAmpJRiZ5WpEulFSzUbifMdHGa1gp+Pb4Y=; b=xHDyWujzrsYmDfU/ACMX/WkNZbE/z7ivkvQ/T1O/pzO3CEQYnwyVQjFepiLJOTtiJIIuQl5Q3vfyRPXsOkhHPWJIzsP0xSLGLd25rUWt8Pc03O5XksHwFizu2oLejaKRq+TNgZDRZXtPnL5gGXKILgU+SsPBUZf+TqUScNBCGpjEIhClr5X2iwRRVobLPQqg8RG9Q3+n6Sqc5XdwJwoT1pXveM/aLU50lOCvWvV+4GEdI61WJ4V52izbsqnWiJ02lR+r3oGCyVKlSWReU5P0YwuETojVBsgkgTfCTwWUZCH4YIo9HyyatYNgY00LavyjvVnDmdT9QwLGEmtXbPeZ6Q== 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=0w9rKx0eJHAmpJRiZ5WpEulFSzUbifMdHGa1gp+Pb4Y=; b=O9KLEO3bHzPFhVheXMZvzrwNo6xxd8qickBbm2f4U6Ei4VIwOscyKV2U/BgtRHwlzBZ720HNldEUaNZxpYHhmjxa1Z6yzvbTBNNVflFE+B6qiMftAiCYZNafUFiUEPmb3AD5tVysE0pEkfOm5PN8SPR+zrLB02blhh0XcEsBFCI= 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 DS2PR01MB9414.prod.exchangelabs.com (2603:10b6:8:2b0::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.30; Tue, 17 Jun 2025 19:30: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.027; Tue, 17 Jun 2025 19:30:47 +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, ira.weiny@intel.com, Jonathan.Cameron@huawei.com, viro@zeniv.linux.org.uk, sudeep.holla@arm.com, dan.carpenter@linaro.org, jonathanh@nvidia.com, sthanneeru.opensrc@micron.com, gregkh@linuxfoundation.org, peterz@infradead.org, dan.j.williams@intel.com, 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 v10 3/7] ACPI: APEI: EINJ: Add einjv2 extension struct Date: Tue, 17 Jun 2025 12:30:22 -0700 Message-ID: <20250617193026.637510-4-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250617193026.637510-1-zaidal@os.amperecomputing.com> References: <20250617193026.637510-1-zaidal@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0179.namprd03.prod.outlook.com (2603:10b6:303:8d::34) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS2PR01MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b0d80dd-acda-4104-500c-08ddadd575ac X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?dSho44K4czx+SLQCSzPSDOjsP36Sd1xeO1fDV3N9lad3qbn3f8UEBF998Ea0?= =?us-ascii?Q?y1Ib6zxuF4FugNrG4n/uo/OUgZrvJMXG1iMxnW+O5GHZHZI/2VZVFPZHnC26?= =?us-ascii?Q?wi2zlmgCCsChP8UxqRqD6eHJcUYDdYZTOg0nB6khlI/UGPhbnX5yJad7l3D8?= =?us-ascii?Q?tYa8U8p81aanRw/uDjKNPwmfE3J0V0kvsMCpZk6Qy2pU0S1ZVzJhrcZJIW5k?= =?us-ascii?Q?3akQHTYP6mCIRjUTqe+9Wu++oGGhtmHiLrOwY5ZkTC4vzEKvpTNQrZ0GPxQd?= =?us-ascii?Q?6I4I3MtG+B8lSL6K4AECZj+d6p9X1OaCwWcIqeiMsaKbaz8hOPOtB1vMv8rW?= =?us-ascii?Q?4jz6hmR+vuWT+V2iw4KENMP4DUxZtGsZ/wUX0EEH+BuFlv+8b2BWvkYvnozO?= =?us-ascii?Q?scroJmLPSKzcRGiOdVFREXMA88Yb5UoGP673Izg1p+zFUGJClXq4INocILDB?= =?us-ascii?Q?KZLyaERyXSv192Tuq//UUkRPE0sWVl7gKi+qq0QwjUPkqfZS37Sa4qC8TF8V?= =?us-ascii?Q?F3m1Hb2I1daTknMuJyK9OCsnpsYrBsMwyZayeGAvDmSLfny1HPvwcp5McUI7?= =?us-ascii?Q?pFGamjmVx9GWjLa2bdfApluBBCMTzqAnPxjbg6Hyp9pOqc9Gawe9A1WkYsFn?= =?us-ascii?Q?4rSmaREtQoiYtm5laCQyJ/L26RYcD9ICvVxdwJmh4hbe/PIRTlBqc4nZM9bi?= =?us-ascii?Q?9ux+VZgTH8ROGHMxEfVJItN1lX3mHTe5k6ukq//9pa9paoQBT+sUYmTCn7LT?= =?us-ascii?Q?Mie/LFcMhdWR20JDj9JOKzvAZXR41cD4rcNGq6BAlXuE7EU4Uf0DMYcOj+qE?= =?us-ascii?Q?HUciBP9ElZi9vshXmxKbRs3ovSVYkCJ5AZ7NRYa89p04MzM1mPjLSRDGHuRe?= =?us-ascii?Q?G9ybC/R4+AFrGUj53WpBNDdPCsySpMujZmIPFxCl0pod2+rpk0yF1WI4Squ6?= =?us-ascii?Q?P+szsnzhGdxnwu+z5d/iC/C4NXlBxcCKQbn3gPbyNFn3w1qPoDldI922YDVa?= =?us-ascii?Q?LZs4WUM2DhZfexUiN5AYoJ2XjHrhL6oV61S41nP08bO7O37apHJqdGms06JJ?= =?us-ascii?Q?+LC8xaI64tL2yeWMU2XxPDP+NejzzzDVpaqPj+tTIOhaUSMyYmagZw68N3dq?= =?us-ascii?Q?/TwM3vSjY7QWaQhMSuORosHqlMoyVbBCauLO75tKsP386z00UG/R7iDRILbP?= =?us-ascii?Q?Z6Zl27l31YOKfg8CtoOfLBuEhfhtJWr+XZwFbZp9ewHHC2bOGwH6GKq71U2W?= =?us-ascii?Q?A9YySmwYcedRQKcshW+YzN6exs80TwVU+embkg3EflZoRDMx6hxIuANz1Lga?= =?us-ascii?Q?80diJdo+58SuFW1CHaIGGi3ShqEzFlXgCIxTgqg/IC7PMwXUDWL2qx2u0JjL?= =?us-ascii?Q?dllC258JwxjhLMaAmWYUKlIVksxDrpuK++un5RsBdavJ1RTbnIX0bS/TRI66?= =?us-ascii?Q?1zOlOOVUs3rFV3QShBeie9TF0L7nYrYB?= 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)(7416014)(376014)(366016)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lM9+z0LcCFlUUAgMMjsn7nrJoIi0lgDZNMvV0dzC/NmuBQbm0cIMODYYNzKl?= =?us-ascii?Q?vauCrDaJERP/YROJE7FTSoN1AMObmvmSH0RWbC+Hvr7fnXymFEIxbxN/+b6Y?= =?us-ascii?Q?XCfli3jNtU/RDMKOW3IURtXN0tOtDOxTeB/7ybq7jDrAN6kX2KUCzkPg/gnC?= =?us-ascii?Q?jCHEw219LvG/2kpyrEfsWX3mWI3q9KraqqlafJL6vfAc7mop/DzccNTNTzFk?= =?us-ascii?Q?ZeCW+mu8J6/zXKZmHvRWXiNivf5+CR7x47nHkX50yMEAA9/UyfxHgcVZ66zL?= =?us-ascii?Q?lDRArej92gss8Tq5tkV9Yd/7kg+GjUefcUNFuyEWSamLGR5UTe9XdRwWavtF?= =?us-ascii?Q?7h5ATbuLSuPXfA6+VQRdRMy7aHN1a8haeRpPPrFq0iZiN4YW0tHJxVHFeEF8?= =?us-ascii?Q?LhQEHgoPD75vfv+lX0Gw+IYG0XKdoqK5hUoo4+xDH/f0SU0TGpQExfxcu1po?= =?us-ascii?Q?3/yFGv5Lb5wLP5znOEEQKftu2RcWiWJLpCmuiLAhJUp15Uq5o+OYORvSqj//?= =?us-ascii?Q?vxyLBEB/dgx4rwVBGAwfjKLAeO0osyOeVZyrUDsP8e1bvBByDIjjXKct4/xV?= =?us-ascii?Q?ZNKcFEhXs3RcbbaJPSY7e+pgFkADp7nx/cRRdVBvD0CVk2C2+QC7UqRZzL52?= =?us-ascii?Q?RQrjGBL98jm+MySFV0pOMB1oobdSbyMOHIIl95tZE5dDuQbvSjgkq7EbUnPo?= =?us-ascii?Q?UmhX+ubbWKARjiFnzasgrgX7Fhe/0hAQ3HSFhODLnovtdxA5Vsp3R+Ucdwp7?= =?us-ascii?Q?BOTO+Nmjtmuba8C7mKjVhlcFhRHtEU/EEPSc34yToOP4Unif8UGmtKGhmV06?= =?us-ascii?Q?GF0uX48owRXWLQKf9lswK0yO2cAFSrOQB+kbEn/uzbyOwFlSbzZzsYWDd/kz?= =?us-ascii?Q?tlxCLvg9SZGxbMozZyYU3beaIQDzbRUPMIPh1DMaVViOpQ+CTCIP4omHRXgh?= =?us-ascii?Q?5oNnmJQ9JK8T0+blKLAmoSorsnicjlPPIda/2p5AdmuUKjXft4NGcXd9/tc/?= =?us-ascii?Q?VJJq2JU3a+0MzONwuytE1yM+8R4otId2qubVureDG8uIXv2b84eyurxAiPV9?= =?us-ascii?Q?aX8V4ltncdHF9TmQ19KC8NgUrfMw96h+lWEcNSp+3mJ30VlSR98qK0xpWbGP?= =?us-ascii?Q?Uz4Y6uf6zy8BxB6Sto7p2ZNTVmSf+/FqibB9wf6oEKxEdtFuGHaSw/X0TWnY?= =?us-ascii?Q?u2CGtg7CGERYDrSHgkBQJCINaOgTzvWxlvlNpdCNLswCP8GxYTXZUoKpAep0?= =?us-ascii?Q?ucs29VaLiVCCRJQJbjTZxDAIFPyrxoz2sAy7XhJvSw3AdAnCNCpve+K4Jitv?= =?us-ascii?Q?NRrVAbdYdECV4NeRPNXGSqNHRb/Vi/lVzYEvGuvFyRxHELGTw0xx//EyaFUI?= =?us-ascii?Q?D1vKav/H0k4/o4r0OqX4wDLLXfH4N9nIhTXbmRTQ7UvNXgufsFQxSVXfjvVm?= =?us-ascii?Q?qqVCn/2Uyq1m4XoECfQ7yWGcxk91xOP6S6e5xlPv0e9ufy16TBMdrOilPU0l?= =?us-ascii?Q?jTUjji/4Deqc3pFiY+J1Fed91Izo9ITC9C1Gxnx7umL/jDO3RQd+QJuXZs/p?= =?us-ascii?Q?ASYcCzoS5n1crB0WFaJ/a5cEhpBODILzsiEF3E1r9Q8Efpo3/I4QL5KfOZA6?= =?us-ascii?Q?hUsy22ECW5taYbyVJ91FiN8=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b0d80dd-acda-4104-500c-08ddadd575ac X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2025 19:30:47.2282 (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: aAOyUnM+bQa6NVLspBhyjusc4pE+ouYycq/56tYM87jJXdm+EBB2e8wTiSJUlepy9ANbsI3oNc1jPWEBiXQtVEVV9PUHFBydyJZWVTMPj5bd4RjIrGxG0ypVkDj9G4HE X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR01MB9414 Content-Type: text/plain; charset="utf-8" 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#ein= jv2-extension-structure [1] Reviewed-by: Jonathan Cameron Reviewed-by: Tony Luck Signed-off-by: Zaid Alali --- drivers/acpi/apei/einj-core.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index a1ff42c226fb..1ffe8270634c 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 | \ @@ -50,6 +51,28 @@ */ static int acpi5; =20 +struct syndrome_array { + union { + u8 acpi_id[COMPONENT_LEN]; + u8 device_id[COMPONENT_LEN]; + u8 pcie_sbdf[COMPONENT_LEN]; + u8 vendor_id[COMPONENT_LEN]; + } comp_id; + union { + u8 proc_synd[COMPONENT_LEN]; + u8 mem_synd[COMPONENT_LEN]; + u8 pcie_synd[COMPONENT_LEN]; + u8 vendor_synd[COMPONENT_LEN]; + } 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 +81,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 =3D 1, --=20 2.43.0 From nobody Thu Oct 9 10:50:43 2025 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023082.outbound.protection.outlook.com [40.107.201.82]) (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 C045125CC55; Tue, 17 Jun 2025 19:30:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188653; cv=fail; b=TqVV1OMbbF0XzvLyo+sxaXecNQ0X/2KQfvay4M6hj6koYHVrvFPVI02NrW8rkYYyideG3+1TGcKlnaPRU1BZeu4p3L/R2BrcjzIerDB8eYZhaulkVP/PoYsdVrsNJF5ieQ4BnvELoIn2aJVpypIht2YVBIOGyVnR7Wwjfmo0+u8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188653; c=relaxed/simple; bh=liNW9FtfMaIJ8X9DULxFbGM4uDQCA/mMcy7UWOM1x0E=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CHZ7ObLDYyxNlQTBbxZ2nPLyQmWnpsALPI7FIwxneONmUMs9eKxWjifgmpGbmmO3eRGYAARZ05oA0AKhXznJ3gaNSNwZsQh8aso6Bok6vwq7pb02bPhdM0jyJaaqx11fAyoRxSsF5MzN1lID4EE8gN7dgduXEB7BdcpFPTNw+H4= 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=oGWYB8W9; arc=fail smtp.client-ip=40.107.201.82 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="oGWYB8W9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GQNCmK6j+t7DaG6yxidRY1EDT2VDNLv6zVcgICeuthA9IMIJTrry/KM45+kpSndwc+xtc4Bz+TJcsftKxdN8kwMZQ00Q0EQ+nytzzsROwfUSMp0+qj5d8w9NBsTp+uREUuYGjiKKfNmrgZSpaGn/wndXbw3d0hOW/PcKhstHgKIJpW0JQdOzXPGahRf4LIi1CTrTXenekdQxgwdFHQnrA2bp+jNFYuHBBxUP19gTRrmL1jKvDUfSWfMz2SfS8w5A0TGw52AFYkaIZak6zzMhmCatbmbyxuSQSgv8N22PVByMcntxqyg17vzxgv9r08eDRveKYvWA3VUaS9Ohil2PIw== 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=6Z4K9lm2nsFzcGjdy4PmXGDnvcsjEaLX2pepxG91Bew=; b=KDGkpvgetOsAGx3SKzGUn8vY5lxE5VE09n0vWYF6JFvI+EbGrcR78E/XJfqnNlrOWTCyj27J6DH12CtEZVGsSqiLt5YrJq1mV8NSw+7J/hF69sJuDlO2r43YunAtF1Dyigj9UTmRdsyrCrSf45gQDQjYaTLwJFA0HoXA6W52UOyfTgy+EWxLzTDiF8xSjSz4B12KkIEEbXfrkODKrIfZxCDuQ1G2Mo+wUNVEEBey6G9isQYik2PO6tkwK33gzvmVzRe1jL5gDzlejR3OVH3aOfXAYCUAk225JaOgLcsBP6rm0Yr43ktZxjxrkbokBSA8QRne5qdcUaPOQxW/BI4KZw== 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=6Z4K9lm2nsFzcGjdy4PmXGDnvcsjEaLX2pepxG91Bew=; b=oGWYB8W9Gh32yrrTAa11oMyC6apzprii6EyyUPhzOSPofcMAgR53L9+/+IHirURvJzu/cieSHAf8WyPM3G1uVtSJSS4HnXGHhqFVMEqc1daN8rEER1yxFo+VZ8BPwEC/sx3VqRA2Sx0yBmUUaztyAbvn+jhypr2C3kgqvmsWBGM= 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 DS2PR01MB9414.prod.exchangelabs.com (2603:10b6:8:2b0::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.30; Tue, 17 Jun 2025 19:30: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.027; Tue, 17 Jun 2025 19:30: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, ira.weiny@intel.com, Jonathan.Cameron@huawei.com, viro@zeniv.linux.org.uk, sudeep.holla@arm.com, dan.carpenter@linaro.org, jonathanh@nvidia.com, sthanneeru.opensrc@micron.com, gregkh@linuxfoundation.org, peterz@infradead.org, dan.j.williams@intel.com, 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 v10 4/7] ACPI: APEI: EINJ: Discover EINJv2 parameters Date: Tue, 17 Jun 2025 12:30:23 -0700 Message-ID: <20250617193026.637510-5-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250617193026.637510-1-zaidal@os.amperecomputing.com> References: <20250617193026.637510-1-zaidal@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0179.namprd03.prod.outlook.com (2603:10b6:303:8d::34) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS2PR01MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: db17d236-5433-4a7a-f50f-08ddadd576f1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?UP+U6kRMroEZhaU55hiZHUuHFrbPszOrEHbL40x9MhHPPAE4iV3hH0z+TgbX?= =?us-ascii?Q?XlnRLfp1gBBVAJqqOWvyLrODMKwN0nC4nOHyW/mE0o8ZHCc0ADXRqIg+sE3C?= =?us-ascii?Q?lXk8YpEpfw5FBVC0x7WDXevS3/ZBcCvJnaJkWdcwTEnKrRF4j6qsOqNvwLLj?= =?us-ascii?Q?hn3Xm3wHaA44kV9n7Rwxs8z7qKrJSDRypoGavZt/aBItXuBoZkBgyHO2+DbA?= =?us-ascii?Q?5avLuGnEaI+boGiAPiBk4QreJcoFqfQcSKYxEJPRWwnGkiKFk5l6iYMhw97q?= =?us-ascii?Q?t8XFh1AjsfB6sPhJzvE0DKhDBhiBKVUwqTQ8Zajn/UWvlHOzSa2WzPPAiw7Q?= =?us-ascii?Q?BqQK563a3Mq+LE+vZNb1PCzmdOn4k++EHYqSOqLYzmRONob+vU7lbopmRMMU?= =?us-ascii?Q?7CJxWrLK3kpSk4zF6k4hR/nvcBAz0hKN42x8SBTl/hnmd/VV8G0GLbYroKtx?= =?us-ascii?Q?ANC/HAnQ5xCsP5TBJZe/EbaTdIsXU8bKgebMwb0BMqfK/xSpbYnKP4VDRl+Q?= =?us-ascii?Q?2YW+a3aIhs6a715qRf/j/CeprAlhz1swP0eRO2SbN6OhJrJH8FVBWqwAlB7d?= =?us-ascii?Q?+AfWQcmQsLTSaX9PsxB1WgHwq+S8+kFwVlW+x/bSwemkI3wHzRa9CLT1IP5F?= =?us-ascii?Q?yj8ahlAIPQq2KrDUBkp5ECKFtxlJoqNLagsZL09VBDBZQWknxKCe6jGZ8F6h?= =?us-ascii?Q?tkC9rUqncuOj2DNg+qQ6Zaw8omHBt1zB8geuLm50cb/kb0RNB/Zre5LMagGW?= =?us-ascii?Q?LLuL1rkTCmIoJ3ddagBrYgOmwSTJ5u3zWZlVsFCtju+U5FuIA46uFrn0tz3B?= =?us-ascii?Q?dVa8PrNSc3PtzJIsw7MwQkAxQFVcANnE2hIC6b+bokux4Z5ILmvVtF9qMOjs?= =?us-ascii?Q?+CQ5/qiMoEDiJlC9jpjRpkp7qhd9iMEUqBzdJjlR1gFdt5gAeIuaUrupSJJK?= =?us-ascii?Q?UQWpDkFaMQccE2ZHWynEsUk3Zt6SSgOyxC4DQHcot61/FjzsjLe0tXTsotsS?= =?us-ascii?Q?KXFtP32O+AmK2Mrl2AD0SwIPEc19uTVQNrz1PdOYLMh8omqkafHK/GUHyTAa?= =?us-ascii?Q?BCeEFre0nWgJ6qZENci79ZBGG7h6zS5EW6i459F1w6kBekoOIWdPE61ovGcK?= =?us-ascii?Q?+YMJ1t0z3R6BqKS50olP9lZSl/MQmO089WzTF09hdLEHQD98IHVMhQGXsBXB?= =?us-ascii?Q?71KX6+11Aswx3hmJ2wIGIPzvbU+3Zy1pzGu0jx8ywnjFIvRrgWT14QkattDn?= =?us-ascii?Q?PUwJy/iyxiP60JBfs37LS3McjXreasFnxjL1qtYvoshGjZZgBH4bPPE3P1E0?= =?us-ascii?Q?6SkZJ1aL+uW2ZLimLkg5SHQ8N6fflwhyLbeuThsCP9yCxWhRavD7lu/MpAwg?= =?us-ascii?Q?BfVTN3JWNXdItdd/1RrjOYVULH5IuVGf/n7QR4ZN0aORQ2reIGIpnZ4XAjwd?= =?us-ascii?Q?6xpVBJx94IphoR1sM9IgG78mMy/JTc0upvTtI7xplEulD+9rioKjhkqQKUNK?= =?us-ascii?Q?2DFpZdeGIEnxIG0=3D?= 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)(7416014)(376014)(366016)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CKr7DDqsYAIDbm0wcdkFa6zkRxedWQ4epLVXhq+0v7CTlgWrvtQVNVQ4bvIT?= =?us-ascii?Q?sFH1Cs/qmqg2DPDuV5VbuXOgILDRrKkobDPy8w7BMoXjaDyyubL64Br1G19W?= =?us-ascii?Q?pzem1TKw34XbWAt20KxVQ1x84d7U8srveMd9xmxyR08tedp6zI/YxyKbqUSL?= =?us-ascii?Q?pgKFhq060wxSZC2X6b8fJ3touYs/3KTGaARaMPeGqbucwcrTluRs8g3/64OL?= =?us-ascii?Q?pSi6yOtyncG/qRp3HgdHCmq21Vg1rd25Q/CEuLw/wszQhZiYtFEWnp7YLKwt?= =?us-ascii?Q?SPH0MGM6Kv9NRFAvBPZPEzY79ejpc7QbIzlpKjhW1KYpvc4ikHlcIHfztMjR?= =?us-ascii?Q?wSN1ZmGCuzvFHPoro6OHQDNEe4dCLRvm14sKgOsrqqeihodMknY9stW+YzuJ?= =?us-ascii?Q?MTIo2AOD/ZEVcbsd8IvXIrwuKU7dyrdQ6liSoh3DcDeQxevfskymmpcrwDLK?= =?us-ascii?Q?Om1Xhu6EhFCt9ZryNYiWq+WxW9qvNxDxztZw3bpFTVp0mTnBa61GH5rDoJTW?= =?us-ascii?Q?FwyyIj6bwqC9qjdcYYbEB4sYDGFJiIP52Lpb+a83Q85JtucYSge1z2fuUCV1?= =?us-ascii?Q?t5662hOHjY7EbmsAs4qtMm+uNM0UjSsXFJrU+XZot0cZ+m64Vcp9ryfPncou?= =?us-ascii?Q?1KPJaxqUHdfdP8gxo6pHqtrRxTKKSdRLtRA+6JKAa+EGjRxnlXKviaR2wMV+?= =?us-ascii?Q?C6FuYhGN1kD9+65xMYZIQj9xTh4KD3vqpOmm7yLvIq83uxKj3KZ0G6vq23Ux?= =?us-ascii?Q?1ktCh2HuQbW7l7793FdYK2h3PQdXF3ksik7bOyKV7flCmOXZea5kKNXNqG5o?= =?us-ascii?Q?unZH8dJ10Fc3J2I2IyBhodgoAg9lXwXq1WC9kPHWJbSmlMLLl62HNNY1WxGd?= =?us-ascii?Q?Izds43V9BlpUmclTIVOrypo9PuD8SXX7BRB2T8A5gqF5ncuI3joUhaiY8uco?= =?us-ascii?Q?oWpoaRB9ggyDSWibNnqYCfCxUWo/SJ7ymYurdEseI6t7Gf8hkzlFh+XhYCE8?= =?us-ascii?Q?BaItonDdLri6L9bYAbQP2WGNsR+JfGLDD5R7lB3gnqyD1tDlYtkA+tXGtNw6?= =?us-ascii?Q?l+fg/3mEKD0ETtyt7hHa9lHtbuswDJtYrlDGdg3cAYUGDUDIQR6AH9TG9PA2?= =?us-ascii?Q?CiJIKtRNll+XBHxDbBDyxgsWIMZCn71wYaRAveB7ClsW77vCS9l4ZlYNlIm0?= =?us-ascii?Q?f7YK4F2oaiCjV1UFEWjVKR/ePIFyX2hlj9MHBgV5nT1M0wPFqpT683d6ngyV?= =?us-ascii?Q?mMgC68NRikEuVByawqBupLs/sj2Us6KaKTVNA/oxua325X1YF76F9FFwOi0z?= =?us-ascii?Q?lYEblmPvOopLtF25uvJ9nwNvtjZ/Ehpmh/52i8+Xhy/CQ3PYTak1jSvEy7Vr?= =?us-ascii?Q?2R1G1EV6cKltg0N3rWrKtctdrwl8NFqY732adV4OQ7lbIsbxvs46qf4TerAF?= =?us-ascii?Q?aD+dZVc0EasDeMrYVJK/QmOgEgVio3Bai7ZednNGb1k+3AOYspfiyot1WouE?= =?us-ascii?Q?EuoEcHV6CbJzBDO4ODvpfpb0600pIL7EwFDtmJV5io2ezPFrMqt+2XXGPPKs?= =?us-ascii?Q?iL/57uROKp4YiIHQI6tzgifzo3QhX4RmuusNwF1hsZBVAu4YIoClvk60vWEg?= =?us-ascii?Q?gAwziF13Yj9I/++TkcLj7NU=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: db17d236-5433-4a7a-f50f-08ddadd576f1 X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2025 19:30:49.3792 (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: NJNyhmP9N9zZHo47KYECptcDSvwP5AwBurFjXgBumXke351WRc5KP1rWJEXGP+SZfDC9Y6JOwsyp4NALRX4K0cgDHlfIWkqf8do0SvWLgSbMyT7eCdbfObItxXrV/3hg X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR01MB9414 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Ira Weiny 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 1ffe8270634c..ea6fd4343e63 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -108,6 +108,7 @@ static struct debugfs_blob_wrapper vendor_blob; static struct debugfs_blob_wrapper vendor_errors; static char vendor_dev[64]; =20 +static u32 max_nr_components; static u32 available_error_type; static u32 available_error_type_v2; =20 @@ -178,6 +179,7 @@ static DEFINE_MUTEX(einj_mutex); bool einj_initialized __ro_after_init; =20 static void __iomem *einj_param; +static u32 v5param_size; =20 static void einj_exec_ctx_init(struct apei_exec_context *ctx) { @@ -302,11 +304,31 @@ static void __iomem *einj_get_parameter_address(void) struct set_error_type_with_address v5param; struct set_error_type_with_address __iomem *p; =20 + v5param_size =3D sizeof(v5param); p =3D 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 =3D 1; check_vendor_extension(pa_v5, &v5param); + if (available_error_type & ACPI65_EINJV2_SUPP) { + len =3D v5param.einjv2_struct.length; + offset =3D offsetof(struct einjv2_extension_struct, component_arr); + max_nr_components =3D (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 =3D offsetof(struct set_error_type_with_address, einjv2_struct); + v5param_size =3D offset + struct_size(&v5param.einjv2_struct, + component_arr, max_nr_components); + p =3D acpi_os_map_iomem(pa_v5, v5param_size); + } return p; } } @@ -933,7 +955,7 @@ static void __exit einj_remove(struct faux_device *fdev) =20 if (einj_param) { acpi_size size =3D (acpi5) ? - sizeof(struct set_error_type_with_address) : + v5param_size : sizeof(struct einj_parameter); =20 acpi_os_unmap_iomem(einj_param, size); --=20 2.43.0 From nobody Thu Oct 9 10:50:43 2025 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023082.outbound.protection.outlook.com [40.107.201.82]) (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 A13412EE97D; Tue, 17 Jun 2025 19:30:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188655; cv=fail; b=aFJurrBGZkZ4LxVuzWd1ubsV2QemW+tDdvZO5PNa2VWcJOftq90+F2WKU7OKKJ/ArX+Tkkn6e9K3EBp0XvjIXrulzcwfPodXhqxPF4E3ALRTzQBfkBPjywZXwpTEO4w8Q5izisw/G+aBKVZP4VJFuPvPOucEWmvmjOVXLnepgzY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188655; c=relaxed/simple; bh=r10Is6OKg6w1iFphxGRpn1SZm+Tp4uPu8AKrJn2O+kU=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FjgGIPuhPGte1jnmniZzFFxAvwVMizN+BbRiaKmimPsr6KrCNOnwl3P6Al3EaS4fwOx+Vy/pSRpgg4giai6vaQMMPzAJ4e9VgakekQHSiFDnW0MjKjgu7MkgDWhtmo2iZ9q4BMrhFHt/T/rczQFx8RnqyWHkQBJ4iWFwgpqyv5Y= 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=NImDP1Rb; arc=fail smtp.client-ip=40.107.201.82 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="NImDP1Rb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tqbpePbIobnTnKoh5426CBOzLMuuuYtWNAKNdh0pAlKsk+WfNpX0+uJilKyzY9CAwaCUbwHxe3168aoiSGePtQQq7B7nxodbo174lEHPlUyyRra5lqaqkhe3F8J12paXcvKoYa5DrGheiECLa5KKBULo4ZPTX0Aveh0NqRJ2KMtIeorl194Cu1ydJQOlNBl+U3RnLD8dQ/BoUIPxCk0qiOiUZ4c14OjRdQhBehg9elgNktq73gI3/GriPfDgK7zUPQRMKeQFkIyQ77NXi9A9btbUoJCP6JDY+sYweMAN+RMQjZ+9FOB3DMMe0XQKFACayGu2Eobr3mPJqinepzoYxA== 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=FEQ64DogGe7zApRNjYrHuC1t0WBVDourq3EyWpLopn4=; b=sTdXPTXvA1KdXMzVnXt4yrkNe6HdOgy7I6ANce3r6SU3KgUQGL6yf+jBBHdMyx2lUXUjrgiHvcNDFPXCNRNCFkvFKxIIgTPrQo8V58gzFnTFUC3hxDzbypR7r6vDszFD1Kiox7uZmFxf5l/N8Z1BdaS9XS5sqeIjvDOjSJZYwX33D0WwGUs7paucWshdbCgbuAt54qXU8sF7k4mzQv12A46cwD0INfwZRKV25yWWD4LGDO7tvSpC9I0ZoyuKBNMn4U5D1dt/3fW4ZXH0Q6Xig4NIWOjXobi9pp3ZsO0v2jKA0ncKd0KTqrssRBLcqtlBLHjeOzSaV+MqjWfUWee6CA== 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=FEQ64DogGe7zApRNjYrHuC1t0WBVDourq3EyWpLopn4=; b=NImDP1RbnlzumTu90YrTgvuhvS8OS7ByZjfA8Spk8phb+/N/rbsZzdM5OUCO6xkmWXtGiHkVFFxOIhe4AzKAQLNH9zZkccKi9gCNyWfe3KI4s8AqTc/Hw91IB/3Zm+OOOrFZdenWRVtFo31JmB451Unhkv9FNwHxLKEKj0zGD8I= 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 DS2PR01MB9414.prod.exchangelabs.com (2603:10b6:8:2b0::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.30; Tue, 17 Jun 2025 19:30: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.027; Tue, 17 Jun 2025 19:30: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, ira.weiny@intel.com, Jonathan.Cameron@huawei.com, viro@zeniv.linux.org.uk, sudeep.holla@arm.com, dan.carpenter@linaro.org, jonathanh@nvidia.com, sthanneeru.opensrc@micron.com, gregkh@linuxfoundation.org, peterz@infradead.org, dan.j.williams@intel.com, 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 v10 5/7] ACPI: APEI: EINJ: Create debugfs files to enter device id and syndrome Date: Tue, 17 Jun 2025 12:30:24 -0700 Message-ID: <20250617193026.637510-6-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250617193026.637510-1-zaidal@os.amperecomputing.com> References: <20250617193026.637510-1-zaidal@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0179.namprd03.prod.outlook.com (2603:10b6:303:8d::34) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS2PR01MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: 1cc2c9dd-4638-404b-0d10-08ddadd5782c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Y/BeE1ViGTU64vhKrKNU6xKlNNBw++TtagG8qY57RYSONQfK77HlGvQxKrmZ?= =?us-ascii?Q?KPhRRfAOEayYccpjJbxnWTRTLpaakmaC04QA/rmxBoLS3uw+MWVoOPwHxPJC?= =?us-ascii?Q?iiTeEz50BsvzwAOWycADyd8C81pF5ztNLmdpUoVOXNxgREAKdOgmBDuS+7BW?= =?us-ascii?Q?r4BwwxhhXQy55FQU5SV11rMDhZctmjK5qMgvaLsI8A8y1nddAl4JKXcd2uUd?= =?us-ascii?Q?SJrdMk3Q416WGSqOTeFbzZPUsN6sDCYgm/2BHGKVC3NIZymkMbsaklWfabIR?= =?us-ascii?Q?87Z5Pon8aYGMz+2RQHj8MYBh7wdcpMrlLdu3FoHAsdDMVpmXEr929hnRA31z?= =?us-ascii?Q?Mg/CcVbHBTkWUhV/16CH9WMeNw8GrYC8g370z0wPVZ8kyJc4K45/yTGuyQtc?= =?us-ascii?Q?6aGq2oWCZ6+U817ogtosF/u4M7T7V/1mdtfl9wtcKp8I1+GfOJpHmITdajIL?= =?us-ascii?Q?DZrAWWaGAl+VQc8ORv46dcF6fLmk5g0qsbuptzYzcztnjvRyjpjrW8PrKWxs?= =?us-ascii?Q?wCr7Li6G5Ss71ClmnkRIDplem+EraH/Ulisdd34OgY+G0UEHjsJ26ORGPH3j?= =?us-ascii?Q?BgZ5OrKRdHtvaFUtt/1qXMhekMJUQIW0cXaX1Sc164qv3m/r6YR7jvyYlVPo?= =?us-ascii?Q?4UTGbQPwqKQ2XKkyXwMHT4bzDTmIsfjI7RAIeLKkE33o3zXfwVk3EwHvESLK?= =?us-ascii?Q?7vxA+ILPVpRyI/4Auz/8uTWgwT2iItW9I5o39zSqqQ5c02omaw69ZXmYKNHi?= =?us-ascii?Q?FBMq122ud2jibllNAeh7tyrIksQwpkZz0aCc4CPXiCaX2CEzsceoWYtbFPDe?= =?us-ascii?Q?HoTFpamAwwpHALku/1vMsp3oH+cYGWWw0HLRAnKtuEwvrIULRe1yJvK5g9XD?= =?us-ascii?Q?uw4UNhMMeFDeSixjV8+YLnUC7DST7Rez/wJYAF1EakO8HawUMsns7odCWKk0?= =?us-ascii?Q?NeV95UNgJtsD3LoB9WiVr8RLX4G0i7VbqH+BFGdf0JuN3HEVPn+L2Mc1ytbD?= =?us-ascii?Q?3SexFSfJYijZvoCyi2bhotxyXXvRZi9tXuGN+pjcMM08kLqm9nd9mikc8I42?= =?us-ascii?Q?MFhg4zrUPFH7Gm98WlX3f5CUQGfTH3bFkVhq1SbaKG1pwml4ngzhv9/jlBk8?= =?us-ascii?Q?Ii+oCpzTNd/aWevaDgpv3BUhikdVTk+mZbiiJx5FUH7VfSEMPkiPy2UbIv3b?= =?us-ascii?Q?apGE1545uClBh3kBx04v9dP5XTaZr4OUNAX3Rxexd0VdQUFcfh5tpaCp2hGv?= =?us-ascii?Q?Mh992vqLCEZKQOsh+QAVOZ//jnTyuPS5XZM5nRE0ynm6v5luzHDJ6toReOiQ?= =?us-ascii?Q?oADeGeKyQhvMPAsXswy2ogOADMZRt63FLKEYj4vPofCXhV9fZMaVSI5o+GvY?= =?us-ascii?Q?MjqhKBEqhqt/sGJReFYjaSnFESR97qYAygy0iCi5IOJGfclfrxAWPc7Y5Ydv?= =?us-ascii?Q?PBjMvUJuTMNOjCmQyDV2WoyzDitP/vNgBR7UJoxMLiQ11MOGuuNomVH9oX6u?= =?us-ascii?Q?PUwruilsBhgZoKM=3D?= 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)(7416014)(376014)(366016)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XAZ+iuXwtONG0KFUS91jgir4blLDn6rp/Dimgp7jZVXcMBUSXcvat63F14rG?= =?us-ascii?Q?rszUbmWabVVA4DD5p9/ELOrskP3QicWJ5XTKvognBKa8bDeCPLgO0qyDuaZV?= =?us-ascii?Q?dLUPP5rKLzoQi1psnYmuAwbT+Duiqo3IEKYuOL9r/EUEFGc7ultjEo4kgSo/?= =?us-ascii?Q?o2RkCTCVjbhlRuyg1W/cIz5IgaBKAZuFoZ6mJYPBi5DyBoL8E1kUFC806hVg?= =?us-ascii?Q?eDPWiD1n4KKBhqfJfJvzVw38SquTcn7D0nbTYnzILpbiGh0TWJyJHShJzXNK?= =?us-ascii?Q?3GqPf/gre55bAvOCqhRu+RCFCk7geT6KsSdCiN49gjGFIqU87pivrVlY2TH3?= =?us-ascii?Q?dw75EL4Zd0k6sryBpCNKzeS1JvN+sMre9Wuj7D3H+Vz+Y7PuyUd7Y0h4rvUg?= =?us-ascii?Q?IB1KBPSdLHFRvjKuNJpGyMevaFFtTMaaDbI/YuKm+C1ZN1V9LvmzjZ+ztMAV?= =?us-ascii?Q?4dVhhgvLptNIr4fWlvCIaJwiFyN9VaMrp/c7+Im7i219jXTkxu3PC2jqV+fY?= =?us-ascii?Q?6+X64+DXXhTEVbDuvrNwiyUNIJIGeeP3gEjp+SxLyFrhEDub2byc5ZZfv9La?= =?us-ascii?Q?Klt5XXM/wlpv/5276yesaKi+3y0KlxBVIy3UushBYU33kTWeK0HnsjHP71x5?= =?us-ascii?Q?Efh3RZsEWZzJzLpjXJYlBo6Sqd05+keQxY9h5G9gUIwSSZSaqopQWWy5I8di?= =?us-ascii?Q?MB2IchicCgs9cmzE1bZhpEBmVeNphW3lLr509BMqGWzo857UP957usJjQ4BX?= =?us-ascii?Q?h0PdUPfMiZSXIFFru8xpL31X0laLOGzp/GcYhunSRGRGbMm0fT0PCL3imf2t?= =?us-ascii?Q?S9dD3NUZWBqyNeyReXDIw5n0BXmGyIrmj0/W8pDL8wRXfmJ+ZzH/BSTlRNw4?= =?us-ascii?Q?nDHWJ8/D8QRqlAb60G9ttZ/SgNcrOIkTE+SC31xEmjinUDiFIJh77YJwjTpN?= =?us-ascii?Q?HbCcvlE3s3UxOuQUBhOBfAAcg8yT5LrI0X01wCXwFgZ2u3adbcPOXFvonziq?= =?us-ascii?Q?S1pz9WQjS/mBCC0jOrdQlGGgeb4mRKAJnWHAOanlnZNcB9mZm4xjmC7ebMEV?= =?us-ascii?Q?m9PlMJxw7SOP26GqyDTbHLKNQIkwJHLcnl29l72LZtAboEiDkSavNNsm85A4?= =?us-ascii?Q?oC3KoLj4Lv6c+pircORv2YNVRPRHV0h0wLqwfSo793weJG2+cSlvASfw6KJs?= =?us-ascii?Q?6X1+Sj06z4ayLTDIhj0Ot2f0tqSp17K5reG+9MfI7ePzoPDxqA7xEyogVy8o?= =?us-ascii?Q?EUAyKdrNoeFNHmg/2CT2Feyum4A2hQKT6CxhRajdj+3eXNuBzzdU2S+LATU3?= =?us-ascii?Q?qUC+YnR37cj3CHQFJtdnZVJHNUroZXMcsrQ1+5+c9uVXQ8fhWPLyuouiG2nr?= =?us-ascii?Q?LvIZMInWknlZEP9LQu826hAWZpFLU1uXG/51SnNurDW8j90T4L0eOMeTrjZw?= =?us-ascii?Q?Al79yEHXuVrXRfLj8UpYOwzR7VujFPgrC20GVvQab5pZwRHv4u8C08U0xuAc?= =?us-ascii?Q?Sq6YZ3pK8+xrwFUrTCKxfwp7uccfvheP0WwPKXLpFEj/aoRNq43bpxpM39SP?= =?us-ascii?Q?16ohOkhRe/W+jZsJ15v5Ad6MlJILePevV5jn8jrZGKELozDFMQMhPdF14mvy?= =?us-ascii?Q?Yvi9In81Isi4E2s5xr/lrDs=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1cc2c9dd-4638-404b-0d10-08ddadd5782c X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2025 19:30:51.3721 (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: ZI4kmV73bJQlDYoc9fx3T0TfJ8uGZcsiHroh4rkkFWGLiW45w1vUSZsqwYz4KLtwGQc2IKBNnm+BFB4fN+M+d60ec5jmATqcQZlKG9SVNoAnuiNIYLUENU8/85Awv6Ml X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR01MB9414 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Ira Weiny Signed-off-by: Zaid Alali --- drivers/acpi/apei/einj-core.c | 97 +++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index ea6fd4343e63..87f1b8718387 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -111,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; =20 /* * Some BIOSes allow parameters to the SET_ERROR_TYPE entries in the @@ -712,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[= ] =3D { { BIT(0), "Processor Correctable" }, { BIT(1), "Processor Uncorrectable non-fatal" }, @@ -848,6 +850,98 @@ static int einj_check_table(struct acpi_table_einj *ei= nj_tab) return 0; } =20 +static ssize_t u128_read(struct file *f, char __user *buf, size_t count, l= off_t *off) +{ + char output[2 * COMPONENT_LEN + 1]; + u8 *data =3D f->f_inode->i_private; + int i; + + if (*off >=3D sizeof(output)) + return 0; + + for (i =3D 0; i < COMPONENT_LEN; i++) + sprintf(output + 2 * i, "%.02x", data[COMPONENT_LEN - i - 1]); + output[2 * COMPONENT_LEN] =3D '\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 c= ount, loff_t *off) +{ + char input[2 + 2 * COMPONENT_LEN + 2]; + u8 *save =3D f->f_inode->i_private; + u8 tmp[COMPONENT_LEN]; + char byte[3] =3D {}; + 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 =3D simple_write_to_buffer(input, sizeof(input), off, buf, count); + if (c < 0) + return c; + + if (c < 1 || input[c - 1] !=3D '\n') + return -EINVAL; + + /* Empty line means invalidate this entry */ + if (c =3D=3D 1) { + memset(save, 0xff, COMPONENT_LEN); + return c; + } + + if (input[0] =3D=3D '0' && (input[1] =3D=3D 'x' || input[1] =3D=3D 'X')) + s =3D input + 2; + else + s =3D input; + e =3D input + c - 1; + + for (i =3D 0; i < COMPONENT_LEN; i++) { + byte[1] =3D *--e; + byte[0] =3D e > s ? *--e : '0'; + if (kstrtol(byte, 16, &val)) + return -EINVAL; + tmp[i] =3D val; + if (e <=3D s) + break; + } + while (++i < COMPONENT_LEN) + tmp[i] =3D 0; + + memcpy(save, tmp, COMPONENT_LEN); + + return c; +} + +static const struct file_operations u128_fops =3D { + .read =3D u128_read, + .write =3D u128_write, +}; + +static bool setup_einjv2_component_files(void) +{ + char name[32]; + + syndrome_data =3D kcalloc(max_nr_components, sizeof(syndrome_data[0]), GF= P_KERNEL); + if (!syndrome_data) + return false; + + for (int i =3D 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; @@ -919,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 =3D setup_einjv2_component_files(); } =20 if (vendor_dev[0]) { @@ -967,6 +1063,7 @@ static void __exit einj_remove(struct faux_device *fde= v) 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); } =20 --=20 2.43.0 From nobody Thu Oct 9 10:50:43 2025 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023082.outbound.protection.outlook.com [40.107.201.82]) (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 C01012EF647; Tue, 17 Jun 2025 19:30:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188657; cv=fail; b=fUMel7l+fUG3qA6p1VIeDgXiXRxCTE9IDA2hI+ROCEa06IK6J00g3gjOCDMegOtmXEJym2KvNqIa5+g/3I9ltCqWiceH+e6PT2fIORY1bhy2MczGT8kU/mjh8ws4p6OpQrRA8jcpCEBp/aKgwJlHMmwQdaV0HVHtHUIe3PcPNio= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188657; c=relaxed/simple; bh=2ad3rtYF0r+FF1FZ+U4gMXrKbcnFn85cJWSicsBUbEo=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Q73l/xgEqDpyrdUQ6evPxaX0g/YMzzo8IW/GUItOC9/9TzEcz/+/LWUm8eXUQOqT7HAotjTGZkJPI20DMtOAoFGNH4HJuaFYXBRK1fiBVRg/e8+7yNJmkQudw/XZaVvQuy5kG7r7yTyyRZxhQyrOJW4uHWhfW77cWaO3yl+Q/Lo= 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=RsQ9xocW; arc=fail smtp.client-ip=40.107.201.82 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="RsQ9xocW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wolJ1aABJ+yslkTCnlmLSKTO76eor18zskDo53f6uq/txhvwQguQ3lw0LPbcuvWLfvmmFnUIMUJRNQpgITPc2LBGN/D2ZfZCFIaL+hDrxDjIqfg3IL3xZorM0xPYfhgUab84ZkTZ5ccguH6hyeaMgh1b48nf1tHqjJ6jmM5J5/swZyZ5K3CvTTpqnG4hgY8sz/NTE+QEuV8MICndfvsBRP9yQauENMgJsfwZUt1U42IefDkOguhGSQ6W6RjP4P0nwBxktXh+VkXwJhr2wL8Fx/H6hTb/9KlqY/b597UgRt1c5DTE4a80vYm4TXIp4AyCeAyV5ugSrsjPryh/uI4VDA== 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=zvaJ9Nu7p1jh2lTgyznJoC7BexqRkwttw4Ye4eXk4g4=; b=naqdjxlW4EIaLyaddtijEIbemm1if+o9kzKe6OJIZhx+vTLJ8yPFmA3P6aBbL/Umf9Ki0ubDPMdrfz9Xauxf8ia5zBmeMyj2doIUakwfM5t4myO3WUfVY0rcNyhQnm6qCKKiOKqPL6hb9Ju7juXs19im5JSGgqE5mcCYEwq5SvoFlQqkgn3lO/6JwYzZU+NXSqHPWnDfjAgP0o2CXo3iS18dK5fgSAfRkze+ZOs6VKrLG6/VCFJuzgCJsNpm6U9divhn2QDpH3r0tOkA0xJQW6x8jvdL+sX7pgPknrKcq3nqKdxTM0KPpVv1pwWwy0GCxNkVAl5QAPz1BqE+yEW+iw== 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=zvaJ9Nu7p1jh2lTgyznJoC7BexqRkwttw4Ye4eXk4g4=; b=RsQ9xocWNgRNY2vacpxD3BHPpiW0ZMNIAJBo9VmLqYzHr2RVfUc7Ubgiw9PwdkmiB8VZuMcvW4X+bbbn6gf5aZNTHIreNHxBbQkyE/PT01OMpD9QZzrljakj8WZD/I9tbK/1NW62iI8Kg7cx+ictWGJOPKudVrpTHTenKVZ+SSk= 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 DS2PR01MB9414.prod.exchangelabs.com (2603:10b6:8:2b0::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.30; Tue, 17 Jun 2025 19:30: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.027; Tue, 17 Jun 2025 19:30: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, ira.weiny@intel.com, Jonathan.Cameron@huawei.com, viro@zeniv.linux.org.uk, sudeep.holla@arm.com, dan.carpenter@linaro.org, jonathanh@nvidia.com, sthanneeru.opensrc@micron.com, gregkh@linuxfoundation.org, peterz@infradead.org, dan.j.williams@intel.com, 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 v10 6/7] ACPI: APEI: EINJ: Enable EINJv2 error injections Date: Tue, 17 Jun 2025 12:30:25 -0700 Message-ID: <20250617193026.637510-7-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250617193026.637510-1-zaidal@os.amperecomputing.com> References: <20250617193026.637510-1-zaidal@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0179.namprd03.prod.outlook.com (2603:10b6:303:8d::34) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS2PR01MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: f1bfac72-fb12-421d-7365-08ddadd57952 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?F9RGozveik48e8YsfJXSOuPFQ+GbR8xGVg0F3auM/t3lcgE55Z+VV2XGFQcG?= =?us-ascii?Q?kmfCUgmLnqq49S48KOviJcrDdNFQfJjduMiIemjYE6q2phlKnUHhZJtGc/c8?= =?us-ascii?Q?mkdE9J2Zr4yn9i/AKE9VQ7T2rKW8yqK7La5eN5zc2GjMPnzcIhgC/2qG8mWf?= =?us-ascii?Q?lpof/6dfRKaZsmQTX7c51wDNQJIO4SUbXUY9HtnLuY5t2XfCf9KGFaymDyiy?= =?us-ascii?Q?IuGosXIduZE/QgCV2DZ6YZddCtYLdcDq490L1XdO56oV5wAynGtYBAsBDaM1?= =?us-ascii?Q?kQ8b3luF67ic6WH9UqqWhh7ZsebaVqmqflQcgS855c5Zd2JhqTjNmMGAsBnK?= =?us-ascii?Q?8Fy709UPLi4tTAhaloc28EZmIGrKy/HXBVVOKVkwU+8Z/HlBPvjDB0KQA9ij?= =?us-ascii?Q?tLBvM2juDIndBGRA3Vx7HxRno+i9XM2WFcau3J+G82VmOAFJCdlJkcWunCIE?= =?us-ascii?Q?6spJKhcncu3kCwjfTRlNPvzRs/Xsrh8gg5kBAmpm9rahbqlhwzlWO8kkPVIC?= =?us-ascii?Q?b4154J1hAS5jGG4ASG4VdLPKQ/R+b0pSRRXooWMIN9cqDjJSSH61suLQYf43?= =?us-ascii?Q?mPQ5V8ozSmHuQO5Q6YsmYxhnIWSzf0JbsT3Gq6bjZ2Pb06t+z4asd9CZ7NWw?= =?us-ascii?Q?qxhmKR7/0/hMR7GNiM9/bv46D90Ryqi4kH0+Rc8CdO9SMkNyFxGr0gpNm/Dl?= =?us-ascii?Q?QlrE4sYsmI8OMF2UM4Qsn4G7TmiRMIS7yoEV7S4xNqSaTTXbOPHc1/00IHdw?= =?us-ascii?Q?NCTz7ZTUt+1FZaYWgdZfHvNoCn+R6mDTjEaOrnxOxplAXd1oo57Cwwak/2AW?= =?us-ascii?Q?26L0s2wv/uFJcmjI2PpA3SvN68IBqacbG7GBYR8rF2Z2NKZ00rJiE9OqAOc3?= =?us-ascii?Q?Ad26Q4yfHOcqEQgEmXDXg3edp88QCXs+z9j4IImtChXnllIY5V3H3hcFA11S?= =?us-ascii?Q?lm7byNxXwTBtPKILTvnQ9+Eg4E1Wsa0fGQMkviDxL0oMpNNCR2sjfdWYt2sN?= =?us-ascii?Q?OvjrnIhIuXIgS0pljkVxgpsAKPrqjpAyezhySV5C9NGRNw+ZaBO2LTZXnnx2?= =?us-ascii?Q?kJtZE/6o06O/V25ascgEnHhz7OCV0ZBer0Jyl25TK1YbfZ8JkrMNfx1ppOts?= =?us-ascii?Q?44lnbuhYHJxLs4HigmDkVo6sO0gRTQgCg9rYtyy8pniYu2hDocTmYmyPWsYK?= =?us-ascii?Q?zbQXW3G5EEikG875XubNH8xnaxlmmZv2l9zVXyr3YidJL48KLTIi8GXv8C+R?= =?us-ascii?Q?/psPM7vL+QjIqYkk58beeH2tk/8ZLAMKKAdPiQJL2D+6PdUzxHDbuP0Z9FNi?= =?us-ascii?Q?vdxJHOvtEoxXGN5kbUOggS+7DoH4jp42SLFezlvqH/u8hr2jb7u/LFm3xF7Z?= =?us-ascii?Q?YDO3QT+me5e0evM8fc+WeD5LU1w6nBxZ9A+HeAiDVIMm8RpP/td4lD3zp62x?= =?us-ascii?Q?ZPA7Bf8XEJzAWhNFU0L+30nZSu8AgNSNbnbt3ttp00uVfKjU74/MGYburfNv?= =?us-ascii?Q?yWVU6mg38ZVWBRo=3D?= 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)(7416014)(376014)(366016)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?q9JGivdt3oOEWIK9eoX6Q+2pzXTATqmrkt2a0fv2Rrj47G2XmyImAWo6ggaQ?= =?us-ascii?Q?rolj/MM8sTtaKYk2nn2hKLw8HdG3s5gIKGiFc34wAaEvtfEGR9I5K8LQkuPr?= =?us-ascii?Q?wF5kyQ/fFBE75wbNg9n+iurXkoUkV2l/XlMZyZ7MokxLkKAJtGwOpcPx2jz3?= =?us-ascii?Q?vxXf6og4CzoBLWVjhC1TZ1FYCR8zrhY3BhqV3gRiyW+eWD8MKlRQhg1O60NP?= =?us-ascii?Q?gBtfOh3xSEOlCsKGbxRmMvMx6bSWPyKHAlOkHxtGvGY2PVcwo9XIDf1hY0sr?= =?us-ascii?Q?bg52kYmaBRZo7u2BM3/GJ2BfBPsPMuB9SHsOq+2IJVahSObB/2qw5dJrii3g?= =?us-ascii?Q?y4eNF3o956YlrBuw+d2ue5KvuNXD/JWbSkuyFJX2oIvECN3/ls+Jo7ca81W9?= =?us-ascii?Q?lCCgXcnRMQ0jRPdHslUclXUffptKlKzKFRc7vNG/I9+HtK5qCAQrXd2wl+m8?= =?us-ascii?Q?ICNl4YOaLK9L5EMn58G1uVeuCOTpXxSIstEFgf80lsmKlJwqS1yf2oBFDJVb?= =?us-ascii?Q?CTrTsscPLywRlQF0BZC76TzTY78EYe4GWqb7oUkFlGmv3cjwulIBzitzFALq?= =?us-ascii?Q?BkGjw+t/xTtLcgB3gf8b6/XhXATTO+NPWPIQXQ3poIq5vnRAPyEBw6hQxWLY?= =?us-ascii?Q?iUpLTaowfmsEHKQLbQ0R/rC1O4bK3JLKJr0kWrjkZojKPx0qMaZF+OTauD4q?= =?us-ascii?Q?1HwXwr5irHWeF26VFWgWDti5v4FDYSarZV/q3OY6mpq6pKj4FJH3enIOtqPX?= =?us-ascii?Q?Br/0OCAxi3Idcwb0kGRrGD0L2r1zF66ep/Akg1ebVXL/zeZYQbPvht/iGWBz?= =?us-ascii?Q?MIigr9mh6dn3vXQVDA2PFIRjFj7z3JmWJsjs/NmwTlQ6vaLu/Yvjozu319dt?= =?us-ascii?Q?gbG3hNKaDkQiLmTeOyd49Cp5pM0j5Z/k0cpX43fNAADgna81LIhUFPX44BHr?= =?us-ascii?Q?vFd42Dz+GwZ9L0XExHquygj44ZhgPqXlfxvg+MM99lt9X7JZ2FzLUSKoH4mW?= =?us-ascii?Q?TT+K7DnDEgscAtriVxXbvC0ufl4RABo1rfBoEyKm4k0mLdQwPRBnMhVNIBV0?= =?us-ascii?Q?awO07cfj9K8/8el6JzbWgkSFwpoQHwDc84WItfOpcbdaRZ8+ggcTqqAKRGdS?= =?us-ascii?Q?1x5734+2rzPuxMexrXavZu27Q5+vnJr/pk/GOoEg8qCEpB2sSmFaZCk1Wgwr?= =?us-ascii?Q?KfSr9lV7Gfbc2JQGyxNXHmdxdV6hE02a5AqWlhvmmxBCLknO8p5lEqN6gOlI?= =?us-ascii?Q?8DnRNoOoicrHlt1Ea+s6/+X9KhHqdGK6eNp144CKH4yjX192DWrMxA1Ml09B?= =?us-ascii?Q?Ne0Q7YlI4VOVJrilbWxCg/cUGIOLCVxSvfJ3Ut1jgi/McgWBIS0sbNB6NFjx?= =?us-ascii?Q?Ipvl9b2sFo7GucP7yYA/efUCGYDxBTo3GtgnZ584V6E85b3EpkL+3W3XNj7i?= =?us-ascii?Q?KDsHONBkCna13dd+6k3kqsH3KcDcD9FcJAEaOuDJdWZRi1L82n1YuBKONYJ0?= =?us-ascii?Q?eVJ/BMT6p6W5QnLa/h+HhR1gm+rr4b20WGRFmGKMABSR4KGwr4xf6PKMjrH5?= =?us-ascii?Q?nDvw3g6cWmuzPL4IjnFKy3hkRYOnLLM+z7WUN68125FCaS399n4juhG6JqUV?= =?us-ascii?Q?51Dn3sWqZq6Hn9aYUM95zyY=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1bfac72-fb12-421d-7365-08ddadd57952 X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2025 19:30:53.2892 (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: M9Rq8V1BT1hvuJaoeaONr1vW/HE8DmByQEP0HKMM8gEMUyGJrVmReWPXtQ+OpPuNdVo/A/u8Dl+uEu+O8HVSFWqLmXaqHPFMVfk53ZRrAGsolgxPkQe+oAAG0h+jaHDY X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR01MB9414 Content-Type: text/plain; charset="utf-8" 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 | 58 ++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c index 87f1b8718387..d6d7e36e3647 100644 --- a/drivers/acpi/apei/einj-core.c +++ b/drivers/acpi/apei/einj-core.c @@ -87,6 +87,7 @@ enum { SETWA_FLAGS_APICID =3D 1, SETWA_FLAGS_MEM =3D 2, SETWA_FLAGS_PCIE_SBDF =3D 4, + SETWA_FLAGS_EINJV2 =3D 8, }; =20 /* @@ -181,6 +182,7 @@ bool einj_initialized __ro_after_init; =20 static void __iomem *einj_param; static u32 v5param_size; +static bool is_v2; =20 static void einj_exec_ctx_init(struct apei_exec_context *ctx) { @@ -507,12 +509,20 @@ static int __einj_error_trigger(u64 trigger_paddr, u3= 2 type, return rc; } =20 +static bool is_end_of_list(u8 *val) +{ + for (int i =3D 0; i < COMPONENT_LEN; ++i) { + if (val[i] !=3D 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 =3D FIRMWARE_TIMEOUT; - int rc; + int i, rc; =20 einj_exec_ctx_init(&ctx); =20 @@ -521,10 +531,10 @@ static int __einj_error_inject(u32 type, u32 flags, u= 64 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; =20 - v5param =3D &v5_struct; - memcpy_fromio(v5param, einj_param, sizeof(*v5param)); + v5param =3D kmalloc(v5param_size, GFP_KERNEL); + memcpy_fromio(v5param, einj_param, v5param_size); v5param->type =3D type; if (type & ACPI5_VENDOR_BIT) { switch (vendor_flags) { @@ -544,8 +554,21 @@ static int __einj_error_inject(u32 type, u32 flags, u6= 4 param1, u64 param2, v5param->flags =3D flags; v5param->memory_address =3D param1; v5param->memory_address_range =3D param2; - v5param->apicid =3D param3; - v5param->pcie_sbdf =3D param4; + + if (is_v2) { + for (i =3D 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 =3D + syndrome_data[i].comp_id; + v5param->einjv2_struct.component_arr[i].comp_synd =3D + syndrome_data[i].comp_synd; + } + v5param->einjv2_struct.component_arr_count =3D i; + } else { + v5param->apicid =3D param3; + v5param->pcie_sbdf =3D 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 =3D 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; =20 /* 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; =20 + /* 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 =3D 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; =20 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) =3D=3D 0) { if (!sscanf(einj_buf, "V2_%llx", &val)) return -EINVAL; + is_v2 =3D true; } else { if (!sscanf(einj_buf, "%llx", &val)) return -EINVAL; + is_v2 =3D false; } =20 rc =3D einj_validate_error_type(val); @@ -828,6 +859,11 @@ static int error_inject_set(void *data, u64 val) if (!error_type) return -EINVAL; =20 + if (is_v2) + error_flags |=3D SETWA_FLAGS_EINJV2; + else + error_flags &=3D ~SETWA_FLAGS_EINJV2; + return einj_error_inject(error_type, error_flags, error_param1, error_par= am2, error_param3, error_param4); } --=20 2.43.0 From nobody Thu Oct 9 10:50:43 2025 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023082.outbound.protection.outlook.com [40.107.201.82]) (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 951412F2717; Tue, 17 Jun 2025 19:30:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188659; cv=fail; b=sTQ3zeVp/+dmRHC5RSe5XNVQND5W0y89xzbWikuX+y5ftJ3pZHfNVKgcggxf3RoPl+V5g5c8ept4s8VNwWaw+SYIbEwNKJ+I8flR/6qHOW5tvDzn+n91PZhtdG9dxUliXq4GCaifLI1wI+7S17vcmpUffYmFTg8CPdstGWTjQbo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750188659; c=relaxed/simple; bh=D/XazX5aC7b2ef+GsqZJ2uq0XWVcymdjPiB/jocYShk=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=H7i7Cz4Nnq4rtfoYTeeULTA5DUYzj+yJRTdVQ4CLJfUbAsCRAHzZ+OuDeC3M/JhdbZ6f7wLAXKn/ul/uUemtUw0iNFFPACOujQunYtuCBlQYldaHOmRWKwG3MHjQKuLhzdRCYDHrlO+D8t/FNTe2BwcfTUO+4MC0XeQp55Llk+I= 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=rVBvlRmd; arc=fail smtp.client-ip=40.107.201.82 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="rVBvlRmd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pBQGnMz1Pm9F/ulst4yWNsizjQHyiBt/lPTDbPOSEqeByzD4wLwMHM3ZaSGeIw8G8zIw1WkK1wHJRnuGQzLaHxn4Id9eKrMLBwvQQbpXoxmKYoRsPUS5VNSP7q5GwgQ9Gt3UO8ggSV6tt15sTIowxX/n4xPFy+l8oHD+ZgVE628bu/n6GoCH/jfwirigfJnCiNLe+d5JTlzc60Bly1THaEoT5R+g7yvNjWtfvyG7KGQOqnBYslBCGWD19RgM/d4ZG5WAmTZzpiqjmsDA6QgunA6/J66YzDxL6kf3COvdlkWpq9uCZBTC7w0J508DM4SdPifaiOcXUXyadXbhTFqF6g== 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=R/OE9pc6iG3bYQh/l1XPeBfG5hBLjZnfuRmYsj77Q1A=; b=REfe7ujfLfD2K3WIj/W4hNzlr9QgjjS9Q1AIUykTExsyYckjEw/gXVwScU6DOts6MltHtGe3OlsBK4wSabGlCRbvnrFd+TBDCEFblWebONgmUKztWHsCwZUtITkLfZKJrZmetZqNcjAhHAEfTJLgP5mLW47uHTii7IV95+Rwl8qq+WY76JWHPojqCUa36HE1c/3Z6qRAJuhdvFQ7U5D5xiGt6nj7+jYs6hj92iEJzYZ3tKC+4aPivVkgzpKn7WSqplD1RlNGTI49PnuW+8HwSIOQuQsVen1Ceh9tHwCA+TprC/JRbzBUYVNC8cCkKldNHQpMxquNGKiYtYfJAVaPtg== 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=R/OE9pc6iG3bYQh/l1XPeBfG5hBLjZnfuRmYsj77Q1A=; b=rVBvlRmdZkNODsY+E/TBW2e04kXWmPoJYMS9N+TCcCVv2A2HjhPfuQH0YSdTm1fjeB0tKK10BVFcSZsi5n8cbYECWqy9BGH5Zcyl336g+d4Sz00ckNl0JNxNmuVrNpj924Ud3fbUWVZShIPCxipsmkc35v/iQIIMtOilLeQfhdU= 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 DS2PR01MB9414.prod.exchangelabs.com (2603:10b6:8:2b0::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.30; Tue, 17 Jun 2025 19:30: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.027; Tue, 17 Jun 2025 19:30: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, ira.weiny@intel.com, Jonathan.Cameron@huawei.com, viro@zeniv.linux.org.uk, sudeep.holla@arm.com, dan.carpenter@linaro.org, jonathanh@nvidia.com, sthanneeru.opensrc@micron.com, gregkh@linuxfoundation.org, peterz@infradead.org, dan.j.williams@intel.com, 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 v10 7/7] ACPI: APEI: EINJ: Update the documentation for EINJv2 support Date: Tue, 17 Jun 2025 12:30:26 -0700 Message-ID: <20250617193026.637510-8-zaidal@os.amperecomputing.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250617193026.637510-1-zaidal@os.amperecomputing.com> References: <20250617193026.637510-1-zaidal@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0179.namprd03.prod.outlook.com (2603:10b6:303:8d::34) To SN7PR01MB7903.prod.exchangelabs.com (2603:10b6:806:34f::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR01MB7903:EE_|DS2PR01MB9414:EE_ X-MS-Office365-Filtering-Correlation-Id: a7548b17-5f7f-4321-c5ab-08ddadd57a7c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|7416014|376014|366016|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?6V4XjFgMmeHl6oG/cDrCk62MaaNTZL9E/ISLpSnjK+L5IOJAwgaiJcCqOmdI?= =?us-ascii?Q?vYbSrkozBBaxbRx88PhYIU0qGe4bEA2dvBBDPLsbxrThTeApcKsuRn1szabM?= =?us-ascii?Q?9o+OPZUNz0RNx+K1gUyuXshxnlEk6ij8kKe9Jsf3eYL0ZiGBGUjE4FL9hwGV?= =?us-ascii?Q?F2Y6BmRgnY313yBM/Fblbl+TH4qcJJWADc1x8a0frvXPU0//ysC/suzUzFPT?= =?us-ascii?Q?gFp6dLNQvFSYG+cblBj5P0r/2IoOaFKHHecSihGSVzFuJQumuYemiuCVizpp?= =?us-ascii?Q?7Q1IXqewCFhvu76Nn4nw0v/B+NCDPAfNiMas3+t0a1hdc+afwp3z9ZPvCd0P?= =?us-ascii?Q?biaBY3B/uRuWg4qFSxMshb2HQ0+nJOf4LQqaI9zU7XkYFktE4D5mZoNp7mrJ?= =?us-ascii?Q?VajhkDKDmH4nw1KBJeDcP5EQakudgi45akYZ5cr/69nH7spJx9jjVNmsZCdG?= =?us-ascii?Q?jE744E9y8HLPilGt6OgSYfnK3BEyDTClZxY0pD8f8JaRB02TEuPmGJUxLOei?= =?us-ascii?Q?m+MsFV6jZFLWPPWttj9ioggfeqe7O2VpcMcAV6pDuUB1o5v2qpVZyZhmTfG6?= =?us-ascii?Q?WAITETZhMifKWWNIOLYjG7DLBdlFlu496KF9IXGOrgTcKTiI31SfuoApaQaT?= =?us-ascii?Q?LsNRV6BXrW2O4qYhkr3y0F9GtqyJJNqG6zlZWeTYnQadLVOVwZURJxH8qAov?= =?us-ascii?Q?gx03lTQNS8oNEWpcRy/pADZqI0VJmwpma9OOOnWSPVWOmWc2i1/XhWjetKC8?= =?us-ascii?Q?hMY4yjrUvhWMJgnn/iyuydOU6D9X6Z/IsyTxJbTVMpKGsQOKWUngmJy86TgZ?= =?us-ascii?Q?ZpEQ44EaCLcGmsfb22JCGVzf41zY6AeI5YPiCIQq+WSWwcfPZVzZhdqUmYCG?= =?us-ascii?Q?95igTK8oJfj3z0mAbnJ7YYIQSjaurSRRDuw30sVdVeszdE+vU24LjAgcr6gF?= =?us-ascii?Q?9ueH0uFu1jP7sGh/buQbvrlJu9CUrUwQedqb7eTFwPfW2wRW9Rohl0xeEL6U?= =?us-ascii?Q?7v4y+WRCzh4dofah2V8FAMTexHUnC7x0RsdKgPQ8+53kWFg8WvbbVo86kdyE?= =?us-ascii?Q?ACG1Exup4nnZkRrAaw0grMfBOQ3dcipmteMagXT8gqFadk+aGhw6Tni29jd+?= =?us-ascii?Q?VBLcIAN63iydvoqqF1Jcrp9OleiezzgDPXHkObdlqQZnyQBWGLmJIx9lZo3K?= =?us-ascii?Q?SE8r81GrWk2CDYVIXPm1H/V4TSGRNOVE0Xecv+t748WvXVf8hah+K4gW6Ddz?= =?us-ascii?Q?LMuex40LvqjLIdcackPiVANxrKHqwWuqH9jh1aPsOI3GN0IBsMtOthKEEN00?= =?us-ascii?Q?eyhcuQkmDNs/Iz8+s+Lgf+tlONnDJaQXintQRUPJC7bFhdUzVQsy7dUnOLPS?= =?us-ascii?Q?pC+5ApozcqMVlbPAupN9wZbhUmZeGLvWaTVMpqT/Rp4Z0yJwo2d7TZi5hkQY?= =?us-ascii?Q?1QPPBaGvqWt6fsbO+uD5uPmCIXBzPIru?= 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)(7416014)(376014)(366016)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qEvrg4LIT+R8yR4O9Hi5O8wjh4ZGVPYZCJ6+QUsb5XR6cYXEd6Fveug0DaNb?= =?us-ascii?Q?+1Ji64Zoo5rbK3q9bNMoQrD8otwj9jeutpi1HFFWUYFeTjHmJjdHAdNQsZA/?= =?us-ascii?Q?0XsJRHIrsqn2ay6pDG6VLQnN3aU/CUZyPTqy6LcCXE8Sh54FqAsVYdYImoqm?= =?us-ascii?Q?tQ5/AfkKaQLYuzEdw9B+tP1Rziy/uraMM4ZOXtVdNQ/PAoFVlfokpxZqXveg?= =?us-ascii?Q?a8SHb0LA60PcEj7uf0q6QtxLMoaQPsjrVqjHG5PwSJ3g3WuefHKStLeugwOC?= =?us-ascii?Q?YHaDxBcFFa3iNCx5sapoLiTajHeGbyJ9xPk9hRRW4/poWbIRbsNw7MhmIEMR?= =?us-ascii?Q?VE8BUZ/ziYCceThjELaiUPNOGzz0gCXZhWIFfBdOc04gawpwXbECJCZbS1jG?= =?us-ascii?Q?jaMiXFQFMoL9t9R70o+HB1n3dMymd508tT3gJvVCnPtH4qi6WnNDdYNEgPnv?= =?us-ascii?Q?iWH4mj3n8K290fe+QrHPWgM17ERZ2L5GNfklkfBAEM5bltZO5YlDr8fITxa0?= =?us-ascii?Q?/HW4v/BUQltNe2st7Jz/Yz3r1LISA3uWjgVhiMejVKBAhdQ2Uc8oBVhdzsJD?= =?us-ascii?Q?gJJr0Vr49RP3zhmr7+6eEpkej+NPUo0k742OvJnAWgQH4YQJWdyGh7rFqRyX?= =?us-ascii?Q?3+MGuG3bajtTz/r+AIrTK/aBWFpevNH0wd2tNM7cLXxmJGIOmoPaw+bCEzXp?= =?us-ascii?Q?qygVv4F5eZypqJumX+CVqoHo/H/PRGcwDH6pnwhU/ZGxiW8nFQZFBNrE35LO?= =?us-ascii?Q?K/h6qOtvEMr2Co9dxEM2nbItVWve8MiHQ7hLEW9YcNMDblGKCy2Ztzb33o8x?= =?us-ascii?Q?IyOjm0vdnUmdUBZsh4QXi8nxB4SDQ2OrDGCjQ4Cz1EtZF0XSVML9Ggycwj3U?= =?us-ascii?Q?C7JqcFQvBhPCfEBx8Wej9YtcUDghkkOYXdXFOs43l9Ng8LkrKuPp5JGtEr4M?= =?us-ascii?Q?13LvJnotMpxJqhdV8pjkKa7U7LFqB3Wu1EqD+isXFPL1iDsVvoVz9PlndI0A?= =?us-ascii?Q?FOQ2bJzw+R+3Jmg/I7cP3NAtTCRuen9Qxkzsrhciq1jZ5eXmI7LRdbhkDpeL?= =?us-ascii?Q?Fwe9uoIv9SL0uAOvi5vo2XH9ciSW6CG61ps9gZSAFU+vzMaP02p1oPQN/VP0?= =?us-ascii?Q?ZBjekhh6w6HfP1epfQhRftVXb68N3dlgctUyy6Xh13yjI85IPQBB6xofPLCl?= =?us-ascii?Q?HzWjVEeDV3bTMk8nue8wK9habWJtFH5enuwAQ3y/roOhc3npRheFwk4rQ0bi?= =?us-ascii?Q?tC1S6iFVBdy5r/4xiEHoYBywF1ids+o1EwuhCpFCrfQ4l+SFZeMlGDHSWozg?= =?us-ascii?Q?ldPoXV7IBy6Z4KUdMK0bcyvsljx7+lB4Xij8nBgaOePzeVlZXTBfsv/nPiTs?= =?us-ascii?Q?HVS1g7u7YXxMK6MuZP3Dugdkq+fnAC8rSAKJn2j5aSDJjVkMlmTw9mG7CTe3?= =?us-ascii?Q?RtMQxPQ96BVlzwftb1R7BH2keWAlOxXzrx/0eJUIIiR5EeF+jvwWIHryNx1L?= =?us-ascii?Q?H/4dJbe6sPuf9Hl6d8sGB8X5uicwuf5jU/6joQb+PbJ24b5AxM9bIIlAg34m?= =?us-ascii?Q?fNNyb8X3TZvUxinlWDesGjnZyKGj55nlwhHiacOHXgIhWMzhAkl457tOW/Ud?= =?us-ascii?Q?qb8iLX0Ic8GUU6ROaLz9kVA=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7548b17-5f7f-4321-c5ab-08ddadd57a7c X-MS-Exchange-CrossTenant-AuthSource: SN7PR01MB7903.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2025 19:30:55.2824 (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: ej335QnsurGgHIKo0Bt2qI7FYUWL8I7iG+LKPZJRHwuvXBKfNMCHxtXmykiWEO2693D/fw+9X70Ubv7NMt9Vzd+7ZxWN1AjQVEGG/3QNBsuUh65bTr2We6Jm05WJ2Cdc X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS2PR01MB9414 Content-Type: text/plain; charset="utf-8" Add documentation based on implementation of EINJv2 as described in ACPI 6.5.A specification. Link: https://uefi.org/specs/ACPI/6.5_A/18_Platform_Error_Interfaces.html#e= rror-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/Documentatio= n/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 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D =20 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 =20 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. =20 +- component_id0 .. component_idN, component_syndrome0 .. component_syndrom= eN + + 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 =20 +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:: =20 [22715.830801] EDAC sbridge MC3: HANDLING MCE MEMORY ERROR --=20 2.43.0