From nobody Thu Dec  9 01:37:08 2021
X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
	by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 15B5018D255B;
	Thu,  9 Dec 2021 01:37:09 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256
	 client-signature RSA-PSS (4096 bits) client-digest SHA256)
	(Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK))
	by mx1.freebsd.org (Postfix) with ESMTPS id 4J8c8h5pHYz3L1k;
	Thu,  9 Dec 2021 01:37:08 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(Client did not present a certificate)
	by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A681E1DDCD;
	Thu,  9 Dec 2021 01:37:08 +0000 (UTC)
	(envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
	by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1B91b8M4059207;
	Thu, 9 Dec 2021 01:37:08 GMT
	(envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
	by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1B91b8JP059206;
	Thu, 9 Dec 2021 01:37:08 GMT
	(envelope-from git)
Date: Thu, 9 Dec 2021 01:37:08 GMT
Message-Id: <202112090137.1B91b8JP059206@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
        dev-commits-src-branches@FreeBSD.org
From: Alexander Motin <mav@FreeBSD.org>
Subject: git: f48bf8140148 - stable/12 - APEI: Fix Generic Error Data Entry revision 3.0 handling.
List-Id: Commits to the stable branches of the FreeBSD src repository <dev-commits-src-branches.freebsd.org>
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches
List-Help: <mailto:dev-commits-src-branches+help@freebsd.org>
List-Post: <mailto:dev-commits-src-branches@freebsd.org>
List-Subscribe: <mailto:dev-commits-src-branches+subscribe@freebsd.org>
List-Unsubscribe: <mailto:dev-commits-src-branches+unsubscribe@freebsd.org>
Sender: owner-dev-commits-src-branches@freebsd.org
X-BeenThere: dev-commits-src-branches@freebsd.org
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: mav
X-Git-Repository: src
X-Git-Refname: refs/heads/stable/12
X-Git-Reftype: branch
X-Git-Commit: f48bf8140148d13d6af308f55a0acf5c75beafca
Auto-Submitted: auto-generated
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
	s=dkim; t=1639013828;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=wj7RKsG6N5w4kc/CE15ct1NijX0+R+2BwkWWdGh98NA=;
	b=FS7IBZNQLqqfRfGcK4cYEK5W5Z/5xbQAqvoiglV1+yepz/Y9bOIi3U+kjn2BKU1EKfgnGm
	os6sKDhnHmAdVuhH33fhdmZCR9OxnjPoi8qgtS7mKYku8FaB+v3z8AmiZRLLAb81PMqi5Q
	E4R0seGp14sNlklyI0PpoV3X1AKFBZ0EWD7EO3uxcfTF4q5zQ48zwWRbcEqQ+BkOHOgniC
	H86hn8P7OLA03V+WySKRlpcXIcJ3LlTp2QUdjcXymbTQ+1woub4GtK7c9I+mjlr0JPlb2F
	otXG61EhzSKvntLVwSXzLveuz+GCWFCUnBt4AW8YPNeBlvzxyKRS962EfWElaQ==
ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1639013828; a=rsa-sha256; cv=none;
	b=L9WXmwdRp29+VqdOxcQvF6YGaHfqElbp+HIQuW/RQ18y1RhjJstOOkM2lg3hWEasN+a7Oi
	jq46tIYPc7UYiXg4BgAun+c17NvlweR8/80OyDHlRVg8Fna4rBKdoNL7KoMs2SDIYQQ8i/
	7fmxc5JVGSCU9eY22ToNgCrcDJg4UqsTFn44sYRF8dY2VaQZwoKAAUSkfmb016UgG6OeTQ
	lNzNacWeHsIdFbQRTMDpqeZwwq21sC/mbHQj9G7R6r9FVAi8pHu1NcmapQu2I4gAPj1zAW
	xF3o5ZRBB2+huD7MimJwKkkHENPNPDDB3mzesj7blwlpQ1MGmyUFH4789+UxPA==
ARC-Authentication-Results: i=1;
	mx1.freebsd.org;
	none
X-ThisMailContainsUnwantedMimeParts: N

The branch stable/12 has been updated by mav:

URL: https://cgit.FreeBSD.org/src/commit/?id=f48bf8140148d13d6af308f55a0acf5c75beafca

commit f48bf8140148d13d6af308f55a0acf5c75beafca
Author:     Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-11-25 04:03:20 +0000
Commit:     Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-12-09 01:36:58 +0000

    APEI: Fix Generic Error Data Entry revision 3.0 handling.
    
    Since revision 3.0 this structure grown another field, breaking access
    to the following data structures.  This change fixes the PCIe errors
    decoding on newer systems.
    
    MFC after:      2 weeks
    
    (cherry picked from commit ba83762a623033576bab5942312365d2d738f437)
---
 sys/dev/acpica/acpi_apei.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sys/dev/acpica/acpi_apei.c b/sys/dev/acpica/acpi_apei.c
index 0e3d5f6ae3da..417f55fa3df8 100644
--- a/sys/dev/acpica/acpi_apei.c
+++ b/sys/dev/acpica/acpi_apei.c
@@ -131,6 +131,10 @@ apei_bus_write_8(struct resource *res, bus_size_t offset, uint64_t val)
 #define	WRITE8(r, o, v)	bus_write_8((r), (o), (v))
 #endif
 
+#define GED_SIZE(ged)	((ged)->Revision >= 0x300 ? \
+    sizeof(ACPI_HEST_GENERIC_DATA_V300) : sizeof(ACPI_HEST_GENERIC_DATA))
+#define GED_DATA(ged)	((uint8_t *)(ged) + GED_SIZE(ged))
+
 int apei_nmi_handler(void);
 
 static const char *
@@ -152,7 +156,7 @@ apei_severity(uint32_t s)
 static int
 apei_mem_handler(ACPI_HEST_GENERIC_DATA *ged)
 {
-	struct apei_mem_error *p = (struct apei_mem_error *)(ged + 1);
+	struct apei_mem_error *p = (struct apei_mem_error *)GED_DATA(ged);
 
 	printf("APEI %s Memory Error:\n", apei_severity(ged->ErrorSeverity));
 	if (p->ValidationBits & 0x01)
@@ -207,7 +211,7 @@ apei_mem_handler(ACPI_HEST_GENERIC_DATA *ged)
 static int
 apei_pcie_handler(ACPI_HEST_GENERIC_DATA *ged)
 {
-	struct apei_pcie_error *p = (struct apei_pcie_error *)(ged + 1);
+	struct apei_pcie_error *p = (struct apei_pcie_error *)GED_DATA(ged);
 	int h = 0, off;
 #ifdef DEV_PCI
 	device_t dev;
@@ -314,7 +318,7 @@ apei_ged_handler(ACPI_HEST_GENERIC_DATA *ged)
 		    t[3], t[2], t[1], t[0], t[5], t[4], t[7], t[6],
 		    t[8], t[9], t[10], t[11], t[12], t[13], t[14], t[15]);
 		printf(" Error Data:\n");
-		t = (uint8_t *)(ged + 1);
+		t = (uint8_t *)GED_DATA(ged);
 		for (off = 0; off < ged->ErrorDataLength; off++) {
 			printf(" %02x", t[off]);
 			if ((off % 16) == 15 || off + 1 == ged->ErrorDataLength)
@@ -334,7 +338,7 @@ apei_ged_handler(ACPI_HEST_GENERIC_DATA *ged)
 	}
 	if (ged->ValidationBits & ACPI_HEST_GEN_VALID_FRU_STRING)
 		printf(" FRU Text: %.20s\n", ged->FruText);
-	if (ged->Revision == 0x300 &&
+	if (ged->Revision >= 0x300 &&
 	    ged->ValidationBits & ACPI_HEST_GEN_VALID_TIMESTAMP)
 		printf(" Timestamp: %016jx\n", ged3->TimeStamp);
 }
@@ -358,7 +362,7 @@ apei_ge_handler(struct apei_ge *ge, bool copy)
 	for (off = i = 0; i < c && off + sizeof(*ged) <= ges->DataLength; i++) {
 		ged = (ACPI_HEST_GENERIC_DATA *)&buf[sizeof(*ges) + off];
 		apei_ged_handler(ged);
-		off += sizeof(*ged) + ged->ErrorDataLength;
+		off += GED_SIZE(ged) + ged->ErrorDataLength;
 	}
 
 	/* Acknowledge the error has been processed. */