From nobody Thu Dec 09 01:37:08 2021 X-Original-To: dev-commits-src-all@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 Subject: git: f48bf8140148 - stable/12 - APEI: Fix Generic Error Data Entry revision 3.0 handling. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@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 AuthorDate: 2021-11-25 04:03:20 +0000 Commit: Alexander Motin 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. */