get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2217641/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2217641,
    "url": "http://patchwork.ozlabs.org/api/patches/2217641/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260330094203.38022-4-kaihengf@nvidia.com/",
    "project": {
        "id": 28,
        "url": "http://patchwork.ozlabs.org/api/projects/28/?format=api",
        "name": "Linux PCI development",
        "link_name": "linux-pci",
        "list_id": "linux-pci.vger.kernel.org",
        "list_email": "linux-pci@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260330094203.38022-4-kaihengf@nvidia.com>",
    "list_archive_url": null,
    "date": "2026-03-30T09:41:57",
    "name": "[v3,3/3] ACPI: APEI: GHES: Add NVIDIA vendor CPER record handler",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "9abeac697939ac0b398bf3fab8b4c909ebed115f",
    "submitter": {
        "id": 89451,
        "url": "http://patchwork.ozlabs.org/api/people/89451/?format=api",
        "name": "Kai-Heng Feng",
        "email": "kaihengf@nvidia.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260330094203.38022-4-kaihengf@nvidia.com/mbox/",
    "series": [
        {
            "id": 497990,
            "url": "http://patchwork.ozlabs.org/api/series/497990/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=497990",
            "date": "2026-03-30T09:41:56",
            "name": "ACPI: APEI: GHES: Add device-managed notifier helper and NVIDIA CPER handler",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/497990/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2217641/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217641/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-51434-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-pci@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=JvItaTnO;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.232.135.74; helo=sto.lore.kernel.org;\n envelope-from=linux-pci+bounces-51434-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com\n header.b=\"JvItaTnO\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.200.71",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com",
            "smtp.subspace.kernel.org;\n spf=fail smtp.mailfrom=nvidia.com",
            "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nvidia.com;"
        ],
        "Received": [
            "from sto.lore.kernel.org (sto.lore.kernel.org [172.232.135.74])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fkmXM36fWz1xrn\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 30 Mar 2026 20:43:31 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id C0A0D300D4DC\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 30 Mar 2026 09:43:04 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 165683B582B;\n\tMon, 30 Mar 2026 09:42:46 +0000 (UTC)",
            "from CH5PR02CU005.outbound.protection.outlook.com\n (mail-northcentralusazon11012071.outbound.protection.outlook.com\n [40.107.200.71])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 694891C8634;\n\tMon, 30 Mar 2026 09:42:44 +0000 (UTC)",
            "from PH7PR12MB7914.namprd12.prod.outlook.com (2603:10b6:510:27d::13)\n by DS0PR12MB8246.namprd12.prod.outlook.com (2603:10b6:8:de::19) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.15; Mon, 30 Mar\n 2026 09:42:38 +0000",
            "from PH7PR12MB7914.namprd12.prod.outlook.com\n ([fe80::d390:582:5536:40ad]) by PH7PR12MB7914.namprd12.prod.outlook.com\n ([fe80::d390:582:5536:40ad%5]) with mapi id 15.20.9769.014; Mon, 30 Mar 2026\n 09:42:38 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774863766; cv=fail;\n b=HeWviAExRu1ByPqEt75jla2qKHyVPHUlKlg5iKWOGTvQlZSscOg2Hq/zFsQYPFaPF+XnE5HXb5jzcW17a3FmpI5e3J2TRIWtu639clf+geD3AEjRtA4Tg9StAvyFOEIadZu5XLWD9w5iFSUZMXkViexczLcxuXBfBnv69C0eRM8=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=HlVgq3k2QFTRwYJ5lxEumqZytirX0EvAKtoGenja50je0su95DktM3kpkaQNrRCeW8Qu+uaG248G1X53HCBtRw8JUvuL7yHDZgtA72bljzDZW+SmQW16l3jY2RJQDWRYhY/Lu86x7SOU57rDocMED2OofEkIwHTS6HvJvWVOvSnWQ0O//OnlbzE6riOvbXgtzXkx5K3dLL8VIRz7M7HHUc6nZ0xeb7WI0TewRAwRZ/IWF0Vfar2dM183OLyfuSz0mK/DiWG7G2Ob/heVF8Av1rI4Mqg0vQ+RQ9+Etbl21YKftqgyw/pExK4EgLfLx7Eyd0Wy79at/PKjnREdSE/xVA=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774863766; c=relaxed/simple;\n\tbh=EyvVatIVXyXeSNCM6/prcte6RRawCAJS/aS2n47enuE=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=Lm8e1xG3zbaNj3MlWv16/2zDOWu0r+VUJK/byfweXr0IJaeHp9/srbnCQKozMs5AGmZJ4loNYO69x8K3HKNtE+dUySk+Mp/ZjYG3l9bPFe8Y+8MDQ+HiitdWN4Qe/NGsM5FWN/rOpZ0yTsW7UcbWXy1Nwj1La0WD5XC4oOHFB3U=",
            "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=05puQeVSG8BXZrIx5PxIEjjWtrnc9cX6CzV/3nzePCs=;\n b=NwpLc+a6ZEMwhZRd5txT64h9GXD8Q4bkT63jV72K/1S0pW5ZXJrBU7a4+e6SqQ7kY9+0nahCYdwgh/8tro3P2MUz6zn5c9CLxYyYhGGuwriXtejqdEKglIOYygjArRyF/nPZND+1g0EnpcMjqNS42Y0Ar5oUE9oqEDzIZyPkW8LebJldNVn1Ozj4ri8HevdD3DnZgF+GLg5Qt7aVyGJQ/KAYwuqiLr58Rux2ZQ2UUdHLEOAsiI7KIRrDX5D74PlAItW4SDG3ckMxaMtV6UcAgywQieyQFHXHRsRysAvse7lZAK2kVMPX0CnBzhMaNyKIpQGT61ojT6nVgFxRRlftUg=="
        ],
        "ARC-Authentication-Results": [
            "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com;\n spf=fail smtp.mailfrom=nvidia.com;\n dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com\n header.b=JvItaTnO; arc=fail smtp.client-ip=40.107.200.71",
            "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com;\n dkim=pass header.d=nvidia.com; arc=none"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=05puQeVSG8BXZrIx5PxIEjjWtrnc9cX6CzV/3nzePCs=;\n b=JvItaTnOuR/tTnyO77z0+AZbmiUzR/tb2tgifKcTftDmrPGNffDQXaqMZBRBMpfGFmSaillWXnC5aenZk71wQEsmwj59Kn8mXy8YGn7Ir6ra+xJEJcCkgtkZIktLMx+cE8oPzi0cjG7w0T9X2utjDm4M2SGt8qYvLH1EF2keor1w398UFy0qub4Xtk1ri0bH+D2XY9x6l6STdV5G8a9q82XyShoIWCyJ7NXCFpsXpx4IFD0GbzONRDIQIJJP8GumbFMe8Kl78hT+47JqXI90GktO5m3unyHMLgEYe0PU0zZjoOe9qxrK3RtczxTlT3mk6Ry1j3bIp5GMNJ01/cmqew==",
        "From": "Kai-Heng Feng <kaihengf@nvidia.com>",
        "To": "rafael@kernel.org",
        "Cc": "jonathan.cameron@huawei.com,\n\thelgaas@kernel.org,\n\tguohanjun@huawei.com,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-acpi@vger.kernel.org,\n\tlinux-pci@vger.kernel.org,\n\tacpica-devel@lists.linux.dev,\n\tlinux-hardening@vger.kernel.org,\n\tKai-Heng Feng <kaihengf@nvidia.com>,\n\tShiju Jose <shiju.jose@huawei.com>,\n\tTony Luck <tony.luck@intel.com>,\n\tBorislav Petkov <bp@alien8.de>,\n\tMauro Carvalho Chehab <mchehab@kernel.org>,\n\tShuai Xue <xueshuai@linux.alibaba.com>,\n\tLen Brown <lenb@kernel.org>,\n\tKees Cook <kees@kernel.org>,\n\t\"Gustavo A. R. Silva\" <gustavoars@kernel.org>,\n\tGavin Shan <gshan@redhat.com>,\n\tHuang Yiwei <quic_hyiwei@quicinc.com>,\n\tNathan Chancellor <nathan@kernel.org>,\n\tDave Jiang <dave.jiang@intel.com>,\n\t\"Fabio M. De Francesco\" <fabio.m.de.francesco@linux.intel.com>",
        "Subject": "[PATCH v3 3/3] ACPI: APEI: GHES: Add NVIDIA vendor CPER record\n handler",
        "Date": "Mon, 30 Mar 2026 17:41:57 +0800",
        "Message-ID": "<20260330094203.38022-4-kaihengf@nvidia.com>",
        "X-Mailer": "git-send-email 2.50.1",
        "In-Reply-To": "<20260330094203.38022-1-kaihengf@nvidia.com>",
        "References": "<20260330094203.38022-1-kaihengf@nvidia.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "TPYP295CA0006.TWNP295.PROD.OUTLOOK.COM\n (2603:1096:7d0:9::16) To PH7PR12MB7914.namprd12.prod.outlook.com\n (2603:10b6:510:27d::13)",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-pci@vger.kernel.org",
        "List-Id": "<linux-pci.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "PH7PR12MB7914:EE_|DS0PR12MB8246:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "64da0bea-24a7-481c-71b8-08de8e40ade2",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|366016|1800799024|7416014|376014|56012099003|18002099003|22082099003;",
        "X-Microsoft-Antispam-Message-Info": "\n\tue/Zpe2fRPFbNq700TCIVuM5fIJcHOqlVSOy76sHMCBdSl5D9VUUfSgmH2Y1SRoEPwcAQ8tOtDhFkYkLIuG7q00jG6UbRUYd4FqbUtqAYnUDrQt8jwmjPWfbxxrk48PomoBTcInJYtLcMLcwAaszf8mTsEUAyDewnDOt8Aj78EqYmdFG7vNA4YJ+8oOuy3DQVY0rCLDSGufK+ed6iT2f1RMPpq15RplV7vVY6QWpiXLvIZ5XzAlnfaSJTog4V/7GAMujsZMXBcUDe72y7nlC3NO1Ko9tGal4j8XPAjwRgNso4ZOfSViOVxATL7sDTpuvtxwR/8NRkNyhLwMYFSlvwR7oBuqsX6ZENxbUj8QbEpR8YkGRKyrANgsMVjmLEBnL9x15OjS9EhnP/TMCmCf1o6D65CV5E9xto/roUsDEn3H2eoFBcmM5uJK6gNZFKF/pZSJ6rFrR8pnzy/S+rZ11WsTGIBGKW1PVwRjBk3KhoB8pgGTwXfUmzYlBKKfnJcivskFztGMKWhsJUXUaYTeLTVtxruAlj/UgD8l00nzm/6iezZS7Qdq5dh3LzyCEEvwNtfr7Q9S/umfSzDBOWTzflRJum2QENxaVGhOU4A3TTGo06nB/2D0xDlE0hA8J6rn+rS02acPypB5P9O441BDgrkkf5+AnCluUy16j4Cx706v7U9CsGuad27fFgBfrkRyyt8fSP64TujJqybDWFDNs88C+qlAk5tTIJGgBWcOolat075MOlQspk96rWCI0BHb7",
        "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB7914.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n 3bVwh53oCCBdEP797WYrzrtoFWpbAo+H0fOq9oJUqPWm3TK8cxpg7bGC5/pTgBRU0qATarZQBMVjuwzSMwS5khbfakqBm/FzLqXWmji0hqZ9lJzAtki4OiBI0zuJrpvtgDXvefz9MCdq97Ad1eTrxd6A2pOejDCTnrcJN2hTZC9HGJzUHH8PnmDdOeDfQXcftgZ2migibgskOtUkiMEPQ111KeC6BZ3ES4Q37awYQTo/R/IYqWTmUamFB8Vd0kLwUV93vh5ZlEdZblPGIEgLSqL3yEh2mRQKxdzlv2K7QgmvRilWyOJMUe7syBviLIjFZJcXeOq/C1CT4J0BaMNEo07xTeGSLcR1C2rsJ+FGZ7w1SCmDCktSelql6tZWhviUuaNrs7JBHuooIwdUWHWT2OFl+1Ps3g1Aqnq+Tgzzfm2s2ipm09eNdnR0Nw9OBOQZWb9BqbE0hz8ntChpLuNiQJA7NFPLaWccnEQ2w4P+iSrtKTuxqmpWDXa4B11GKZvHaz/0YPT9z0IkfalatImgtO70+EODwLHv/tYDW/0eYaoJ7d+0vBv+L1RUpfBQBSf7sMOvUh3mkQqH695RLVLlYm58F+DwWyYxuXWdjDmfa/Ucipp4PfeK9avM8KWSybAxx7G+Uiz+7kVNJo7Kkfm3KDfP413L9GiaEbgiPPUGnRDlqkdFXtDFOzJ3eCdyDzJ2G6qm5rVDQuQu9uuXG+/aDRRnkBhyksDclWrG35VEg15XFVsBOfFTsvFwrIIKZDQLkRmcETnS5CKFwL+IEcQVSRnYjRBB4LfFof+Q/xTbCUozI1UJyGGFlks3WfRyN++55GW4af9HKHcTgq1SvSkFdpGmboZPzUidWa6vYOSKReLbBLCEPa+Tvgsa1DZctdZXwQraodt+ROSf1ZfPtbwOtOu06HkFxwW/cd5xKtrLLps0G1ASVozQqMIqlYgio9yTcFgVzCx+TwGxMSF4jhJJG8Y6W8V3Jw9YPyJUjzwg6BQfH8cC488PTR6hVGRNFJEkIshf595p4nvoLgojYBU7E+2dXt9kvtxi+IrV0MBd3AyAR31OAZRwea8dvKSLEoBVTB6gPV81uOxGZDfkpTVQ15s25UTHrZoMoKz+Xfe0HmFEPf3C/MqKP7EaETqLZ0Bf2ffv8quDEpzhsF4wiH5tWQV5uJSzf3XxIG2V/tUe7LDqylblprHvSFeBHDB7uUdpDEmZUxFzX/+qP4Usr9iX0j0nVijQQ6RuCXyLHzzoppLJSp9hHGGKlUvTNe2lJaHvjkzFP6sY5RF9SPt4ShmWixAKvCdWB72SmuWMKLCl4dYpJ55ejS24ZV6EvxK1HbqyUewSrHIq1C67JVS/CtEzwG7pdodsiQlDNm329yrRyEogJdBAC/UZcHjT/gsZLc9Cr3jCcZgD4Du3emDomvB5E0I7nc3UO1/0JD+wzZTVq5aHMsY4hDBNLXmdS/h+Oxe2DvzI8oDIvghzwCwMD82+mVqs7Ak7Y3iFwTC2XueowkTyaeMNbZuJfjy0mycxft0czqfMmDZve55PtFsO2M+iEkpH1T2jGSWNhggriiiJbq3NB+vHxsF0H0Ey/VPNWZ8UlsEMTBO+0cLUyY5/3iQHqxcIcWjN44KlQNhlGd360XrDnhYQbolC06/UM0oIg6B6X/0h+FG5miX6TZH+ltEXjQS2jklh65Kuo9x4a5xsUFTBFtFqeSQ8xIgiIBtyXOjfscs/20/KsUQ91EYAv6IkWg==",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 64da0bea-24a7-481c-71b8-08de8e40ade2",
        "X-MS-Exchange-CrossTenant-AuthSource": "PH7PR12MB7914.namprd12.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Mar 2026 09:42:38.1835\n (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n jv6LdTnYO3mxet3FMMBGcbBUy+EXPJAFT5mQtVtQr0CXfw7XhKq4O41lqs53AkK4Ke/FIa2gbLTMexuAn50Ncg==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DS0PR12MB8246"
    },
    "content": "Add support for decoding NVIDIA-specific CPER sections delivered via\nthe APEI GHES vendor record notifier chain. NVIDIA hardware generates\nvendor-specific CPER sections containing error signatures and diagnostic\nregister dumps. This implementation registers a notifier_block with the\nGHES vendor record notifier and decodes these sections, printing error\ndetails via dev_info().\n\nThe driver binds to ACPI device NVDA2012, present on NVIDIA server\nplatforms. The NVIDIA CPER section contains a fixed header with error\nmetadata (signature, error type, severity, socket) followed by\nvariable-length register address-value pairs for hardware diagnostics.\n\nThis work is based on libcper [0].\n\nExample output:\nnvidia-ghes NVDA2012:00: NVIDIA CPER section, error_data_length: 544\nnvidia-ghes NVDA2012:00: signature: CMET-INFO\nnvidia-ghes NVDA2012:00: error_type: 0\nnvidia-ghes NVDA2012:00: error_instance: 0\nnvidia-ghes NVDA2012:00: severity: 3\nnvidia-ghes NVDA2012:00: socket: 0\nnvidia-ghes NVDA2012:00: number_regs: 32\nnvidia-ghes NVDA2012:00: instance_base: 0x0000000000000000\nnvidia-ghes NVDA2012:00: register[0]: address=0x8000000100000000 value=0x0000000100000000\n\n[0] https://github.com/openbmc/libcper/commit/683e055061ce\nCc: Shiju Jose <shiju.jose@huawei.com>\nReviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>\nSigned-off-by: Kai-Heng Feng <kaihengf@nvidia.com>\n---\nv3:\n  - NVIDIA_GHES to GHES_NVIDIA.\n  - Better error handling in probe()\n  - \"int i\" in for loop.\nv2:\n  - Use right headers.\n  - Use embedded struct and __counted_by.\n  - Drop __packed.\n  - Remove unecessary casts. \n  - Use * in sizeof().\n  - Use devm_kmalloc() and struct assignment.\n  - Use dev_err_probe and new devm helper.\n\n MAINTAINERS                     |   6 ++\n drivers/acpi/apei/Kconfig       |  14 +++\n drivers/acpi/apei/Makefile      |   1 +\n drivers/acpi/apei/ghes-nvidia.c | 149 ++++++++++++++++++++++++++++++++\n 4 files changed, 170 insertions(+)\n create mode 100644 drivers/acpi/apei/ghes-nvidia.c",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex c3fe46d7c4bc..94608f8e247e 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -18919,6 +18919,12 @@ S:\tMaintained\n F:\tdrivers/video/fbdev/nvidia/\n F:\tdrivers/video/fbdev/riva/\n \n+NVIDIA GHES VENDOR CPER RECORD HANDLER\n+M:\tKai-Heng Feng <kaihengf@nvidia.com>\n+L:\tlinux-acpi@vger.kernel.org\n+S:\tMaintained\n+F:\tdrivers/acpi/apei/nvidia-ghes.c\n+\n NVIDIA VRS RTC DRIVER\n M:\tShubhi Garg <shgarg@nvidia.com>\n L:\tlinux-tegra@vger.kernel.org\ndiff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig\nindex 070c07d68dfb..428458c623f0 100644\n--- a/drivers/acpi/apei/Kconfig\n+++ b/drivers/acpi/apei/Kconfig\n@@ -74,6 +74,20 @@ config ACPI_APEI_EINJ_CXL\n \n \t  If unsure say 'n'\n \n+config ACPI_APEI_GHES_NVIDIA\n+\ttristate \"NVIDIA GHES vendor record handler\"\n+\tdepends on ACPI_APEI_GHES\n+\thelp\n+\t  Support for decoding NVIDIA-specific CPER sections delivered via\n+\t  the APEI GHES vendor record notifier chain. Registers a handler\n+\t  for the NVIDIA section GUID and logs error signatures, severity,\n+\t  socket, and diagnostic register address-value pairs.\n+\n+\t  Enable on NVIDIA server platforms (e.g. DGX, HGX) that expose\n+\t  ACPI device NVDA2012 in their firmware tables.\n+\n+\t  If unsure, say N.\n+\n config ACPI_APEI_ERST_DEBUG\n \ttristate \"APEI Error Record Serialization Table (ERST) Debug Support\"\n \tdepends on ACPI_APEI\ndiff --git a/drivers/acpi/apei/Makefile b/drivers/acpi/apei/Makefile\nindex 1a0b85923cd4..66588d6be56f 100644\n--- a/drivers/acpi/apei/Makefile\n+++ b/drivers/acpi/apei/Makefile\n@@ -10,5 +10,6 @@ obj-$(CONFIG_ACPI_APEI_EINJ)\t+= einj.o\n einj-y\t\t\t\t:= einj-core.o\n einj-$(CONFIG_ACPI_APEI_EINJ_CXL) += einj-cxl.o\n obj-$(CONFIG_ACPI_APEI_ERST_DEBUG) += erst-dbg.o\n+obj-$(CONFIG_ACPI_APEI_GHES_NVIDIA) += ghes-nvidia.o\n \n apei-y := apei-base.o hest.o erst.o bert.o\ndiff --git a/drivers/acpi/apei/ghes-nvidia.c b/drivers/acpi/apei/ghes-nvidia.c\nnew file mode 100644\nindex 000000000000..597275d81de8\n--- /dev/null\n+++ b/drivers/acpi/apei/ghes-nvidia.c\n@@ -0,0 +1,149 @@\n+// SPDX-License-Identifier: GPL-2.0-only\n+/*\n+ * NVIDIA GHES vendor record handler\n+ *\n+ * Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n+ */\n+\n+#include <linux/acpi.h>\n+#include <linux/module.h>\n+#include <linux/platform_device.h>\n+#include <linux/types.h>\n+#include <linux/uuid.h>\n+#include <acpi/ghes.h>\n+\n+static const guid_t nvidia_sec_guid =\n+\tGUID_INIT(0x6d5244f2, 0x2712, 0x11ec,\n+\t\t  0xbe, 0xa7, 0xcb, 0x3f, 0xdb, 0x95, 0xc7, 0x86);\n+\n+struct cper_sec_nvidia {\n+\tchar\tsignature[16];\n+\t__le16\terror_type;\n+\t__le16\terror_instance;\n+\tu8\tseverity;\n+\tu8\tsocket;\n+\tu8\tnumber_regs;\n+\tu8\treserved;\n+\t__le64\tinstance_base;\n+\tstruct {\n+\t\t__le64\taddr;\n+\t\t__le64\tval;\n+\t} regs[] __counted_by(number_regs);\n+};\n+\n+struct nvidia_ghes_private {\n+\tstruct notifier_block\tnb;\n+\tstruct device\t\t*dev;\n+};\n+\n+static void nvidia_ghes_print_error(struct device *dev,\n+\t\t\t\t    const struct cper_sec_nvidia *nvidia_err,\n+\t\t\t\t    size_t error_data_length, bool fatal)\n+{\n+\tconst char *level = fatal ? KERN_ERR : KERN_INFO;\n+\tsize_t min_size;\n+\n+\tdev_printk(level, dev, \"signature: %.16s\\n\", nvidia_err->signature);\n+\tdev_printk(level, dev, \"error_type: %u\\n\", le16_to_cpu(nvidia_err->error_type));\n+\tdev_printk(level, dev, \"error_instance: %u\\n\", le16_to_cpu(nvidia_err->error_instance));\n+\tdev_printk(level, dev, \"severity: %u\\n\", nvidia_err->severity);\n+\tdev_printk(level, dev, \"socket: %u\\n\", nvidia_err->socket);\n+\tdev_printk(level, dev, \"number_regs: %u\\n\", nvidia_err->number_regs);\n+\tdev_printk(level, dev, \"instance_base: 0x%016llx\\n\",\n+\t\t   le64_to_cpu(nvidia_err->instance_base));\n+\n+\tif (nvidia_err->number_regs == 0)\n+\t\treturn;\n+\n+\t/*\n+\t * Validate that all registers fit within error_data_length.\n+\t * Each register pair is two little-endian u64s.\n+\t */\n+\tmin_size = struct_size(nvidia_err, regs, nvidia_err->number_regs);\n+\tif (error_data_length < min_size) {\n+\t\tdev_err(dev, \"Invalid number_regs %u (section size %zu, need %zu)\\n\",\n+\t\t\tnvidia_err->number_regs, error_data_length, min_size);\n+\t\treturn;\n+\t}\n+\n+\tfor (int i = 0; i < nvidia_err->number_regs; i++)\n+\t\tdev_printk(level, dev, \"register[%d]: address=0x%016llx value=0x%016llx\\n\",\n+\t\t\t   i, le64_to_cpu(nvidia_err->regs[i].addr),\n+\t\t\t   le64_to_cpu(nvidia_err->regs[i].val));\n+}\n+\n+static int nvidia_ghes_notify(struct notifier_block *nb,\n+\t\t\t      unsigned long event, void *data)\n+{\n+\tstruct acpi_hest_generic_data *gdata = data;\n+\tstruct nvidia_ghes_private *priv;\n+\tconst struct cper_sec_nvidia *nvidia_err;\n+\tguid_t sec_guid;\n+\n+\timport_guid(&sec_guid, gdata->section_type);\n+\tif (!guid_equal(&sec_guid, &nvidia_sec_guid))\n+\t\treturn NOTIFY_DONE;\n+\n+\tpriv = container_of(nb, struct nvidia_ghes_private, nb);\n+\n+\tif (acpi_hest_get_error_length(gdata) < sizeof(*nvidia_err)) {\n+\t\tdev_err(priv->dev, \"Section too small (%d < %zu)\\n\",\n+\t\t\tacpi_hest_get_error_length(gdata), sizeof(*nvidia_err));\n+\t\treturn NOTIFY_OK;\n+\t}\n+\n+\tnvidia_err = acpi_hest_get_payload(gdata);\n+\n+\tif (event >= GHES_SEV_RECOVERABLE)\n+\t\tdev_err(priv->dev, \"NVIDIA CPER section, error_data_length: %u\\n\",\n+\t\t\tacpi_hest_get_error_length(gdata));\n+\telse\n+\t\tdev_info(priv->dev, \"NVIDIA CPER section, error_data_length: %u\\n\",\n+\t\t\t acpi_hest_get_error_length(gdata));\n+\n+\tnvidia_ghes_print_error(priv->dev, nvidia_err, acpi_hest_get_error_length(gdata),\n+\t\t\t\tevent >= GHES_SEV_RECOVERABLE);\n+\n+\treturn NOTIFY_OK;\n+}\n+\n+static int nvidia_ghes_probe(struct platform_device *pdev)\n+{\n+\tstruct nvidia_ghes_private *priv;\n+\tint ret;\n+\n+\tpriv = devm_kmalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);\n+\tif (!priv)\n+\t\treturn -ENOMEM;\n+\n+\t*priv = (struct nvidia_ghes_private) {\n+\t\t.nb.notifier_call = nvidia_ghes_notify,\n+\t\t.dev = &pdev->dev,\n+\t};\n+\n+\tret = devm_ghes_register_vendor_record_notifier(&pdev->dev, &priv->nb);\n+\tif (ret)\n+\t\treturn dev_err_probe(&pdev->dev, ret,\n+\t\t\t\t     \"Failed to register NVIDIA GHES vendor record notifier\\n\");\n+\n+\treturn 0;\n+}\n+\n+static const struct acpi_device_id nvidia_ghes_acpi_match[] = {\n+\t{ \"NVDA2012\" },\n+\t{ }\n+};\n+MODULE_DEVICE_TABLE(acpi, nvidia_ghes_acpi_match);\n+\n+static struct platform_driver nvidia_ghes_driver = {\n+\t.driver = {\n+\t\t.name = \"nvidia-ghes\",\n+\t\t.acpi_match_table = nvidia_ghes_acpi_match,\n+\t},\n+\t.probe = nvidia_ghes_probe,\n+};\n+module_platform_driver(nvidia_ghes_driver);\n+\n+MODULE_AUTHOR(\"Kai-Heng Feng <kaihengf@nvidia.com>\");\n+MODULE_DESCRIPTION(\"NVIDIA GHES vendor CPER record handler\");\n+MODULE_LICENSE(\"GPL\");\n",
    "prefixes": [
        "v3",
        "3/3"
    ]
}