From owner-freebsd-i386@FreeBSD.ORG Wed Mar 1 01:20:05 2006 Return-Path: X-Original-To: freebsd-i386@hub.freebsd.org Delivered-To: freebsd-i386@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7A75616A420 for ; Wed, 1 Mar 2006 01:20:05 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id F3BBD43D53 for ; Wed, 1 Mar 2006 01:20:04 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k211K4hp008978 for ; Wed, 1 Mar 2006 01:20:04 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k211K4YQ008977; Wed, 1 Mar 2006 01:20:04 GMT (envelope-from gnats) Resent-Date: Wed, 1 Mar 2006 01:20:04 GMT Resent-Message-Id: <200603010120.k211K4YQ008977@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-i386@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Masayuki FUKUI Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A2A5C16A420 for ; Wed, 1 Mar 2006 01:13:01 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 68B9143D45 for ; Wed, 1 Mar 2006 01:13:01 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id k211D0Qn024393 for ; Wed, 1 Mar 2006 01:13:01 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id k211D0bL024392; Wed, 1 Mar 2006 01:13:00 GMT (envelope-from nobody) Message-Id: <200603010113.k211D0bL024392@www.freebsd.org> Date: Wed, 1 Mar 2006 01:13:00 GMT From: Masayuki FUKUI To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Cc: Subject: i386/93963: [panic] [patch] ACPI Panic with some ACPI 2.0 PC & cannot boot X-BeenThere: freebsd-i386@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: I386-specific issues for FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Mar 2006 01:20:05 -0000 >Number: 93963 >Category: i386 >Synopsis: [panic] [patch] ACPI Panic with some ACPI 2.0 PC & cannot boot >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-i386 >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Mar 01 01:20:04 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Masayuki FUKUI >Release: FreeBSD 5.4-RELEASE-p10 >Organization: >Environment: PC: Fujitsu-Siemens Celsius N440 [Pentium4 670 (3.8GHz) / 3GB Memory] OS: FreeBSD 6.1-BETA1 / FreeBSD 5.5-BETA1 / FreeBSD 5.4-RELEASE-p10 >Description: FreeBSD cannot be booted with some ACPI 2.0 PC. The kernel panic occurs with the initialization of ACPI. Cause: In some ACPI 2.0 PC, XSDT is NULL. (RSDT is available.) Therefore, FreeBSD traces XSDT (is NULL) and falls into the panic. >How-To-Repeat: Trt to boot FreeBSD 6.1-BETA1 (ACPI enable) on Fujitsu-Siemens Celsius N440. >Fix: I don't know how to fix rightly. But I rebuild 5.4-RELEASE-p10 kernel with following patch, and it works fine. I hope for fixing the probrem as soon as possible. --- sys/contrib/dev/acpica/tbconvrt.c.orig Sun Dec 19 13:06:14 2004 +++ sys/contrib/dev/acpica/tbconvrt.c Wed Feb 8 22:48:21 2006 @@ -149,7 +149,7 @@ ACPI_FUNCTION_ENTRY (); - if (RSDP->Revision < 2) + if (RSDP->Revision < 2 || !RSDP->XsdtPhysicalAddress) { PointerSize = sizeof (UINT32); } @@ -214,7 +214,7 @@ for (i = 0; i < AcpiGbl_RsdtTableCount; i++) { - if (AcpiGbl_RSDP->Revision < 2) + if (AcpiGbl_RSDP->Revision < 2 || !AcpiGbl_RSDP->XsdtPhysicalAddress) { ACPI_STORE_ADDRESS (NewTable->TableOffsetEntry[i], (ACPI_CAST_PTR (RSDT_DESCRIPTOR_REV1, TableInfo->Pointer))->TableOffsetEntry[i]); @@ -637,7 +637,7 @@ AcpiGbl_CommonFACS.GlobalLock = &(AcpiGbl_FACS->GlobalLock); - if ((AcpiGbl_RSDP->Revision < 2) || + if ((AcpiGbl_RSDP->Revision < 2) || (!AcpiGbl_RSDP->XsdtPhysicalAddress) || (AcpiGbl_FACS->Length < 32) || (!(ACPI_GET_ADDRESS (AcpiGbl_FACS->XFirmwareWakingVector)))) { --- sys/contrib/dev/acpica/tbrsdt.c.orig Sun Dec 19 13:06:14 2004 +++ sys/contrib/dev/acpica/tbrsdt.c Wed Feb 8 23:33:27 2006 @@ -259,7 +259,7 @@ * For RSDP revision 0 or 1, we use the RSDT. * For RSDP revision 2 (and above), we use the XSDT */ - if (AcpiGbl_RSDP->Revision < 2) + if (AcpiGbl_RSDP->Revision < 2 || !AcpiGbl_RSDP->XsdtPhysicalAddress) { OutAddress->Pointer.Value = AcpiGbl_RSDP->RsdtPhysicalAddress; } @@ -296,7 +296,7 @@ * For RSDP revision 0 or 1, we use the RSDT. * For RSDP revision 2 and above, we use the XSDT */ - if (AcpiGbl_RSDP->Revision < 2) + if (AcpiGbl_RSDP->Revision < 2 || !AcpiGbl_RSDP->XsdtPhysicalAddress) { NoMatch = ACPI_STRNCMP ((char *) TablePtr, RSDT_SIG, sizeof (RSDT_SIG) -1); @@ -320,7 +320,7 @@ AcpiGbl_RSDP->RsdtPhysicalAddress, (void *) (ACPI_NATIVE_UINT) AcpiGbl_RSDP->RsdtPhysicalAddress)); - if (AcpiGbl_RSDP->Revision < 2) + if (AcpiGbl_RSDP->Revision < 2 || !AcpiGbl_RSDP->XsdtPhysicalAddress) { ACPI_REPORT_ERROR (("Looking for RSDT (RSDP->Rev < 2)\n")) } --- sys/contrib/dev/acpica/tbxfroot.c.orig Sun Dec 19 13:06:14 2004 +++ sys/contrib/dev/acpica/tbxfroot.c Wed Feb 8 22:47:32 2006 @@ -362,7 +362,7 @@ { /* Get the next table pointer, handle RSDT vs. XSDT */ - if (AcpiGbl_RSDP->Revision < 2) + if (AcpiGbl_RSDP->Revision < 2 || !AcpiGbl_RSDP->XsdtPhysicalAddress) { Address.Pointer.Value = (ACPI_CAST_PTR ( RSDT_DESCRIPTOR, RsdtInfo->Pointer))->TableOffsetEntry[i]; @@ -514,7 +514,7 @@ /* Signature matches, check the appropriate checksum */ - if (((RSDP_DESCRIPTOR *) MemRover)->Revision < 2) + if (((RSDP_DESCRIPTOR *) MemRover)->Revision < 2 || !(((RSDP_DESCRIPTOR *) MemRover)->XsdtPhysicalAddress)) { /* ACPI version 1.0 */ --- sys/i386/acpica/madt.c.orig Mon Feb 28 06:28:18 2005 +++ sys/i386/acpica/madt.c Wed Feb 8 23:30:14 2006 @@ -223,7 +223,7 @@ * We map the XSDT and RSDT at page 1 in the crashdump area. * Page 0 is used to map in the headers of candidate ACPI tables. */ - if (rsdp->Revision >= 2) { + if (rsdp->Revision >= 2 && rsdp->XsdtPhysicalAddress) { /* * AcpiOsGetRootPointer only verifies the checksum for * the version 1.0 portion of the RSDP. Version 2.0 has >Release-Note: >Audit-Trail: >Unformatted: