ACK: [PATCH] ACPICA: update to version 20140214. (LP: #1281096)

Alex Hung alex.hung at canonical.com
Tue Feb 18 07:28:53 UTC 2014


On 02/17/2014 09:13 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Update to ACPICA 20140214, see the release note
> https://lists.acpica.org/pipermail/devel/2014-February/000622.html
> for more information.
>
> Exhaustively tested against a wide collection of ACPI tables,
> with method and syntaxcheck.  Syntaxcheck now picks up more issues
> such as detecting method names that are not part of the defined
> list of accepted names that start with a prefix '_'.
>
> This release of ACPICA also clears up 7 outstanding issues found
> in Coverity Scan.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/acpica/fwts_acpica.c                           |   2 +-
>   src/acpica/source/common/adisasm.c                 | 102 +-----
>   src/acpica/source/common/dmextern.c                |  44 ++-
>   src/acpica/source/common/dmtbinfo.c                |   2 +-
>   src/acpica/source/compiler/aslcompiler.h           |   8 +-
>   src/acpica/source/compiler/aslerror.c              |  33 +-
>   src/acpica/source/compiler/aslfileio.c             | 113 ++++---
>   src/acpica/source/compiler/aslglobal.h             |   2 +-
>   src/acpica/source/compiler/aslmain.c               |  11 -
>   src/acpica/source/compiler/aslmessages.h           |   2 +-
>   src/acpica/source/compiler/aslpredef.c             |  10 +-
>   src/acpica/source/compiler/aslprepkg.c             |  24 +-
>   src/acpica/source/compiler/aslstartup.c            |   4 +-
>   src/acpica/source/compiler/asltransform.c          |   9 -
>   src/acpica/source/compiler/dtfield.c               |  34 +-
>   src/acpica/source/compiler/dttemplate.h            |   4 +-
>   src/acpica/source/compiler/prmacros.c              |  13 +-
>   src/acpica/source/components/debugger/dbdisply.c   |   4 +
>   src/acpica/source/components/dispatcher/dsinit.c   |  61 +++-
>   src/acpica/source/components/dispatcher/dsmethod.c | 139 ++++++++
>   src/acpica/source/components/dispatcher/dswload.c  |  17 +
>   src/acpica/source/components/events/evregion.c     |  12 +
>   src/acpica/source/components/executer/exdump.c     | 222 +++++++++++--
>   src/acpica/source/components/executer/exsystem.c   |  12 +-
>   src/acpica/source/components/executer/exutils.c    |  90 +----
>   src/acpica/source/components/namespace/nsinit.c    |   5 +-
>   src/acpica/source/components/namespace/nsload.c    |   4 +-
>   src/acpica/source/components/namespace/nsobject.c  |   9 +-
>   src/acpica/source/components/namespace/nsprepkg.c  |  40 +--
>   src/acpica/source/components/namespace/nsrepair.c  |  25 +-
>   src/acpica/source/components/namespace/nsrepair2.c |  38 ++-
>   src/acpica/source/components/parser/psloop.c       |   5 +
>   src/acpica/source/components/parser/psobject.c     |   7 +-
>   src/acpica/source/components/resources/rscalc.c    |   2 +-
>   src/acpica/source/components/resources/rscreate.c  |  10 +-
>   src/acpica/source/components/resources/rsdump.c    |   2 +-
>   .../source/components/resources/rsdumpinfo.c       |   2 +-
>   src/acpica/source/components/resources/rsinfo.c    |   2 +-
>   src/acpica/source/components/utilities/utdelete.c  |  16 +-
>   src/acpica/source/components/utilities/utglobal.c  |  38 +--
>   src/acpica/source/components/utilities/utosi.c     |  29 ++
>   src/acpica/source/include/acapps.h                 |  10 +-
>   src/acpica/source/include/acbuffer.h               |   5 +
>   src/acpica/source/include/acconfig.h               |   4 +
>   src/acpica/source/include/acdebug.h                |   4 +
>   src/acpica/source/include/acdisasm.h               |   4 +
>   src/acpica/source/include/acdispat.h               |  18 +-
>   src/acpica/source/include/acevents.h               |   4 +
>   src/acpica/source/include/acexcep.h                |   4 +
>   src/acpica/source/include/acglobal.h               | 364 ++++++++++-----------
>   src/acpica/source/include/achware.h                |   4 +
>   src/acpica/source/include/acinterp.h               |  16 +-
>   src/acpica/source/include/aclocal.h                |   4 +
>   src/acpica/source/include/acmacros.h               |   4 +
>   src/acpica/source/include/acnamesp.h               |   4 +
>   src/acpica/source/include/acobject.h               |   4 +-
>   src/acpica/source/include/acoutput.h               |   4 +
>   src/acpica/source/include/acparser.h               |   4 +
>   src/acpica/source/include/acpiosxf.h               |   4 +
>   src/acpica/source/include/acpixf.h                 |   8 +-
>   src/acpica/source/include/acpredef.h               |  18 +-
>   src/acpica/source/include/acresrc.h                |   4 +
>   src/acpica/source/include/acrestyp.h               |   4 +
>   src/acpica/source/include/acstruct.h               |   8 +
>   src/acpica/source/include/actables.h               |   4 +
>   src/acpica/source/include/actbl.h                  |   4 +
>   src/acpica/source/include/actbl1.h                 |   6 +-
>   src/acpica/source/include/actbl2.h                 |   6 +-
>   src/acpica/source/include/actbl3.h                 |   6 +-
>   src/acpica/source/include/actypes.h                |   4 +
>   src/acpica/source/include/acutils.h                |   5 +
>   src/acpica/source/include/amlcode.h                |   5 +
>   src/acpica/source/include/amlresrc.h               |   5 +
>   src/acpica/source/tools/acpiexec/aecommon.h        |   5 +
>   74 files changed, 1139 insertions(+), 626 deletions(-)
>
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index 06aa0b7..9d92470 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -908,7 +908,7 @@ int fwts_acpica_init(fwts_framework *fw)
>   	if (fwts_acpica_init_called)
>   		return FWTS_ERROR;
>
> -	AcpiGbl_AllMethodsSerialized =
> +	AcpiGbl_AutoSerializeMethods =
>   		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_SERIALIZED);
>   	AcpiGbl_EnableInterpreterSlack =
>   		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_SLACK);
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index 75b1f3e..12805ee 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -322,7 +322,6 @@ AdInitialize (
>    *              OutToFile           - TRUE if output should go to a file
>    *              Prefix              - Path prefix for output
>    *              OutFilename         - where the filename is returned
> - *              GetAllTables        - TRUE if all tables are desired
>    *
>    * RETURN:      Status
>    *
> @@ -335,8 +334,7 @@ AdAmlDisassemble (
>       BOOLEAN                 OutToFile,
>       char                    *Filename,
>       char                    *Prefix,
> -    char                    **OutFilename,
> -    BOOLEAN                 GetAllTables)
> +    char                    **OutFilename)
>   {
>       ACPI_STATUS             Status;
>       char                    *DisasmFilename = NULL;
> @@ -420,7 +418,7 @@ AdAmlDisassemble (
>       }
>       else
>       {
> -        Status = AdGetLocalTables (Filename, GetAllTables);
> +        Status = AdGetLocalTables ();
>           if (ACPI_FAILURE (Status))
>           {
>               AcpiOsPrintf ("Could not get ACPI tables, %s\n",
> @@ -818,8 +816,7 @@ AdDisplayTables (
>    *
>    * FUNCTION:    AdGetLocalTables
>    *
> - * PARAMETERS:  Filename            - Not used
> - *              GetAllTables        - TRUE if all tables are desired
> + * PARAMETERS:  None
>    *
>    * RETURN:      Status
>    *
> @@ -829,105 +826,36 @@ AdDisplayTables (
>
>   ACPI_STATUS
>   AdGetLocalTables (
> -    char                    *Filename,
> -    BOOLEAN                 GetAllTables)
> +    void)
>   {
>       ACPI_STATUS             Status;
>       ACPI_TABLE_HEADER       TableHeader;
>       ACPI_TABLE_HEADER       *NewTable;
> -    UINT32                  NumTables;
> -    UINT32                  PointerSize;
>       UINT32                  TableIndex;
>
>
> -    if (GetAllTables)
> -    {
> -        ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_RSDT);
> -        AcpiOsTableOverride (&TableHeader, &NewTable);
> -        if (!NewTable)
> -        {
> -            fprintf (stderr, "Could not obtain RSDT\n");
> -            return (AE_NO_ACPI_TABLES);
> -        }
> -        else
> -        {
> -            AdWriteTable (NewTable, NewTable->Length,
> -                ACPI_SIG_RSDT, NewTable->OemTableId);
> -        }
> -
> -        if (ACPI_COMPARE_NAME (NewTable->Signature, ACPI_SIG_RSDT))
> -        {
> -            PointerSize = sizeof (UINT32);
> -        }
> -        else
> -        {
> -            PointerSize = sizeof (UINT64);
> -        }
> -
> -        /*
> -         * Determine the number of tables pointed to by the RSDT/XSDT.
> -         * This is defined by the ACPI Specification to be the number of
> -         * pointers contained within the RSDT/XSDT. The size of the pointers
> -         * is architecture-dependent.
> -         */
> -        NumTables = (NewTable->Length - sizeof (ACPI_TABLE_HEADER)) / PointerSize;
> -        AcpiOsPrintf ("There are %u tables defined in the %4.4s\n\n",
> -            NumTables, NewTable->Signature);
> -
> -        /* Get the FADT */
> -
> -        ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_FADT);
> -        AcpiOsTableOverride (&TableHeader, &NewTable);
> -        if (NewTable)
> -        {
> -            AdWriteTable (NewTable, NewTable->Length,
> -                ACPI_SIG_FADT, NewTable->OemTableId);
> -        }
> -        AcpiOsPrintf ("\n");
> -
> -        /* Don't bother with FACS, it is usually all zeros */
> -    }
> -
> -    /* Always get the DSDT */
> +    /* Get the DSDT via table override */
>
>       ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_DSDT);
>       AcpiOsTableOverride (&TableHeader, &NewTable);
> -    if (NewTable)
> -    {
> -        AdWriteTable (NewTable, NewTable->Length,
> -            ACPI_SIG_DSDT, NewTable->OemTableId);
> -
> -        /* Store DSDT in the Table Manager */
> -
> -        Status = AcpiTbStoreTable (0, NewTable, NewTable->Length,
> -                    0, &TableIndex);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            fprintf (stderr, "Could not store DSDT\n");
> -            return (AE_NO_ACPI_TABLES);
> -        }
> -    }
> -    else
> +    if (!NewTable)
>       {
>           fprintf (stderr, "Could not obtain DSDT\n");
>           return (AE_NO_ACPI_TABLES);
>       }
>
> -#if 0
> -    /* TBD: Future implementation */
> +    AdWriteTable (NewTable, NewTable->Length,
> +        ACPI_SIG_DSDT, NewTable->OemTableId);
>
> -    AcpiOsPrintf ("\n");
> +    /* Store DSDT in the Table Manager */
>
> -    /* Get all SSDTs */
> -
> -    ACPI_MOVE_32_TO_32 (TableHeader.Signature, ACPI_SIG_SSDT);
> -    do
> +    Status = AcpiTbStoreTable (0, NewTable, NewTable->Length,
> +                0, &TableIndex);
> +    if (ACPI_FAILURE (Status))
>       {
> -        NewTable = NULL;
> -        Status = AcpiOsTableOverride (&TableHeader, &NewTable);
> -
> -    } while (NewTable);
> -#endif
> +        fprintf (stderr, "Could not store DSDT\n");
> +        return (AE_NO_ACPI_TABLES);
> +    }
>
>       return (AE_OK);
>   }
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 4c7e3d0..e54dee7 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -1337,10 +1337,16 @@ AcpiDmUnresolvedWarning (
>                   "     * were not specified. This resulting disassembler output file may not\n"
>                   "     * compile because the disassembler did not know how many arguments\n"
>                   "     * to assign to these methods. To specify the tables needed to resolve\n"
> -                "     * external control method references, use the one of the following\n"
> -                "     * example iASL invocations:\n"
> -                "     *     iasl -e <ssdt1.aml,ssdt2.aml...> -d <dsdt.aml>\n"
> -                "     *     iasl -e <dsdt.aml,ssdt2.aml...> -d <ssdt1.aml>\n"
> +                "     * external control method references, the -e option can be used to\n"
> +                "     * specify the filenames. Example iASL invocations:\n"
> +                "     *     iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml\n"
> +                "     *     iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml\n"
> +                "     *     iasl -e ssdt*.aml -d dsdt.aml\n"
> +                "     *\n"
> +                "     * In addition, the -fe option can be used to specify a file containing\n"
> +                "     * control method external declarations with the associated method\n"
> +                "     * argument counts. Each line of the file must be of the form:\n"
> +                "     *     External (<method pathname>, MethodObj, <argument count>)\n"
>                   "     */\n",
>                   AcpiGbl_NumExternalMethods);
>           }
> @@ -1351,10 +1357,15 @@ AcpiDmUnresolvedWarning (
>               AcpiOsPrintf ("    /*\n"
>                   "     * iASL Warning: There were %u external control methods found during\n"
>                   "     * disassembly, but only %u %s resolved (%u unresolved). Additional\n"
> -                "     * ACPI tables are required to properly disassemble the code. This\n"
> +                "     * ACPI tables may be required to properly disassemble the code. This\n"
>                   "     * resulting disassembler output file may not compile because the\n"
>                   "     * disassembler did not know how many arguments to assign to the\n"
>                   "     * unresolved methods.\n"
> +                "     *\n"
> +                "     * If necessary, the -fe option can be used to specify a file containing\n"
> +                "     * control method external declarations with the associated method\n"
> +                "     * argument counts. Each line of the file must be of the form:\n"
> +                "     *     External (<method pathname>, MethodObj, <argument count>)\n"
>                   "     */\n",
>                   AcpiGbl_NumExternalMethods, AcpiGbl_ResolvedExternalMethods,
>                   (AcpiGbl_ResolvedExternalMethods > 1 ? "were" : "was"),
> @@ -1373,10 +1384,16 @@ AcpiDmUnresolvedWarning (
>                   "were not specified. The resulting disassembler output file may not\n"
>                   "compile because the disassembler did not know how many arguments\n"
>                   "to assign to these methods. To specify the tables needed to resolve\n"
> -                "external control method references, use the one of the following\n"
> -                "example iASL invocations:\n"
> -                "    iasl -e <ssdt1.aml,ssdt2.aml...> -d <dsdt.aml>\n"
> -                "    iasl -e <dsdt.aml,ssdt2.aml...> -d <ssdt1.aml>\n",
> +                "external control method references, the -e option can be used to\n"
> +                "specify the filenames. Example iASL invocations:\n"
> +                "    iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml\n"
> +                "    iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml\n"
> +                "    iasl -e ssdt*.aml -d dsdt.aml\n"
> +                "\n"
> +                "In addition, the -fe option can be used to specify a file containing\n"
> +                "control method external declarations with the associated method\n"
> +                "argument counts. Each line of the file must be of the form:\n"
> +                "    External (<method pathname>, MethodObj, <argument count>)\n",
>                   AcpiGbl_NumExternalMethods);
>           }
>           else if (AcpiGbl_NumExternalMethods != AcpiGbl_ResolvedExternalMethods)
> @@ -1386,10 +1403,15 @@ AcpiDmUnresolvedWarning (
>               fprintf (stderr, "\n"
>                   "iASL Warning: There were %u external control methods found during\n"
>                   "disassembly, but only %u %s resolved (%u unresolved). Additional\n"
> -                "ACPI tables are required to properly disassemble the code. The\n"
> +                "ACPI tables may be required to properly disassemble the code. The\n"
>                   "resulting disassembler output file may not compile because the\n"
>                   "disassembler did not know how many arguments to assign to the\n"
> -                "unresolved methods.\n",
> +                "unresolved methods.\n"
> +                "\n"
> +                "If necessary, the -fe option can be used to specify a file containing\n"
> +                "control method external declarations with the associated method\n"
> +                "argument counts. Each line of the file must be of the form:\n"
> +                "    External (<method pathname>, MethodObj, <argument count>)\n",
>                   AcpiGbl_NumExternalMethods, AcpiGbl_ResolvedExternalMethods,
>                   (AcpiGbl_ResolvedExternalMethods > 1 ? "were" : "was"),
>                   (AcpiGbl_NumExternalMethods - AcpiGbl_ResolvedExternalMethods));
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 858c0f3..cd565a4 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -2012,7 +2012,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoSpcr[] =
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoSpmi[] =
>   {
>       {ACPI_DMT_UINT8,    ACPI_SPMI_OFFSET (InterfaceType),           "Interface Type", 0},
> -    {ACPI_DMT_UINT8,    ACPI_SPMI_OFFSET (Reserved),                "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_SPMI_OFFSET (Reserved),                "Reserved", DT_NON_ZERO}, /* Value must be 1 */
>       {ACPI_DMT_UINT16,   ACPI_SPMI_OFFSET (SpecRevision),            "IPMI Spec Version", 0},
>       {ACPI_DMT_UINT8,    ACPI_SPMI_OFFSET (InterruptType),           "Interrupt Type", 0},
>       {ACPI_DMT_UINT8,    ACPI_SPMI_OFFSET (GpeNumber),               "GPE Number", 0},
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 7960ef0..49dc7fb 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -352,6 +352,10 @@ ApCheckRegMethod (
>    * aslerror - error handling/reporting
>    */
>   void
> +AslAbort (
> +    void);
> +
> +void
>   AslError (
>       UINT8                   Level,
>       UINT8                   MessageId,
> @@ -775,10 +779,6 @@ TrLinkPeerNodes (
>    * aslfiles - File I/O support
>    */
>   void
> -AslAbort (
> -    void);
> -
> -void
>   FlAddIncludeDirectory (
>       char                    *Dir);
>
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 8e506f0..21ca7d5 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -128,6 +128,36 @@ AeAddToErrorLog (
>
>   /*******************************************************************************
>    *
> + * FUNCTION:    AslAbort
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Dump the error log and abort the compiler. Used for serious
> + *              I/O errors.
> + *
> + ******************************************************************************/
> +
> +void
> +AslAbort (
> +    void)
> +{
> +
> +    AePrintErrorLog (ASL_FILE_STDERR);
> +    if (Gbl_DebugFlag)
> +    {
> +        /* Print error summary to stdout also */
> +
> +        AePrintErrorLog (ASL_FILE_STDOUT);
> +    }
> +
> +    exit (1);
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AeClearErrorLog
>    *
>    * PARAMETERS:  None
> @@ -889,7 +919,8 @@ AslError (
>
>       /* Check if user wants to ignore this exception */
>
> -    if (AslIsExceptionDisabled (Level, MessageId))
> +    if (Gbl_AllExceptionsDisabled ||
> +        AslIsExceptionDisabled (Level, MessageId))
>       {
>           return;
>       }
> diff --git a/src/acpica/source/compiler/aslfileio.c b/src/acpica/source/compiler/aslfileio.c
> index b125c61..50f1534 100644
> --- a/src/acpica/source/compiler/aslfileio.c
> +++ b/src/acpica/source/compiler/aslfileio.c
> @@ -118,35 +118,9 @@
>   #define _COMPONENT          ACPI_COMPILER
>           ACPI_MODULE_NAME    ("aslfileio")
>
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    AslAbort
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Dump the error log and abort the compiler. Used for serious
> - *              I/O errors.
> - *
> - ******************************************************************************/
> -
> -void
> -AslAbort (
> -    void)
> -{
> -
> -    AePrintErrorLog (ASL_FILE_STDERR);
> -    if (Gbl_DebugFlag)
> -    {
> -        /* Print error summary to stdout also */
> -
> -        AePrintErrorLog (ASL_FILE_STDOUT);
> -    }
> -
> -    exit (1);
> -}
> +long
> +UtGetFileSize (
> +    FILE                    *fp);
>
>
>   /*******************************************************************************
> @@ -213,13 +187,73 @@ FlOpenFile (
>
>   /*******************************************************************************
>    *
> + * FUNCTION:    UtGetFileSize
> + *
> + * PARAMETERS:  fp              - Open file handle
> + *
> + * RETURN:      File Size. -1 on error.
> + *
> + * DESCRIPTION: Get current file size. Uses seek-to-EOF. File must be open.
> + *              TBD: This function should be used to replace other similar
> + *              functions in ACPICA.
> + *
> + ******************************************************************************/
> +
> +long
> +UtGetFileSize (
> +    FILE                    *fp)
> +{
> +    long                    FileSize;
> +    long                    CurrentOffset;
> +
> +
> +    CurrentOffset = ftell (fp);
> +    if (CurrentOffset < 0)
> +    {
> +        goto OffsetError;
> +    }
> +
> +    if (fseek (fp, 0, SEEK_END))
> +    {
> +        goto SeekError;
> +    }
> +
> +    FileSize = ftell (fp);
> +    if (FileSize < 0)
> +    {
> +        goto OffsetError;
> +    }
> +
> +    /* Restore file pointer */
> +
> +    if (fseek (fp, CurrentOffset, SEEK_SET))
> +    {
> +        goto SeekError;
> +    }
> +
> +    return (FileSize);
> +
> +
> +OffsetError:
> +    perror ("Could not get file offset");
> +    return (-1);
> +
> +SeekError:
> +    perror ("Could not seek file");
> +    return (-1);
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    FlGetFileSize
>    *
>    * PARAMETERS:  FileId              - Index into file info array
>    *
>    * RETURN:      File Size
>    *
> - * DESCRIPTION: Get current file size. Uses seek-to-EOF. File must be open.
> + * DESCRIPTION: Get current file size. Uses common seek-to-EOF function.
> + *              File must be open. Aborts compiler on error.
>    *
>    ******************************************************************************/
>
> @@ -227,21 +261,16 @@ UINT32
>   FlGetFileSize (
>       UINT32                  FileId)
>   {
> -    FILE                    *fp;
> -    UINT32                  FileSize;
> -    long                    Offset;
> -
> +    long                    FileSize;
>
> -    fp = Gbl_Files[FileId].Handle;
> -    Offset = ftell (fp);
>
> -    fseek (fp, 0, SEEK_END);
> -    FileSize = (UINT32) ftell (fp);
> -
> -    /* Restore file pointer */
> +    FileSize = UtGetFileSize (Gbl_Files[FileId].Handle);
> +    if (FileSize == -1)
> +    {
> +        AslAbort();
> +    }
>
> -    fseek (fp, Offset, SEEK_SET);
> -    return (FileSize);
> +    return ((UINT32) FileSize);
>   }
>
>
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index f6dc41d..4d56c05 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -231,7 +231,6 @@ ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_NoErrors, FALSE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_WarningsAsErrors, FALSE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_NoResourceChecking, FALSE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DisasmFlag, FALSE);
> -ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_GetAllTables, FALSE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_IntegerOptimizationFlag, TRUE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_ReferenceOptimizationFlag, TRUE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DisplayRemarks, TRUE);
> @@ -242,6 +241,7 @@ ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_UseOriginalCompilerId,
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_VerboseTemplates, FALSE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_DoTemplates, FALSE);
>   ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_CompileGeneric, FALSE);
> +ASL_EXTERN BOOLEAN                  ASL_INIT_GLOBAL (Gbl_AllExceptionsDisabled, FALSE);
>
>
>   #define HEX_OUTPUT_NONE             0
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 3469032..72a6c06 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -230,7 +230,6 @@ Usage (
>       ACPI_OPTION ("",                "  (Obtain DSDT from current system if no input file)");
>       ACPI_OPTION ("-e  <f1 f2 ...>", "Include ACPI table(s) for external symbol resolution");
>       ACPI_OPTION ("-fe <file>",      "Specify external symbol declaration file");
> -    ACPI_OPTION ("-g",              "Get ACPI tables and write to files (*.dat)");
>       ACPI_OPTION ("-in",             "Ignore NoOp opcodes");
>       ACPI_OPTION ("-vt",             "Dump binary table data in hex format within output file");
>
> @@ -391,16 +390,6 @@ main (
>
>       /* Perform global actions first/only */
>
> -    if (Gbl_GetAllTables)
> -    {
> -        Status = AslDoOneFile (NULL);
> -        if (ACPI_FAILURE (Status))
> -        {
> -            return (-1);
> -        }
> -        return (0);
> -    }
> -
>       if (Gbl_DisassembleAll)
>       {
>           while (argv[Index1])
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index f7e9b00..0e29ec2 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -517,7 +517,7 @@ char                        *AslMessages [] =
>   /*    ASL_MSG_INVALID_FIELD_NAME */         "Invalid Field Name",
>   /*    ASL_MSG_INVALID_HEX_INTEGER */        "Invalid hex integer constant",
>   /*    ASL_MSG_OEM_TABLE */                  "OEM table - unknown contents",
> -/*    ASL_MSG_RESERVED_VALUE */             "Reserved field must be zero",
> +/*    ASL_MSG_RESERVED_VALUE */             "Reserved field",
>   /*    ASL_MSG_UNKNOWN_LABEL */              "Label is undefined",
>   /*    ASL_MSG_UNKNOWN_SUBTABLE */           "Unknown subtable type",
>   /*    ASL_MSG_UNKNOWN_TABLE */              "Unknown ACPI table signature",
> diff --git a/src/acpica/source/compiler/aslpredef.c b/src/acpica/source/compiler/aslpredef.c
> index c94c3e2..9305ac7 100644
> --- a/src/acpica/source/compiler/aslpredef.c
> +++ b/src/acpica/source/compiler/aslpredef.c
> @@ -323,10 +323,16 @@ ApCheckPredefinedReturnValue (
>       const ACPI_PREDEFINED_INFO  *ThisName;
>
>
> -    /* Check parent method for a match against the predefined name list */
> -
> +    /*
> +     * Check parent method for a match against the predefined name list.
> +     *
> +     * Note: Disable compiler errors/warnings because any errors will be
> +     * caught when analyzing the parent method. Eliminates duplicate errors.
> +     */
> +    Gbl_AllExceptionsDisabled = TRUE;
>       Index = ApCheckForPredefinedName (MethodInfo->Op,
>                   MethodInfo->Op->Asl.NameSeg);
> +    Gbl_AllExceptionsDisabled = FALSE;
>
>       switch (Index)
>       {
> diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c
> index e403ef4..afcbd48 100644
> --- a/src/acpica/source/compiler/aslprepkg.c
> +++ b/src/acpica/source/compiler/aslprepkg.c
> @@ -241,7 +241,7 @@ ApCheckPackage (
>       {
>       case ACPI_PTYPE1_FIXED:
>           /*
> -         * The package count is fixed and there are no sub-packages
> +         * The package count is fixed and there are no subpackages
>            *
>            * If package is too small, exit.
>            * If package is larger than expected, issue warning but continue
> @@ -266,7 +266,7 @@ ApCheckPackage (
>
>       case ACPI_PTYPE1_VAR:
>           /*
> -         * The package count is variable, there are no sub-packages,
> +         * The package count is variable, there are no subpackages,
>            * and all elements must be of the same type
>            */
>           for (i = 0; i < Count; i++)
> @@ -279,7 +279,7 @@ ApCheckPackage (
>
>       case ACPI_PTYPE1_OPTION:
>           /*
> -         * The package count is variable, there are no sub-packages.
> +         * The package count is variable, there are no subpackages.
>            * There are a fixed number of required elements, and a variable
>            * number of optional elements.
>            *
> @@ -323,7 +323,7 @@ ApCheckPackage (
>           Op = Op->Asl.Next;
>           Count--;
>
> -        /* Examine the sub-packages */
> +        /* Examine the subpackages */
>
>           ApCheckPackageList (Predefined->Info.Name, Op,
>               Package, 1, Count);
> @@ -331,7 +331,7 @@ ApCheckPackage (
>
>       case ACPI_PTYPE2_PKG_COUNT:
>
> -        /* First element is the (Integer) count of sub-packages to follow */
> +        /* First element is the (Integer) count of subpackages to follow */
>
>           Status = ApCheckObjectType (Predefined->Info.Name, Op,
>               ACPI_RTYPE_INTEGER, 0);
> @@ -355,7 +355,7 @@ ApCheckPackage (
>
>           Op = Op->Asl.Next;
>
> -        /* Examine the sub-packages */
> +        /* Examine the subpackages */
>
>           ApCheckPackageList (Predefined->Info.Name, Op,
>               Package, 1, Count);
> @@ -368,10 +368,10 @@ ApCheckPackage (
>       case ACPI_PTYPE2_FIX_VAR:
>           /*
>            * These types all return a single Package that consists of a
> -         * variable number of sub-Packages.
> +         * variable number of subpackages.
>            */
>
> -        /* Examine the sub-packages */
> +        /* Examine the subpackages */
>
>           ApCheckPackageList (Predefined->Info.Name, Op,
>               Package, 0, Count);
> @@ -566,7 +566,7 @@ ApCheckPackageList (
>
>           case ACPI_PTYPE2_FIXED:
>
> -            /* Each sub-package has a fixed length */
> +            /* Each subpackage has a fixed length */
>
>               ExpectedCount = Package->RetInfo2.Count;
>               if (Count < ExpectedCount)
> @@ -589,7 +589,7 @@ ApCheckPackageList (
>
>           case ACPI_PTYPE2_MIN:
>
> -            /* Each sub-package has a variable but minimum length */
> +            /* Each subpackage has a variable but minimum length */
>
>               ExpectedCount = Package->RetInfo.Count1;
>               if (Count < ExpectedCount)
> @@ -599,7 +599,7 @@ ApCheckPackageList (
>                   break;
>               }
>
> -            /* Check the type of each sub-package element */
> +            /* Check the type of each subpackage element */
>
>               ApCheckPackageElements (PredefinedName, Op,
>                   Package->RetInfo.ObjectType1, Count, 0, 0);
> @@ -648,7 +648,7 @@ ApCheckPackageList (
>                   Count = ExpectedCount;
>               }
>
> -            /* Check the type of each sub-package element */
> +            /* Check the type of each subpackage element */
>
>               Op = Op->Asl.Next;
>               ApCheckPackageElements (PredefinedName, Op,
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index cba3b82..fb38e7c 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -323,7 +323,7 @@ AslDoDisassembly (
>       AcpiGbl_DbOpt_disasm = TRUE;
>       Status = AdAmlDisassemble (AslToFile,
>           Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_OutputFilenamePrefix,
> -        &Gbl_Files[ASL_FILE_INPUT].Filename, Gbl_GetAllTables);
> +        &Gbl_Files[ASL_FILE_INPUT].Filename);
>       if (ACPI_FAILURE (Status))
>       {
>           return (Status);
> @@ -403,7 +403,7 @@ AslDoOneFile (
>       /*
>        * AML Disassembly (Optional)
>        */
> -    if (Gbl_DisasmFlag || Gbl_GetAllTables)
> +    if (Gbl_DisasmFlag)
>       {
>           Status = AslDoDisassembly ();
>           if (Status != AE_CTRL_CONTINUE)
> diff --git a/src/acpica/source/compiler/asltransform.c b/src/acpica/source/compiler/asltransform.c
> index 6cc2559..de34e6e 100644
> --- a/src/acpica/source/compiler/asltransform.c
> +++ b/src/acpica/source/compiler/asltransform.c
> @@ -522,10 +522,6 @@ TrDoSwitch (
>               {
>                   /* Add an ELSE to complete the previous CASE */
>
> -                if (!Conditional)
> -                {
> -                    return;
> -                }
>                   NewOp             = TrCreateLeafNode (PARSEOP_ELSE);
>                   NewOp->Asl.Parent = Conditional->Asl.Parent;
>                   TrAmlInitLineNumbers (NewOp, NewOp->Asl.Parent);
> @@ -692,11 +688,6 @@ TrDoSwitch (
>           {
>               /* Convert the DEFAULT node to an ELSE */
>
> -            if (!Conditional)
> -            {
> -                return;
> -            }
> -
>               TrAmlInitNode (DefaultOp, PARSEOP_ELSE);
>               DefaultOp->Asl.Parent = Conditional->Asl.Parent;
>
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index 919ee9d..46d56f8 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -383,21 +383,37 @@ DtCompileInteger (
>           return;
>       }
>
> -    /* Ensure that reserved fields are set to zero */
> -    /* TBD: should we set to zero, or just make this an ERROR? */
> -    /* TBD: Probably better to use a flag */
> +    /*
> +     * Ensure that reserved fields are set properly. Note: uses
> +     * the DT_NON_ZERO flag to indicate that the reserved value
> +     * must be exactly one. Otherwise, the value must be zero.
> +     * This is sufficient for now.
> +     */
> +
> +    /* TBD: Should use a flag rather than compare "Reserved" */
>
> -    if (!ACPI_STRCMP (Field->Name, "Reserved") &&
> -        (Value != 0))
> +    if (!ACPI_STRCMP (Field->Name, "Reserved"))
>       {
> -        DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
> -            "Setting to zero");
> -        Value = 0;
> +        if (Flags & DT_NON_ZERO)
> +        {
> +            if (Value != 1)
> +            {
> +                DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
> +                    "Must be one, setting to one");
> +                Value = 1;
> +            }
> +        }
> +        else if (Value != 0)
> +        {
> +            DtError (ASL_WARNING, ASL_MSG_RESERVED_VALUE, Field,
> +                "Must be zero, setting to zero");
> +            Value = 0;
> +        }
>       }
>
>       /* Check if the value must be non-zero */
>
> -    if ((Value == 0) && (Flags & DT_NON_ZERO))
> +    else if ((Flags & DT_NON_ZERO) && (Value == 0))
>       {
>           DtError (ASL_ERROR, ASL_MSG_ZERO_VALUE, Field, NULL);
>       }
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index b6303dd..a1fe9ca 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -969,10 +969,10 @@ const unsigned char TemplateSpcr[] =
>   const unsigned char TemplateSpmi[] =
>   {
>       0x53,0x50,0x4D,0x49,0x41,0x00,0x00,0x00,  /* 00000000    "SPMIA..." */
> -    0x04,0xED,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x04,0x00,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
>       0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>       0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
> +    0x14,0x01,0x14,0x20,0x00,0x01,0x00,0x00,  /* 00000020    "... ...." */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
>       0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> diff --git a/src/acpica/source/compiler/prmacros.c b/src/acpica/source/compiler/prmacros.c
> index 65282b3..6bd6727 100644
> --- a/src/acpica/source/compiler/prmacros.c
> +++ b/src/acpica/source/compiler/prmacros.c
> @@ -432,7 +432,7 @@ PrAddMacro (
>           if (ArgCount >= PR_MAX_MACRO_ARGS)
>           {
>               PrError (ASL_ERROR, ASL_MSG_TOO_MANY_ARGUMENTS, TokenOffset);
> -            return;
> +            goto ErrorExit;
>           }
>       }
>
> @@ -472,7 +472,7 @@ PrAddMacro (
>                       PrError (ASL_ERROR, ASL_MSG_TOO_MANY_ARGUMENTS,
>                           THIS_TOKEN_OFFSET (Token));
>
> -                    return;
> +                    goto ErrorExit;
>                   }
>                   break;
>               }
> @@ -504,7 +504,7 @@ AddMacroToList:
>                   THIS_TOKEN_OFFSET (Name));
>           }
>
> -        return;
> +        goto ErrorExit;
>       }
>
>       DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> @@ -523,6 +523,13 @@ AddMacroToList:
>           DefineInfo->Args = Args;
>           DefineInfo->ArgCount = ArgCount;
>       }
> +
> +    return;
> +
> +
> +ErrorExit:
> +    ACPI_FREE (Args);
> +    return;
>   }
>
>
> diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c
> index 525e73f..77c5409 100644
> --- a/src/acpica/source/components/debugger/dbdisply.c
> +++ b/src/acpica/source/components/debugger/dbdisply.c
> @@ -375,6 +375,10 @@ AcpiDbDecodeAndDisplayObject (
>
>               /* Is not a recognizeable object */
>
> +            AcpiOsPrintf (
> +                "Not a known ACPI internal object, descriptor type %2.2X\n",
> +                ACPI_GET_DESCRIPTOR_TYPE (ObjPtr));
> +
>               Size = 16;
>               if (AcpiOsReadable (ObjPtr, 64))
>               {
> diff --git a/src/acpica/source/components/dispatcher/dsinit.c b/src/acpica/source/components/dispatcher/dsinit.c
> index 94b6d6d..22ed601 100644
> --- a/src/acpica/source/components/dispatcher/dsinit.c
> +++ b/src/acpica/source/components/dispatcher/dsinit.c
> @@ -124,6 +124,7 @@
>   #define _COMPONENT          ACPI_DISPATCHER
>           ACPI_MODULE_NAME    ("dsinit")
>
> +
>   /* Local prototypes */
>
>   static ACPI_STATUS
> @@ -163,8 +164,8 @@ AcpiDsInitOneObject (
>   {
>       ACPI_INIT_WALK_INFO     *Info = (ACPI_INIT_WALK_INFO *) Context;
>       ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
> -    ACPI_OBJECT_TYPE        Type;
>       ACPI_STATUS             Status;
> +    ACPI_OPERAND_OBJECT     *ObjDesc;
>
>
>       ACPI_FUNCTION_ENTRY ();
> @@ -183,9 +184,7 @@ AcpiDsInitOneObject (
>
>       /* And even then, we are only interested in a few object types */
>
> -    Type = AcpiNsGetType (ObjHandle);
> -
> -    switch (Type)
> +    switch (AcpiNsGetType (ObjHandle))
>       {
>       case ACPI_TYPE_REGION:
>
> @@ -201,8 +200,45 @@ AcpiDsInitOneObject (
>           break;
>
>       case ACPI_TYPE_METHOD:
> -
> +        /*
> +         * Auto-serialization support. We will examine each method that is
> +         * NotSerialized to determine if it creates any Named objects. If
> +         * it does, it will be marked serialized to prevent problems if
> +         * the method is entered by two or more threads and an attempt is
> +         * made to create the same named object twice -- which results in
> +         * an AE_ALREADY_EXISTS exception and method abort.
> +         */
>           Info->MethodCount++;
> +        ObjDesc = AcpiNsGetAttachedObject (Node);
> +        if (!ObjDesc)
> +        {
> +            break;
> +        }
> +
> +        /* Ignore if already serialized */
> +
> +        if (ObjDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED)
> +        {
> +            Info->SerialMethodCount++;
> +            break;
> +        }
> +
> +        if (AcpiGbl_AutoSerializeMethods)
> +        {
> +            /* Parse/scan method and serialize it if necessary */
> +
> +            AcpiDsAutoSerializeMethod (Node, ObjDesc);
> +            if (ObjDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED)
> +            {
> +                /* Method was just converted to Serialized */
> +
> +                Info->SerialMethodCount++;
> +                Info->SerializedMethodCount++;
> +                break;
> +            }
> +        }
> +
> +        Info->NonSerialMethodCount++;
>           break;
>
>       case ACPI_TYPE_DEVICE:
> @@ -259,7 +295,6 @@ AcpiDsInitializeObjects (
>
>       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
>           "**** Starting initialization of namespace objects ****\n"));
> -    ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Parsing all Control Methods:"));
>
>       /* Set all init info to zero */
>
> @@ -295,12 +330,14 @@ AcpiDsInitializeObjects (
>       }
>
>       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
> -        "\nTable [%4.4s](id %4.4X) - %u Objects with %u Devices %u Methods %u Regions\n",
> -        Table->Signature, OwnerId, Info.ObjectCount,
> -        Info.DeviceCount, Info.MethodCount, Info.OpRegionCount));
> -
> -    ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
> -        "%u Methods, %u Regions\n", Info.MethodCount, Info.OpRegionCount));
> +        "Table [%4.4s] (id %4.4X) - %4u Objects with %3u Devices, "
> +        "%3u Regions, %3u Methods (%u/%u/%u Serial/Non/Cvt)\n",
> +        Table->Signature, OwnerId, Info.ObjectCount, Info.DeviceCount,
> +        Info.OpRegionCount, Info.MethodCount, Info.SerialMethodCount,
> +        Info.NonSerialMethodCount, Info.SerializedMethodCount));
> +
> +    ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "%u Methods, %u Regions\n",
> +        Info.MethodCount, Info.OpRegionCount));
>
>       return_ACPI_STATUS (AE_OK);
>   }
> diff --git a/src/acpica/source/components/dispatcher/dsmethod.c b/src/acpica/source/components/dispatcher/dsmethod.c
> index a4ed4cd..b2dc658 100644
> --- a/src/acpica/source/components/dispatcher/dsmethod.c
> +++ b/src/acpica/source/components/dispatcher/dsmethod.c
> @@ -121,6 +121,8 @@
>   #include "acinterp.h"
>   #include "acnamesp.h"
>   #include "acdisasm.h"
> +#include "acparser.h"
> +#include "amlcode.h"
>
>
>   #define _COMPONENT          ACPI_DISPATCHER
> @@ -129,12 +131,149 @@
>   /* Local prototypes */
>
>   static ACPI_STATUS
> +AcpiDsDetectNamedOpcodes (
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_PARSE_OBJECT       **OutOp);
> +
> +static ACPI_STATUS
>   AcpiDsCreateMethodMutex (
>       ACPI_OPERAND_OBJECT     *MethodDesc);
>
>
>   /*******************************************************************************
>    *
> + * FUNCTION:    AcpiDsAutoSerializeMethod
> + *
> + * PARAMETERS:  Node                        - Namespace Node of the method
> + *              ObjDesc                     - Method object attached to node
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Parse a control method AML to scan for control methods that
> + *              need serialization due to the creation of named objects.
> + *
> + * NOTE: It is a bit of overkill to mark all such methods serialized, since
> + * there is only a problem if the method actually blocks during execution.
> + * A blocking operation is, for example, a Sleep() operation, or any access
> + * to an operation region. However, it is probably not possible to easily
> + * detect whether a method will block or not, so we simply mark all suspicious
> + * methods as serialized.
> + *
> + * NOTE2: This code is essentially a generic routine for parsing a single
> + * control method.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiDsAutoSerializeMethod (
> +    ACPI_NAMESPACE_NODE     *Node,
> +    ACPI_OPERAND_OBJECT     *ObjDesc)
> +{
> +    ACPI_STATUS             Status;
> +    ACPI_PARSE_OBJECT       *Op = NULL;
> +    ACPI_WALK_STATE         *WalkState;
> +
> +
> +    ACPI_FUNCTION_TRACE_PTR (DsAutoSerializeMethod, Node);
> +
> +
> +    ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
> +        "Method auto-serialization parse [%4.4s] %p\n",
> +        AcpiUtGetNodeName (Node), Node));
> +
> +    /* Create/Init a root op for the method parse tree */
> +
> +    Op = AcpiPsAllocOp (AML_METHOD_OP);
> +    if (!Op)
> +    {
> +        return_ACPI_STATUS (AE_NO_MEMORY);
> +    }
> +
> +    AcpiPsSetName (Op, Node->Name.Integer);
> +    Op->Common.Node = Node;
> +
> +    /* Create and initialize a new walk state */
> +
> +    WalkState = AcpiDsCreateWalkState (Node->OwnerId, NULL, NULL, NULL);
> +    if (!WalkState)
> +    {
> +        return_ACPI_STATUS (AE_NO_MEMORY);
> +    }
> +
> +    Status = AcpiDsInitAmlWalk (WalkState, Op, Node, ObjDesc->Method.AmlStart,
> +                ObjDesc->Method.AmlLength, NULL, 0);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        AcpiDsDeleteWalkState (WalkState);
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    WalkState->DescendingCallback = AcpiDsDetectNamedOpcodes;
> +
> +    /* Parse the method, scan for creation of named objects */
> +
> +    Status = AcpiPsParseAml (WalkState);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return_ACPI_STATUS (Status);
> +    }
> +
> +    AcpiPsDeleteParseTree (Op);
> +    return_ACPI_STATUS (Status);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDsDetectNamedOpcodes
> + *
> + * PARAMETERS:  WalkState       - Current state of the parse tree walk
> + *              OutOp           - Unused, required for parser interface
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Descending callback used during the loading of ACPI tables.
> + *              Currently used to detect methods that must be marked serialized
> + *              in order to avoid problems with the creation of named objects.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiDsDetectNamedOpcodes (
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_PARSE_OBJECT       **OutOp)
> +{
> +
> +    ACPI_FUNCTION_NAME (AcpiDsDetectNamedOpcodes);
> +
> +
> +    /* We are only interested in opcodes that create a new name */
> +
> +    if (!(WalkState->OpInfo->Flags & (AML_NAMED | AML_CREATE | AML_FIELD)))
> +    {
> +        return (AE_OK);
> +    }
> +
> +    /*
> +     * At this point, we know we have a Named object opcode.
> +     * Mark the method as serialized. Later code will create a mutex for
> +     * this method to enforce serialization.
> +     */
> +    WalkState->MethodDesc->Method.InfoFlags |= ACPI_METHOD_SERIALIZED;
> +
> +    ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> +        "Method serialized [%4.4s] %p - [%s] (%4.4X)\n",
> +        WalkState->MethodNode->Name.Ascii, WalkState->MethodNode,
> +        WalkState->OpInfo->Name, WalkState->Opcode));
> +
> +    /* Abort the parse, no need to examine this method any further */
> +
> +    return (AE_CTRL_TERMINATE);
> +}
> +
> +
> +/*******************************************************************************
> + *
>    * FUNCTION:    AcpiDsMethodError
>    *
>    * PARAMETERS:  Status          - Execution status
> diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
> index f97f821..7f811dd 100644
> --- a/src/acpica/source/components/dispatcher/dswload.c
> +++ b/src/acpica/source/components/dispatcher/dswload.c
> @@ -152,8 +152,21 @@ AcpiDsInitCallbacks (
>
>       switch (PassNumber)
>       {
> +    case 0:
> +
> +        /* Parse only - caller will setup callbacks */
> +
> +        WalkState->ParseFlags         = ACPI_PARSE_LOAD_PASS1 |
> +                                        ACPI_PARSE_DELETE_TREE |
> +                                        ACPI_PARSE_DISASSEMBLE;
> +        WalkState->DescendingCallback = NULL;
> +        WalkState->AscendingCallback  = NULL;
> +        break;
> +
>       case 1:
>
> +        /* Load pass 1 */
> +
>           WalkState->ParseFlags         = ACPI_PARSE_LOAD_PASS1 |
>                                           ACPI_PARSE_DELETE_TREE;
>           WalkState->DescendingCallback = AcpiDsLoad1BeginOp;
> @@ -162,6 +175,8 @@ AcpiDsInitCallbacks (
>
>       case 2:
>
> +        /* Load pass 2 */
> +
>           WalkState->ParseFlags         = ACPI_PARSE_LOAD_PASS1 |
>                                           ACPI_PARSE_DELETE_TREE;
>           WalkState->DescendingCallback = AcpiDsLoad2BeginOp;
> @@ -170,6 +185,8 @@ AcpiDsInitCallbacks (
>
>       case 3:
>
> +        /* Execution pass */
> +
>   #ifndef ACPI_NO_METHOD_EXECUTION
>           WalkState->ParseFlags        |= ACPI_PARSE_EXECUTE  |
>                                           ACPI_PARSE_DELETE_TREE;
> diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c
> index c03ae6c..8f1b24b 100644
> --- a/src/acpica/source/components/events/evregion.c
> +++ b/src/acpica/source/components/events/evregion.c
> @@ -405,6 +405,7 @@ AcpiEvDetachRegion(
>   {
>       ACPI_OPERAND_OBJECT     *HandlerObj;
>       ACPI_OPERAND_OBJECT     *ObjDesc;
> +    ACPI_OPERAND_OBJECT     *StartDesc;
>       ACPI_OPERAND_OBJECT     **LastObjPtr;
>       ACPI_ADR_SPACE_SETUP    RegionSetup;
>       void                    **RegionContext;
> @@ -435,6 +436,7 @@ AcpiEvDetachRegion(
>       /* Find this region in the handler's list */
>
>       ObjDesc = HandlerObj->AddressSpace.RegionList;
> +    StartDesc = ObjDesc;
>       LastObjPtr = &HandlerObj->AddressSpace.RegionList;
>
>       while (ObjDesc)
> @@ -529,6 +531,16 @@ AcpiEvDetachRegion(
>
>           LastObjPtr = &ObjDesc->Region.Next;
>           ObjDesc = ObjDesc->Region.Next;
> +
> +        /* Prevent infinite loop if list is corrupted */
> +
> +        if (ObjDesc == StartDesc)
> +        {
> +            ACPI_ERROR ((AE_INFO,
> +                "Circular handler list in region object %p",
> +                RegionObj));
> +            return_VOID;
> +        }
>       }
>
>       /* If we get here, the region was not in the handler's region list */
> diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
> index d020a71..ec9f85d 100644
> --- a/src/acpica/source/components/executer/exdump.c
> +++ b/src/acpica/source/components/executer/exdump.c
> @@ -186,13 +186,14 @@ static ACPI_EXDUMP_INFO     AcpiExDumpBuffer[5] =
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer),         NULL},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Buffer.Length),                "Length"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Pointer),               "Pointer"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Buffer.Node),                  "Parent Node"},
>       {ACPI_EXD_BUFFER,   0,                                              NULL}
>   };
>
> -static ACPI_EXDUMP_INFO     AcpiExDumpPackage[5] =
> +static ACPI_EXDUMP_INFO     AcpiExDumpPackage[6] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage),        NULL},
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Package.Node),                 "Parent Node"},
>       {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Package.Flags),                "Flags"},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Package.Count),                "Elements"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Package.Elements),             "Element List"},
> @@ -202,9 +203,9 @@ static ACPI_EXDUMP_INFO     AcpiExDumpPackage[5] =
>   static ACPI_EXDUMP_INFO     AcpiExDumpDevice[4] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice),         NULL},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.Handler),               "Handler"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[0]),         "System Notify"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"}
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Device.NotifyList[1]),         "Device Notify"},
> +    {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler),               "Handler"}
>   };
>
>   static ACPI_EXDUMP_INFO     AcpiExDumpEvent[2] =
> @@ -235,24 +236,26 @@ static ACPI_EXDUMP_INFO     AcpiExDumpMutex[5] =
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Mutex.OsMutex),                "OsMutex"}
>   };
>
> -static ACPI_EXDUMP_INFO     AcpiExDumpRegion[7] =
> +static ACPI_EXDUMP_INFO     AcpiExDumpRegion[8] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion),         NULL},
>       {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.SpaceId),               "Space Id"},
>       {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Region.Flags),                 "Flags"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Region.Node),                  "Parent Node"},
>       {ACPI_EXD_ADDRESS,  ACPI_EXD_OFFSET (Region.Address),               "Address"},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Region.Length),                "Length"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
> +    {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler),               "Handler"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Region.Next),                  "Next"}
>   };
>
> -static ACPI_EXDUMP_INFO     AcpiExDumpPower[5] =
> +static ACPI_EXDUMP_INFO     AcpiExDumpPower[6] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpPower),          NULL},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.SystemLevel),    "System Level"},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (PowerResource.ResourceOrder),  "Resource Order"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[0]),  "System Notify"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"}
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.NotifyList[1]),  "Device Notify"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (PowerResource.Handler),        "Handler"}
>   };
>
>   static ACPI_EXDUMP_INFO     AcpiExDumpProcessor[7] =
> @@ -315,7 +318,7 @@ static ACPI_EXDUMP_INFO     AcpiExDumpReference[8] =
>       {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Reference.TargetType),         "Target Type"},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Reference.Value),              "Value"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Object),             "Object Desc"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Node),               "Node"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Reference.Node),               "Node"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Reference.Where),              "Where"},
>       {ACPI_EXD_REFERENCE,0,                                              NULL}
>   };
> @@ -324,16 +327,16 @@ static ACPI_EXDUMP_INFO     AcpiExDumpAddressHandler[6] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL},
>       {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (AddressSpace.SpaceId),         "Space Id"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
> +    {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next),            "Next"},
> +    {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList),      "Region List"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (AddressSpace.Node),            "Node"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (AddressSpace.Context),         "Context"}
>   };
>
>   static ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify),         NULL},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Notify.Node),                  "Node"},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Notify.HandlerType),           "Handler Type"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Handler),               "Handler"},
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Context),               "Context"},
> @@ -341,15 +344,32 @@ static ACPI_EXDUMP_INFO     AcpiExDumpNotify[7] =
>       {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Notify.Next[1]),               "Next Device Notify"}
>   };
>
> +static ACPI_EXDUMP_INFO     AcpiExDumpExtra[6] =
> +{
> +    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra),          NULL},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.Method_REG),             "_REG Method"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (Extra.ScopeNode),              "Scope Node"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.RegionContext),          "Region Context"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Extra.AmlStart),               "Aml Start"},
> +    {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (Extra.AmlLength),              "Aml Length"}
> +};
> +
> +static ACPI_EXDUMP_INFO     AcpiExDumpData[3] =
> +{
> +    {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpData),           NULL},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Handler),                 "Handler"},
> +    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (Data.Pointer),                 "Raw Data"}
> +};
>
>   /* Miscellaneous tables */
>
> -static ACPI_EXDUMP_INFO     AcpiExDumpCommon[4] =
> +static ACPI_EXDUMP_INFO     AcpiExDumpCommon[5] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon),         NULL},
>       {ACPI_EXD_TYPE ,    0,                                              NULL},
>       {ACPI_EXD_UINT16,   ACPI_EXD_OFFSET (Common.ReferenceCount),        "Reference Count"},
> -    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"}
> +    {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (Common.Flags),                 "Flags"},
> +    {ACPI_EXD_LIST,     ACPI_EXD_OFFSET (Common.NextObject),            "Object List"}
>   };
>
>   static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
> @@ -360,16 +380,18 @@ static ACPI_EXDUMP_INFO     AcpiExDumpFieldCommon[7] =
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BitLength),        "Bit Length"},
>       {ACPI_EXD_UINT8,    ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"},
>       {ACPI_EXD_UINT32,   ACPI_EXD_OFFSET (CommonField.BaseByteOffset),   "Base Byte Offset"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
> +    {ACPI_EXD_NODE,     ACPI_EXD_OFFSET (CommonField.Node),             "Parent Node"}
>   };
>
> -static ACPI_EXDUMP_INFO     AcpiExDumpNode[5] =
> +static ACPI_EXDUMP_INFO     AcpiExDumpNode[7] =
>   {
>       {ACPI_EXD_INIT,     ACPI_EXD_TABLE_SIZE (AcpiExDumpNode),           NULL},
>       {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (Flags),                      "Flags"},
>       {ACPI_EXD_UINT8,    ACPI_EXD_NSOFFSET (OwnerId),                    "Owner Id"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Child),                      "Child List"},
> -    {ACPI_EXD_POINTER,  ACPI_EXD_NSOFFSET (Peer),                       "Next Peer"}
> +    {ACPI_EXD_LIST,     ACPI_EXD_NSOFFSET (Object),                     "Object List"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Parent),                     "Parent"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Child),                      "Child"},
> +    {ACPI_EXD_NODE,     ACPI_EXD_NSOFFSET (Peer),                       "Peer"}
>   };
>
>
> @@ -404,7 +426,9 @@ static ACPI_EXDUMP_INFO     *AcpiExDumpInfo[] =
>       AcpiExDumpAddressHandler,
>       NULL,
>       NULL,
> -    NULL
> +    NULL,
> +    AcpiExDumpExtra,
> +    AcpiExDumpData
>   };
>
>
> @@ -431,6 +455,10 @@ AcpiExDumpObject (
>       char                    *Name;
>       const char              *ReferenceName;
>       UINT8                   Count;
> +    ACPI_OPERAND_OBJECT     *Start;
> +    ACPI_OPERAND_OBJECT     *Data = NULL;
> +    ACPI_OPERAND_OBJECT     *Next;
> +    ACPI_NAMESPACE_NODE     *Node;
>
>
>       if (!Info)
> @@ -458,7 +486,8 @@ AcpiExDumpObject (
>
>           case ACPI_EXD_TYPE:
>
> -            AcpiExOutString  ("Type", AcpiUtGetObjectTypeName (ObjDesc));
> +            AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
> +                ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc));
>               break;
>
>           case ACPI_EXD_UINT8:
> @@ -519,6 +548,120 @@ AcpiExDumpObject (
>               AcpiExDumpReferenceObj (ObjDesc);
>               break;
>
> +        case ACPI_EXD_LIST:
> +
> +            Start = *ACPI_CAST_PTR (void *, Target);
> +            Next = Start;
> +
> +            AcpiOsPrintf ("%20s : %p", Name, Next);
> +            if (Next)
> +            {
> +                AcpiOsPrintf ("(%s %2.2X)",
> +                    AcpiUtGetObjectTypeName (Next), Next->Common.Type);
> +
> +                while (Next->Common.NextObject)
> +                {
> +                    if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
> +                        !Data)
> +                    {
> +                        Data = Next;
> +                    }
> +
> +                    Next = Next->Common.NextObject;
> +                    AcpiOsPrintf ("->%p(%s %2.2X)", Next,
> +                        AcpiUtGetObjectTypeName (Next), Next->Common.Type);
> +
> +                    if ((Next == Start) || (Next == Data))
> +                    {
> +                        AcpiOsPrintf ("\n**** Error: Object list appears to be circular linked");
> +                        break;
> +                    }
> +                }
> +            }
> +
> +            AcpiOsPrintf ("\n", Next);
> +            break;
> +
> +        case ACPI_EXD_HDLR_LIST:
> +
> +            Start = *ACPI_CAST_PTR (void *, Target);
> +            Next = Start;
> +
> +            AcpiOsPrintf ("%20s : %p", Name, Next);
> +            if (Next)
> +            {
> +                AcpiOsPrintf ("(%s %2.2X)",
> +                    AcpiUtGetObjectTypeName (Next), Next->Common.Type);
> +
> +                while (Next->AddressSpace.Next)
> +                {
> +                    if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
> +                        !Data)
> +                    {
> +                        Data = Next;
> +                    }
> +
> +                    Next = Next->AddressSpace.Next;
> +                    AcpiOsPrintf ("->%p(%s %2.2X)", Next,
> +                        AcpiUtGetObjectTypeName (Next), Next->Common.Type);
> +
> +                    if ((Next == Start) || (Next == Data))
> +                    {
> +                        AcpiOsPrintf ("\n**** Error: Handler list appears to be circular linked");
> +                        break;
> +                    }
> +                }
> +            }
> +
> +            AcpiOsPrintf ("\n", Next);
> +            break;
> +
> +        case ACPI_EXD_RGN_LIST:
> +
> +            Start = *ACPI_CAST_PTR (void *, Target);
> +            Next = Start;
> +
> +            AcpiOsPrintf ("%20s : %p", Name, Next);
> +            if (Next)
> +            {
> +                AcpiOsPrintf ("(%s %2.2X)",
> +                    AcpiUtGetObjectTypeName (Next), Next->Common.Type);
> +
> +                while (Next->Region.Next)
> +                {
> +                    if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) &&
> +                        !Data)
> +                    {
> +                        Data = Next;
> +                    }
> +
> +                    Next = Next->Region.Next;
> +                    AcpiOsPrintf ("->%p(%s %2.2X)", Next,
> +                        AcpiUtGetObjectTypeName (Next), Next->Common.Type);
> +
> +                    if ((Next == Start) || (Next == Data))
> +                    {
> +                        AcpiOsPrintf ("\n**** Error: Region list appears to be circular linked");
> +                        break;
> +                    }
> +                }
> +            }
> +
> +            AcpiOsPrintf ("\n", Next);
> +            break;
> +
> +        case ACPI_EXD_NODE:
> +
> +            Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target);
> +
> +            AcpiOsPrintf ("%20s : %p", Name, Node);
> +            if (Node)
> +            {
> +                AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii);
> +            }
> +            AcpiOsPrintf ("\n");
> +            break;
> +
>           default:
>
>               AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
> @@ -936,9 +1079,8 @@ AcpiExDumpNamespaceNode (
>       }
>
>       AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node));
> -    AcpiExOutString  ("Type", AcpiUtGetTypeName (Node->Type));
> -    AcpiExOutPointer ("Attached Object", AcpiNsGetAttachedObject (Node));
> -    AcpiExOutPointer ("Parent", Node->Parent);
> +    AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type",
> +        Node->Type, AcpiUtGetTypeName (Node->Type));
>
>       AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node),
>           AcpiExDumpNode);
> @@ -1146,24 +1288,30 @@ AcpiExDumpObjectDescriptor (
>           AcpiOsPrintf ("\nAttached Object (%p):\n",
>               ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object);
>
> -        AcpiExDumpObjectDescriptor (
> -            ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object, Flags);
> -        return_VOID;
> +        ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object;
> +        goto DumpObject;
>       }
>
>       if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND)
>       {
>           AcpiOsPrintf (
> -            "ExDumpObjectDescriptor: %p is not an ACPI operand object: [%s]\n",
> +            "%p is not an ACPI operand object: [%s]\n",
>               ObjDesc, AcpiUtGetDescriptorName (ObjDesc));
>           return_VOID;
>       }
>
> -    if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX)
> +    /* Validate the object type */
> +
> +    if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
>       {
> +        AcpiOsPrintf ("Not a known object type: %2.2X\n",
> +            ObjDesc->Common.Type);
>           return_VOID;
>       }
>
> +
> +DumpObject:
> +
>       /* Common Fields */
>
>       AcpiExDumpObject (ObjDesc, AcpiExDumpCommon);
> @@ -1171,6 +1319,22 @@ AcpiExDumpObjectDescriptor (
>       /* Object-specific fields */
>
>       AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
> +
> +    if (ObjDesc->Common.Type == ACPI_TYPE_REGION)
> +    {
> +        ObjDesc = ObjDesc->Common.NextObject;
> +        if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX)
> +        {
> +            AcpiOsPrintf ("Secondary object is not a known object type: %2.2X\n",
> +                ObjDesc->Common.Type);
> +
> +            return_VOID;
> +        }
> +
> +        AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc);
> +        AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]);
> +    }
> +
>       return_VOID;
>   }
>
> diff --git a/src/acpica/source/components/executer/exsystem.c b/src/acpica/source/components/executer/exsystem.c
> index 91a8a00..fcf3a7f 100644
> --- a/src/acpica/source/components/executer/exsystem.c
> +++ b/src/acpica/source/components/executer/exsystem.c
> @@ -159,7 +159,7 @@ AcpiExSystemWaitSemaphore (
>       {
>           /* We must wait, so unlock the interpreter */
>
> -        AcpiExRelinquishInterpreter ();
> +        AcpiExExitInterpreter ();
>
>           Status = AcpiOsWaitSemaphore (Semaphore, 1, Timeout);
>
> @@ -169,7 +169,7 @@ AcpiExSystemWaitSemaphore (
>
>           /* Reacquire the interpreter */
>
> -       AcpiExReacquireInterpreter ();
> +       AcpiExEnterInterpreter ();
>       }
>
>       return_ACPI_STATUS (Status);
> @@ -212,7 +212,7 @@ AcpiExSystemWaitMutex (
>       {
>           /* We must wait, so unlock the interpreter */
>
> -        AcpiExRelinquishInterpreter ();
> +        AcpiExExitInterpreter ();
>
>           Status = AcpiOsAcquireMutex (Mutex, Timeout);
>
> @@ -222,7 +222,7 @@ AcpiExSystemWaitMutex (
>
>           /* Reacquire the interpreter */
>
> -        AcpiExReacquireInterpreter ();
> +        AcpiExEnterInterpreter ();
>       }
>
>       return_ACPI_STATUS (Status);
> @@ -299,7 +299,7 @@ AcpiExSystemDoSleep (
>
>       /* Since this thread will sleep, we must release the interpreter */
>
> -    AcpiExRelinquishInterpreter ();
> +    AcpiExExitInterpreter ();
>
>       /*
>        * For compatibility with other ACPI implementations and to prevent
> @@ -314,7 +314,7 @@ AcpiExSystemDoSleep (
>
>       /* And now we must get the interpreter again */
>
> -    AcpiExReacquireInterpreter ();
> +    AcpiExEnterInterpreter ();
>       return (AE_OK);
>   }
>
> diff --git a/src/acpica/source/components/executer/exutils.c b/src/acpica/source/components/executer/exutils.c
> index 0c94337..1a4a943 100644
> --- a/src/acpica/source/components/executer/exutils.c
> +++ b/src/acpica/source/components/executer/exutils.c
> @@ -184,42 +184,6 @@ AcpiExEnterInterpreter (
>
>   /*******************************************************************************
>    *
> - * FUNCTION:    AcpiExReacquireInterpreter
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Reacquire the interpreter execution region from within the
> - *              interpreter code. Failure to enter the interpreter region is a
> - *              fatal system error. Used in conjunction with
> - *              RelinquishInterpreter
> - *
> - ******************************************************************************/
> -
> -void
> -AcpiExReacquireInterpreter (
> -    void)
> -{
> -    ACPI_FUNCTION_TRACE (ExReacquireInterpreter);
> -
> -
> -    /*
> -     * If the global serialized flag is set, do not release the interpreter,
> -     * since it was not actually released by AcpiExRelinquishInterpreter.
> -     * This forces the interpreter to be single threaded.
> -     */
> -    if (!AcpiGbl_AllMethodsSerialized)
> -    {
> -        AcpiExEnterInterpreter ();
> -    }
> -
> -    return_VOID;
> -}
> -
> -
> -/*******************************************************************************
> - *
>    * FUNCTION:    AcpiExExitInterpreter
>    *
>    * PARAMETERS:  None
> @@ -228,7 +192,16 @@ AcpiExReacquireInterpreter (
>    *
>    * DESCRIPTION: Exit the interpreter execution region. This is the top level
>    *              routine used to exit the interpreter when all processing has
> - *              been completed.
> + *              been completed, or when the method blocks.
> + *
> + * Cases where the interpreter is unlocked internally:
> + *      1) Method will be blocked on a Sleep() AML opcode
> + *      2) Method will be blocked on an Acquire() AML opcode
> + *      3) Method will be blocked on a Wait() AML opcode
> + *      4) Method will be blocked to acquire the global lock
> + *      5) Method will be blocked waiting to execute a serialized control
> + *          method that is currently executing
> + *      6) About to invoke a user-installed opregion handler
>    *
>    ******************************************************************************/
>
> @@ -254,49 +227,6 @@ AcpiExExitInterpreter (
>
>   /*******************************************************************************
>    *
> - * FUNCTION:    AcpiExRelinquishInterpreter
> - *
> - * PARAMETERS:  None
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Exit the interpreter execution region, from within the
> - *              interpreter - before attempting an operation that will possibly
> - *              block the running thread.
> - *
> - * Cases where the interpreter is unlocked internally
> - *      1) Method to be blocked on a Sleep() AML opcode
> - *      2) Method to be blocked on an Acquire() AML opcode
> - *      3) Method to be blocked on a Wait() AML opcode
> - *      4) Method to be blocked to acquire the global lock
> - *      5) Method to be blocked waiting to execute a serialized control method
> - *          that is currently executing
> - *      6) About to invoke a user-installed opregion handler
> - *
> - ******************************************************************************/
> -
> -void
> -AcpiExRelinquishInterpreter (
> -    void)
> -{
> -    ACPI_FUNCTION_TRACE (ExRelinquishInterpreter);
> -
> -
> -    /*
> -     * If the global serialized flag is set, do not release the interpreter.
> -     * This forces the interpreter to be single threaded.
> -     */
> -    if (!AcpiGbl_AllMethodsSerialized)
> -    {
> -        AcpiExExitInterpreter ();
> -    }
> -
> -    return_VOID;
> -}
> -
> -
> -/*******************************************************************************
> - *
>    * FUNCTION:    AcpiExTruncateFor32bitTable
>    *
>    * PARAMETERS:  ObjDesc         - Object to be truncated
> diff --git a/src/acpica/source/components/namespace/nsinit.c b/src/acpica/source/components/namespace/nsinit.c
> index 055d66c..2e35355 100644
> --- a/src/acpica/source/components/namespace/nsinit.c
> +++ b/src/acpica/source/components/namespace/nsinit.c
> @@ -201,9 +201,8 @@ AcpiNsInitializeObjects (
>           Info.PackageInit,   Info.PackageCount, Info.ObjectCount));
>
>       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
> -        "%u Control Methods found\n", Info.MethodCount));
> -    ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
> -        "%u Op Regions found\n", Info.OpRegionCount));
> +        "%u Control Methods found\n%u Op Regions found\n",
> +        Info.MethodCount, Info.OpRegionCount));
>
>       return_ACPI_STATUS (AE_OK);
>   }
> diff --git a/src/acpica/source/components/namespace/nsload.c b/src/acpica/source/components/namespace/nsload.c
> index e156b0d..7d68af7 100644
> --- a/src/acpica/source/components/namespace/nsload.c
> +++ b/src/acpica/source/components/namespace/nsload.c
> @@ -220,12 +220,12 @@ Unlock:
>        * parse trees.
>        */
>       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> -        "**** Begin Table Method Parsing and Object Initialization\n"));
> +        "**** Begin Table Object Initialization\n"));
>
>       Status = AcpiDsInitializeObjects (TableIndex, Node);
>
>       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
> -        "**** Completed Table Method Parsing and Object Initialization\n"));
> +        "**** Completed Table Object Initialization\n"));
>
>       return_ACPI_STATUS (Status);
>   }
> diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c
> index 922c5ca..7981e62 100644
> --- a/src/acpica/source/components/namespace/nsobject.c
> +++ b/src/acpica/source/components/namespace/nsobject.c
> @@ -319,14 +319,19 @@ AcpiNsDetachObject (
>           }
>       }
>
> -    /* Clear the entry in all cases */
> +    /* Clear the Node entry in all cases */
>
>       Node->Object = NULL;
>       if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND)
>       {
> +        /* Unlink object from front of possible object list */
> +
>           Node->Object = ObjDesc->Common.NextObject;
> +
> +        /* Handle possible 2-descriptor object */
> +
>           if (Node->Object &&
> -           ((Node->Object)->Common.Type != ACPI_TYPE_LOCAL_DATA))
> +           (Node->Object->Common.Type != ACPI_TYPE_LOCAL_DATA))
>           {
>               Node->Object = Node->Object->Common.NextObject;
>           }
> diff --git a/src/acpica/source/components/namespace/nsprepkg.c b/src/acpica/source/components/namespace/nsprepkg.c
> index 7c58355..41dc5a7 100644
> --- a/src/acpica/source/components/namespace/nsprepkg.c
> +++ b/src/acpica/source/components/namespace/nsprepkg.c
> @@ -216,13 +216,13 @@ AcpiNsCheckPackage (
>        * Decode the type of the expected package contents
>        *
>        * PTYPE1 packages contain no subpackages
> -     * PTYPE2 packages contain sub-packages
> +     * PTYPE2 packages contain subpackages
>        */
>       switch (Package->RetInfo.Type)
>       {
>       case ACPI_PTYPE1_FIXED:
>           /*
> -         * The package count is fixed and there are no sub-packages
> +         * The package count is fixed and there are no subpackages
>            *
>            * If package is too small, exit.
>            * If package is larger than expected, issue warning but continue
> @@ -249,7 +249,7 @@ AcpiNsCheckPackage (
>
>       case ACPI_PTYPE1_VAR:
>           /*
> -         * The package count is variable, there are no sub-packages, and all
> +         * The package count is variable, there are no subpackages, and all
>            * elements must be of the same type
>            */
>           for (i = 0; i < Count; i++)
> @@ -266,7 +266,7 @@ AcpiNsCheckPackage (
>
>       case ACPI_PTYPE1_OPTION:
>           /*
> -         * The package count is variable, there are no sub-packages. There are
> +         * The package count is variable, there are no subpackages. There are
>            * a fixed number of required elements, and a variable number of
>            * optional elements.
>            *
> @@ -322,14 +322,14 @@ AcpiNsCheckPackage (
>           Elements++;
>           Count--;
>
> -        /* Examine the sub-packages */
> +        /* Examine the subpackages */
>
>           Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
>           break;
>
>       case ACPI_PTYPE2_PKG_COUNT:
>
> -        /* First element is the (Integer) count of sub-packages to follow */
> +        /* First element is the (Integer) count of subpackages to follow */
>
>           Status = AcpiNsCheckObjectType (Info, Elements,
>                       ACPI_RTYPE_INTEGER, 0);
> @@ -351,7 +351,7 @@ AcpiNsCheckPackage (
>           Count = ExpectedCount;
>           Elements++;
>
> -        /* Examine the sub-packages */
> +        /* Examine the subpackages */
>
>           Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
>           break;
> @@ -363,9 +363,9 @@ AcpiNsCheckPackage (
>       case ACPI_PTYPE2_FIX_VAR:
>           /*
>            * These types all return a single Package that consists of a
> -         * variable number of sub-Packages.
> +         * variable number of subpackages.
>            *
> -         * First, ensure that the first element is a sub-Package. If not,
> +         * First, ensure that the first element is a subpackage. If not,
>            * the BIOS may have incorrectly returned the object as a single
>            * package instead of a Package of Packages (a common error if
>            * there is only one entry). We may be able to repair this by
> @@ -388,7 +388,7 @@ AcpiNsCheckPackage (
>               Count = 1;
>           }
>
> -        /* Examine the sub-packages */
> +        /* Examine the subpackages */
>
>           Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
>           break;
> @@ -451,9 +451,9 @@ AcpiNsCheckPackageList (
>
>
>       /*
> -     * Validate each sub-Package in the parent Package
> +     * Validate each subpackage in the parent Package
>        *
> -     * NOTE: assumes list of sub-packages contains no NULL elements.
> +     * NOTE: assumes list of subpackages contains no NULL elements.
>        * Any NULL elements should have been removed by earlier call
>        * to AcpiNsRemoveNullElements.
>        */
> @@ -472,7 +472,7 @@ AcpiNsCheckPackageList (
>               return (Status);
>           }
>
> -        /* Examine the different types of expected sub-packages */
> +        /* Examine the different types of expected subpackages */
>
>           Info->ParentPackage = SubPackage;
>           switch (Package->RetInfo.Type)
> @@ -524,7 +524,7 @@ AcpiNsCheckPackageList (
>
>           case ACPI_PTYPE2_FIXED:
>
> -            /* Each sub-package has a fixed length */
> +            /* Each subpackage has a fixed length */
>
>               ExpectedCount = Package->RetInfo2.Count;
>               if (SubPackage->Package.Count < ExpectedCount)
> @@ -532,7 +532,7 @@ AcpiNsCheckPackageList (
>                   goto PackageTooSmall;
>               }
>
> -            /* Check the type of each sub-package element */
> +            /* Check the type of each subpackage element */
>
>               for (j = 0; j < ExpectedCount; j++)
>               {
> @@ -547,7 +547,7 @@ AcpiNsCheckPackageList (
>
>           case ACPI_PTYPE2_MIN:
>
> -            /* Each sub-package has a variable but minimum length */
> +            /* Each subpackage has a variable but minimum length */
>
>               ExpectedCount = Package->RetInfo.Count1;
>               if (SubPackage->Package.Count < ExpectedCount)
> @@ -555,7 +555,7 @@ AcpiNsCheckPackageList (
>                   goto PackageTooSmall;
>               }
>
> -            /* Check the type of each sub-package element */
> +            /* Check the type of each subpackage element */
>
>               Status = AcpiNsCheckPackageElements (Info, SubElements,
>                           Package->RetInfo.ObjectType1,
> @@ -604,7 +604,7 @@ AcpiNsCheckPackageList (
>                   (*SubElements)->Integer.Value = ExpectedCount;
>               }
>
> -            /* Check the type of each sub-package element */
> +            /* Check the type of each subpackage element */
>
>               Status = AcpiNsCheckPackageElements (Info, (SubElements + 1),
>                           Package->RetInfo.ObjectType1,
> @@ -628,10 +628,10 @@ AcpiNsCheckPackageList (
>
>   PackageTooSmall:
>
> -    /* The sub-package count was smaller than required */
> +    /* The subpackage count was smaller than required */
>
>       ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
> -        "Return Sub-Package[%u] is too small - found %u elements, expected %u",
> +        "Return SubPackage[%u] is too small - found %u elements, expected %u",
>           i, SubPackage->Package.Count, ExpectedCount));
>
>       return (AE_AML_OPERAND_VALUE);
> diff --git a/src/acpica/source/components/namespace/nsrepair.c b/src/acpica/source/components/namespace/nsrepair.c
> index 6cf826e..11a43b1 100644
> --- a/src/acpica/source/components/namespace/nsrepair.c
> +++ b/src/acpica/source/components/namespace/nsrepair.c
> @@ -284,14 +284,29 @@ AcpiNsSimpleRepair (
>        * this predefined name. Either one return value is expected, or none,
>        * for both methods and other objects.
>        *
> -     * Exit now if there is no return object. Warning if one was expected.
> +     * Try to fix if there was no return object. Warning if failed to fix.
>        */
>       if (!ReturnObject)
>       {
>           if (ExpectedBtypes && (!(ExpectedBtypes & ACPI_RTYPE_NONE)))
>           {
> -            ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname,
> -                ACPI_WARN_ALWAYS, "Missing expected return value"));
> +            if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT)
> +            {
> +                ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname,
> +                    ACPI_WARN_ALWAYS, "Found unexpected NULL package element"));
> +
> +                Status = AcpiNsRepairNullElement (Info, ExpectedBtypes,
> +                            PackageIndex, ReturnObjectPtr);
> +                if (ACPI_SUCCESS (Status))
> +                {
> +                    return (AE_OK); /* Repair was successful */
> +                }
> +            }
> +            else
> +            {
> +                ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname,
> +                    ACPI_WARN_ALWAYS, "Missing expected return value"));
> +            }
>
>               return (AE_AML_NO_RETURN_VALUE);
>           }
> @@ -546,7 +561,7 @@ AcpiNsRepairNullElement (
>    * RETURN:      None.
>    *
>    * DESCRIPTION: Remove all NULL package elements from packages that contain
> - *              a variable number of sub-packages. For these types of
> + *              a variable number of subpackages. For these types of
>    *              packages, NULL elements can be safely removed.
>    *
>    *****************************************************************************/
> @@ -570,7 +585,7 @@ AcpiNsRemoveNullElements (
>       /*
>        * We can safely remove all NULL elements from these package types:
>        * PTYPE1_VAR packages contain a variable number of simple data types.
> -     * PTYPE2 packages contain a variable number of sub-packages.
> +     * PTYPE2 packages contain a variable number of subpackages.
>        */
>       switch (PackageType)
>       {
> diff --git a/src/acpica/source/components/namespace/nsrepair2.c b/src/acpica/source/components/namespace/nsrepair2.c
> index 5fee88a..ea7c0be 100644
> --- a/src/acpica/source/components/namespace/nsrepair2.c
> +++ b/src/acpica/source/components/namespace/nsrepair2.c
> @@ -550,8 +550,8 @@ AcpiNsRepair_CID (
>    * DESCRIPTION: Repair for the _CST object:
>    *              1. Sort the list ascending by C state type
>    *              2. Ensure type cannot be zero
> - *              3. A sub-package count of zero means _CST is meaningless
> - *              4. Count must match the number of C state sub-packages
> + *              3. A subpackage count of zero means _CST is meaningless
> + *              4. Count must match the number of C state subpackages
>    *
>    *****************************************************************************/
>
> @@ -744,6 +744,7 @@ AcpiNsRepair_PRT (
>       ACPI_OPERAND_OBJECT     **TopObjectList;
>       ACPI_OPERAND_OBJECT     **SubObjectList;
>       ACPI_OPERAND_OBJECT     *ObjDesc;
> +    ACPI_OPERAND_OBJECT     *SubPackage;
>       UINT32                  ElementCount;
>       UINT32                  Index;
>
> @@ -753,9 +754,19 @@ AcpiNsRepair_PRT (
>       TopObjectList = PackageObject->Package.Elements;
>       ElementCount = PackageObject->Package.Count;
>
> -    for (Index = 0; Index < ElementCount; Index++)
> +    /* Examine each subpackage */
> +
> +    for (Index = 0; Index < ElementCount; Index++, TopObjectList++)
>       {
> -        SubObjectList = (*TopObjectList)->Package.Elements;
> +        SubPackage = *TopObjectList;
> +        SubObjectList = SubPackage->Package.Elements;
> +
> +        /* Check for minimum required element count */
> +
> +        if (SubPackage->Package.Count < 4)
> +        {
> +            continue;
> +        }
>
>           /*
>            * If the BIOS has erroneously reversed the _PRT SourceName (index 2)
> @@ -770,14 +781,11 @@ AcpiNsRepair_PRT (
>               SubObjectList[2] = ObjDesc;
>               Info->ReturnFlags |= ACPI_OBJECT_REPAIRED;
>
> -            ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
> +            ACPI_WARN_PREDEFINED ((AE_INFO,
> +                Info->FullPathname, Info->NodeFlags,
>                   "PRT[%X]: Fixed reversed SourceName and SourceIndex",
>                   Index));
>           }
> -
> -        /* Point to the next ACPI_OPERAND_OBJECT in the top level package */
> -
> -        TopObjectList++;
>       }
>
>       return (AE_OK);
> @@ -817,7 +825,7 @@ AcpiNsRepair_PSS (
>
>
>       /*
> -     * Entries (sub-packages) in the _PSS Package must be sorted by power
> +     * Entries (subpackages) in the _PSS Package must be sorted by power
>        * dissipation, in descending order. If it appears that the list is
>        * incorrectly sorted, sort it. We sort by CpuFrequency, since this
>        * should be proportional to the power.
> @@ -910,9 +918,9 @@ AcpiNsRepair_TSS (
>    *
>    * PARAMETERS:  Info                - Method execution information block
>    *              ReturnObject        - Pointer to the top-level returned object
> - *              StartIndex          - Index of the first sub-package
> - *              ExpectedCount       - Minimum length of each sub-package
> - *              SortIndex           - Sub-package entry to sort on
> + *              StartIndex          - Index of the first subpackage
> + *              ExpectedCount       - Minimum length of each subpackage
> + *              SortIndex           - Subpackage entry to sort on
>    *              SortDirection       - Ascending or descending
>    *              SortKeyName         - Name of the SortIndex field
>    *
> @@ -953,7 +961,7 @@ AcpiNsCheckSortedList (
>       }
>
>       /*
> -     * NOTE: assumes list of sub-packages contains no NULL elements.
> +     * NOTE: assumes list of subpackages contains no NULL elements.
>        * Any NULL elements should have been removed by earlier call
>        * to AcpiNsRemoveNullElements.
>        */
> @@ -983,7 +991,7 @@ AcpiNsCheckSortedList (
>               return (AE_AML_OPERAND_TYPE);
>           }
>
> -        /* Each sub-package must have the minimum length */
> +        /* Each subpackage must have the minimum length */
>
>           if ((*OuterElements)->Package.Count < ExpectedCount)
>           {
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index 83b4b65..ec7db25 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -561,6 +561,11 @@ AcpiPsParseLoop (
>                       Status = AE_OK;
>                   }
>
> +                if (Status == AE_CTRL_TERMINATE)
> +                {
> +                    return_ACPI_STATUS (Status);
> +                }
> +
>                   Status = AcpiPsCompleteOp (WalkState, &Op, Status);
>                   if (ACPI_FAILURE (Status))
>                   {
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index 39d0ed3..f4ecc33 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -301,7 +301,10 @@ AcpiPsBuildNamedOp (
>       Status = WalkState->DescendingCallback (WalkState, Op);
>       if (ACPI_FAILURE (Status))
>       {
> -        ACPI_EXCEPTION ((AE_INFO, Status, "During name lookup/catalog"));
> +        if (Status != AE_CTRL_TERMINATE)
> +        {
> +            ACPI_EXCEPTION ((AE_INFO, Status, "During name lookup/catalog"));
> +        }
>           return_ACPI_STATUS (Status);
>       }
>
> @@ -315,7 +318,7 @@ AcpiPsBuildNamedOp (
>       {
>           if (Status == AE_CTRL_PENDING)
>           {
> -            return_ACPI_STATUS (AE_CTRL_PARSE_PENDING);
> +            Status = AE_CTRL_PARSE_PENDING;
>           }
>           return_ACPI_STATUS (Status);
>       }
> diff --git a/src/acpica/source/components/resources/rscalc.c b/src/acpica/source/components/resources/rscalc.c
> index 0e2434b..b2742ae 100644
> --- a/src/acpica/source/components/resources/rscalc.c
> +++ b/src/acpica/source/components/resources/rscalc.c
> @@ -731,7 +731,7 @@ AcpiRsGetPciRoutingTableLength (
>
>       for (Index = 0; Index < NumberOfElements; Index++)
>       {
> -        /* Dereference the sub-package */
> +        /* Dereference the subpackage */
>
>           PackageElement = *TopObjectList;
>
> diff --git a/src/acpica/source/components/resources/rscreate.c b/src/acpica/source/components/resources/rscreate.c
> index c86a5d0..7c23893 100644
> --- a/src/acpica/source/components/resources/rscreate.c
> +++ b/src/acpica/source/components/resources/rscreate.c
> @@ -369,7 +369,7 @@ AcpiRsCreatePciRoutingTable (
>            */
>           UserPrt->Length = (sizeof (ACPI_PCI_ROUTING_TABLE) - 4);
>
> -        /* Each sub-package must be of length 4 */
> +        /* Each subpackage must be of length 4 */
>
>           if ((*TopObjectList)->Package.Count != 4)
>           {
> @@ -380,7 +380,7 @@ AcpiRsCreatePciRoutingTable (
>           }
>
>           /*
> -         * Dereference the sub-package.
> +         * Dereference the subpackage.
>            * The SubObjectList will now point to an array of the four IRQ
>            * elements: [Address, Pin, Source, SourceIndex]
>            */
> @@ -389,7 +389,7 @@ AcpiRsCreatePciRoutingTable (
>           /* 1) First subobject: Dereference the PRT.Address */
>
>           ObjDesc = SubObjectList[0];
> -        if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)
> +        if (!ObjDesc || ObjDesc->Common.Type != ACPI_TYPE_INTEGER)
>           {
>               ACPI_ERROR ((AE_INFO, "(PRT[%u].Address) Need Integer, found %s",
>                   Index, AcpiUtGetObjectTypeName (ObjDesc)));
> @@ -401,7 +401,7 @@ AcpiRsCreatePciRoutingTable (
>           /* 2) Second subobject: Dereference the PRT.Pin */
>
>           ObjDesc = SubObjectList[1];
> -        if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)
> +        if (!ObjDesc || ObjDesc->Common.Type != ACPI_TYPE_INTEGER)
>           {
>               ACPI_ERROR ((AE_INFO, "(PRT[%u].Pin) Need Integer, found %s",
>                   Index, AcpiUtGetObjectTypeName (ObjDesc)));
> @@ -482,7 +482,7 @@ AcpiRsCreatePciRoutingTable (
>           /* 4) Fourth subobject: Dereference the PRT.SourceIndex */
>
>           ObjDesc = SubObjectList[3];
> -        if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)
> +        if (!ObjDesc || ObjDesc->Common.Type != ACPI_TYPE_INTEGER)
>           {
>               ACPI_ERROR ((AE_INFO,
>                   "(PRT[%u].SourceIndex) Need Integer, found %s",
> diff --git a/src/acpica/source/components/resources/rsdump.c b/src/acpica/source/components/resources/rsdump.c
> index e1ae1d6..ae295fa 100644
> --- a/src/acpica/source/components/resources/rsdump.c
> +++ b/src/acpica/source/components/resources/rsdump.c
> @@ -124,7 +124,7 @@
>           ACPI_MODULE_NAME    ("rsdump")
>
>
> -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
> +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUGGER)
>
>   /* Local prototypes */
>
> diff --git a/src/acpica/source/components/resources/rsdumpinfo.c b/src/acpica/source/components/resources/rsdumpinfo.c
> index 34f83f5..2aef0e5 100644
> --- a/src/acpica/source/components/resources/rsdumpinfo.c
> +++ b/src/acpica/source/components/resources/rsdumpinfo.c
> @@ -124,7 +124,7 @@
>           ACPI_MODULE_NAME    ("rsdumpinfo")
>
>
> -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
> +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUGGER)
>
>
>   #define ACPI_RSD_OFFSET(f)          (UINT8) ACPI_OFFSET (ACPI_RESOURCE_DATA,f)
> diff --git a/src/acpica/source/components/resources/rsinfo.c b/src/acpica/source/components/resources/rsinfo.c
> index 3e2fa5b..05f02a8 100644
> --- a/src/acpica/source/components/resources/rsinfo.c
> +++ b/src/acpica/source/components/resources/rsinfo.c
> @@ -213,7 +213,7 @@ ACPI_RSCONVERT_INFO         *AcpiGbl_ConvertResourceSerialBusDispatch[] =
>   };
>
>
> -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
> +#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUGGER)
>
>   /* Dispatch table for resource dump functions */
>
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 47c97a7..d42d8a7 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -158,6 +158,7 @@ AcpiUtDeleteInternalObj (
>       ACPI_OPERAND_OBJECT     *HandlerDesc;
>       ACPI_OPERAND_OBJECT     *SecondDesc;
>       ACPI_OPERAND_OBJECT     *NextDesc;
> +    ACPI_OPERAND_OBJECT     *StartDesc;
>       ACPI_OPERAND_OBJECT     **LastObjPtr;
>
>
> @@ -322,9 +323,10 @@ AcpiUtDeleteInternalObj (
>               if (HandlerDesc)
>               {
>                   NextDesc = HandlerDesc->AddressSpace.RegionList;
> +                StartDesc = NextDesc;
>                   LastObjPtr = &HandlerDesc->AddressSpace.RegionList;
>
> -                /* Remove the region object from the handler's list */
> +                /* Remove the region object from the handler list */
>
>                   while (NextDesc)
>                   {
> @@ -334,10 +336,20 @@ AcpiUtDeleteInternalObj (
>                           break;
>                       }
>
> -                    /* Walk the linked list of handler */
> +                    /* Walk the linked list of handlers */
>
>                       LastObjPtr = &NextDesc->Region.Next;
>                       NextDesc = NextDesc->Region.Next;
> +
> +                    /* Prevent infinite loop if list is corrupted */
> +
> +                    if (NextDesc == StartDesc)
> +                    {
> +                        ACPI_ERROR ((AE_INFO,
> +                            "Circular region list in address handler object %p",
> +                            HandlerDesc));
> +                        return_VOID;
> +                    }
>                   }
>
>                   if (HandlerDesc->AddressSpace.HandlerFlags &
> diff --git a/src/acpica/source/components/utilities/utglobal.c b/src/acpica/source/components/utilities/utglobal.c
> index c9575cf..77294c4 100644
> --- a/src/acpica/source/components/utilities/utglobal.c
> +++ b/src/acpica/source/components/utilities/utglobal.c
> @@ -130,12 +130,7 @@
>    *
>    ******************************************************************************/
>
> -/*
> - * We want the debug switches statically initialized so they
> - * are already set when the debugger is entered.
> - */
> -
> -/* Debug switch - level and trace mask */
> +/* Debug output control masks */
>
>   #ifdef ACPI_DEBUG_OUTPUT
>   UINT32                      AcpiDbgLevel = ACPI_DEBUG_DEFAULT;
> @@ -143,24 +138,24 @@ UINT32                      AcpiDbgLevel = ACPI_DEBUG_DEFAULT;
>   UINT32                      AcpiDbgLevel = ACPI_NORMAL_DEFAULT;
>   #endif
>
> -/* Debug switch - layer (component) mask */
> -
>   UINT32                      AcpiDbgLayer = ACPI_COMPONENT_DEFAULT;
> -UINT32                      AcpiGbl_NestingLevel = 0;
> -
> -/* Debugger globals */
> -
> -BOOLEAN                     AcpiGbl_DbTerminateThreads = FALSE;
> -BOOLEAN                     AcpiGbl_AbortMethod = FALSE;
> -BOOLEAN                     AcpiGbl_MethodExecuting = FALSE;
>
> -/* System flags */
> +/* AcpiGbl_FADT is a local copy of the FADT, converted to a common format. */
>
> -UINT32                      AcpiGbl_StartupFlags = 0;
> +ACPI_TABLE_FADT             AcpiGbl_FADT;
> +UINT32                      AcpiGbl_TraceFlags;
> +ACPI_NAME                   AcpiGbl_TraceMethodName;
> +BOOLEAN                     AcpiGbl_SystemAwakeAndRunning;
> +UINT32                      AcpiCurrentGpeCount;
>
> -/* System starts uninitialized */
> +/*
> + * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning
> + * that the ACPI hardware is no longer required. A flag in the FADT indicates
> + * a reduced HW machine, and that flag is duplicated here for convenience.
> + */
> +BOOLEAN                     AcpiGbl_ReducedHardware;
>
> -BOOLEAN                     AcpiGbl_Shutdown = TRUE;
> +/* Various state name strings */
>
>   const char                  *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] =
>   {
> @@ -381,7 +376,6 @@ AcpiUtInitGlobals (
>
>       AcpiGbl_DSDT                        = NULL;
>       AcpiGbl_CmSingleStep                = FALSE;
> -    AcpiGbl_DbTerminateThreads          = FALSE;
>       AcpiGbl_Shutdown                    = FALSE;
>       AcpiGbl_NsLookupCount               = 0;
>       AcpiGbl_PsFindCount                 = 0;
> @@ -429,6 +423,10 @@ AcpiUtInitGlobals (
>       AcpiGbl_DisableMemTracking          = FALSE;
>   #endif
>
> +#ifdef ACPI_DEBUGGER
> +    AcpiGbl_DbTerminateThreads          = FALSE;
> +#endif
> +
>       return_ACPI_STATUS (AE_OK);
>   }
>
> diff --git a/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c
> index adcda25..a001d06 100644
> --- a/src/acpica/source/components/utilities/utosi.c
> +++ b/src/acpica/source/components/utilities/utosi.c
> @@ -122,6 +122,34 @@
>   #define _COMPONENT          ACPI_UTILITIES
>           ACPI_MODULE_NAME    ("utosi")
>
> +
> +/******************************************************************************
> + *
> + * ACPICA policy for new _OSI strings:
> + *
> + * It is the stated policy of ACPICA that new _OSI strings will be integrated
> + * into this module as soon as possible after they are defined. It is strongly
> + * recommended that all ACPICA hosts mirror this policy and integrate any
> + * changes to this module as soon as possible. There are several historical
> + * reasons behind this policy:
> + *
> + * 1) New BIOSs tend to test only the case where the host responds TRUE to
> + *    the latest version of Windows, which would respond to the latest/newest
> + *    _OSI string. Not responding TRUE to the latest version of Windows will
> + *    risk executing untested code paths throughout the DSDT and SSDTs.
> + *
> + * 2) If a new _OSI string is recognized only after a significant delay, this
> + *    has the potential to cause problems on existing working machines because
> + *    of the possibility that a new and different path through the ASL code
> + *    will be executed.
> + *
> + * 3) New _OSI strings are tending to come out about once per year. A delay
> + *    in recognizing a new string for a significant amount of time risks the
> + *    release of another string which only compounds the initial problem.
> + *
> + *****************************************************************************/
> +
> +
>   /*
>    * Strings supported by the _OSI predefined control method (which is
>    * implemented internally within this module.)
> @@ -150,6 +178,7 @@ static ACPI_INTERFACE_INFO    AcpiDefaultSupportedInterfaces[] =
>       {"Windows 2006 SP2",    NULL, 0, ACPI_OSI_WIN_VISTA_SP2},    /* Windows Vista SP2 - Added 09/2010 */
>       {"Windows 2009",        NULL, 0, ACPI_OSI_WIN_7},            /* Windows 7 and Server 2008 R2 - Added 09/2009 */
>       {"Windows 2012",        NULL, 0, ACPI_OSI_WIN_8},            /* Windows 8 and Server 2012 - Added 08/2012 */
> +    {"Windows 2013",        NULL, 0, ACPI_OSI_WIN_8},            /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */
>
>       /* Feature Group Strings */
>
> diff --git a/src/acpica/source/include/acapps.h b/src/acpica/source/include/acapps.h
> index 3608d69..cd36274 100644
> --- a/src/acpica/source/include/acapps.h
> +++ b/src/acpica/source/include/acapps.h
> @@ -117,6 +117,8 @@
>   #define _ACAPPS
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   #ifdef _MSC_VER                 /* disable some level-4 warnings */
>   #pragma warning(disable:4100)   /* warning C4100: unreferenced formal parameter */
>   #endif
> @@ -195,8 +197,7 @@ AdAmlDisassemble (
>       BOOLEAN                 OutToFile,
>       char                    *Filename,
>       char                    *Prefix,
> -    char                    **OutFilename,
> -    BOOLEAN                 GetAllTables);
> +    char                    **OutFilename);
>
>   void
>   AdPrintStatistics (
> @@ -213,8 +214,7 @@ AdDumpTables (
>
>   ACPI_STATUS
>   AdGetLocalTables (
> -    char                    *Filename,
> -    BOOLEAN                 GetAllTables);
> +    void);
>
>   ACPI_STATUS
>   AdParseTable (
> @@ -293,4 +293,6 @@ AdWriteTable (
>       char                    *OemTableId);
>   #endif
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* _ACAPPS */
> diff --git a/src/acpica/source/include/acbuffer.h b/src/acpica/source/include/acbuffer.h
> index 3228bca..d6163f3 100644
> --- a/src/acpica/source/include/acbuffer.h
> +++ b/src/acpica/source/include/acbuffer.h
> @@ -116,6 +116,9 @@
>   #ifndef __ACBUFFER_H__
>   #define __ACBUFFER_H__
>
> +
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * Contains buffer structures for these predefined names:
>    * _FDE, _GRT, _GTM, _PLD, _SRT
> @@ -315,4 +318,6 @@ typedef struct acpi_pld_info
>   #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value)  ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value)   /* Offset 128+16=144, Len 16 */
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* ACBUFFER_H */
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index 6b34484..b57526a 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -117,6 +117,8 @@
>   #define _ACCONFIG_H
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /******************************************************************************
>    *
>    * Configuration options
> @@ -306,4 +308,6 @@
>   #define ACPI_DEBUGGER_EXECUTE_PROMPT    '%'
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* _ACCONFIG_H */
> diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h
> index 1807c31..824bf2a 100644
> --- a/src/acpica/source/include/acdebug.h
> +++ b/src/acpica/source/include/acdebug.h
> @@ -117,6 +117,8 @@
>   #define __ACDEBUG_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   #define ACPI_DEBUG_BUFFER_SIZE  0x4000      /* 16K buffer for return objects */
>
>   typedef struct acpi_db_command_info
> @@ -538,4 +540,6 @@ AcpiDbUint32ToHexString (
>       UINT32                  Value,
>       char                    *Buffer);
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif  /* __ACDEBUG_H__ */
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 3a38dad..9814e21 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -119,6 +119,8 @@
>   #include "amlresrc.h"
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   #define BLOCK_NONE              0
>   #define BLOCK_PAREN             1
>   #define BLOCK_BRACE             2
> @@ -1001,4 +1003,6 @@ AdDisassemblerHeader (
>       char                    *Filename);
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif  /* __ACDISASM_H__ */
> diff --git a/src/acpica/source/include/acdispat.h b/src/acpica/source/include/acdispat.h
> index ed7d22c..f3fac95 100644
> --- a/src/acpica/source/include/acdispat.h
> +++ b/src/acpica/source/include/acdispat.h
> @@ -118,6 +118,8 @@
>   #define _ACDISPAT_H_
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   #define NAMEOF_LOCAL_NTE    "__L0"
>   #define NAMEOF_ARG_NTE      "__A0"
>
> @@ -245,13 +247,15 @@ AcpiDsInitFieldObjects (
>
>
>   /*
> - * dsload - Parser/Interpreter interface, pass 1 namespace load callbacks
> + * dsload - Parser/Interpreter interface
>    */
>   ACPI_STATUS
>   AcpiDsInitCallbacks (
>       ACPI_WALK_STATE         *WalkState,
>       UINT32                  PassNumber);
>
> +/* dsload - pass 1 namespace load callbacks */
> +
>   ACPI_STATUS
>   AcpiDsLoad1BeginOp (
>       ACPI_WALK_STATE         *WalkState,
> @@ -262,9 +266,8 @@ AcpiDsLoad1EndOp (
>       ACPI_WALK_STATE         *WalkState);
>
>
> -/*
> - * dsload - Parser/Interpreter interface, pass 2 namespace load callbacks
> - */
> +/* dsload - pass 2 namespace load callbacks */
> +
>   ACPI_STATUS
>   AcpiDsLoad2BeginOp (
>       ACPI_WALK_STATE         *WalkState,
> @@ -329,8 +332,9 @@ AcpiDsMethodDataInit (
>    * dsmethod - Parser/Interpreter interface - control method parsing
>    */
>   ACPI_STATUS
> -AcpiDsParseMethod (
> -    ACPI_NAMESPACE_NODE     *Node);
> +AcpiDsAutoSerializeMethod (
> +    ACPI_NAMESPACE_NODE     *Node,
> +    ACPI_OPERAND_OBJECT     *ObjDesc);
>
>   ACPI_STATUS
>   AcpiDsCallControlMethod (
> @@ -532,4 +536,6 @@ AcpiDsResultPush (
>       ACPI_OPERAND_OBJECT     *Object,
>       ACPI_WALK_STATE         *WalkState);
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* _ACDISPAT_H_ */
> diff --git a/src/acpica/source/include/acevents.h b/src/acpica/source/include/acevents.h
> index 731defb..f895ccb 100644
> --- a/src/acpica/source/include/acevents.h
> +++ b/src/acpica/source/include/acevents.h
> @@ -117,6 +117,8 @@
>   #define __ACEVENTS_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * evevent
>    */
> @@ -428,4 +430,6 @@ void
>   AcpiEvTerminate (
>       void))
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif  /* __ACEVENTS_H__  */
> diff --git a/src/acpica/source/include/acexcep.h b/src/acpica/source/include/acexcep.h
> index 89d9852..807f4e3 100644
> --- a/src/acpica/source/include/acexcep.h
> +++ b/src/acpica/source/include/acexcep.h
> @@ -117,6 +117,8 @@
>   #define __ACEXCEP_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* This module contains all possible exception codes for ACPI_STATUS */
>
>   /*
> @@ -417,4 +419,6 @@ static const ACPI_EXCEPTION_INFO    AcpiGbl_ExceptionNames_Ctrl[] =
>
>   #endif /* EXCEPTION_TABLE */
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACEXCEP_H__ */
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index 747fe59..8ecdf04 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -117,6 +117,8 @@
>   #define __ACGLOBAL_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * Ensure that the globals are actually defined and initialized only once.
>    *
> @@ -124,11 +126,19 @@
>    * to simplify maintenance of the code.
>    */
>   #ifdef DEFINE_ACPI_GLOBALS
> -#define ACPI_EXTERN
> -#define ACPI_INIT_GLOBAL(a,b) a=b
> +#define ACPI_GLOBAL(type,name) \
> +    extern type name; \
> +    type name
> +
> +#define ACPI_INIT_GLOBAL(type,name,value) \
> +    type name=value
> +
>   #else
> -#define ACPI_EXTERN extern
> -#define ACPI_INIT_GLOBAL(a,b) a
> +#define ACPI_GLOBAL(type,name) \
> +    extern type name
> +
> +#define ACPI_INIT_GLOBAL(type,name,value) \
> +    extern type name
>   #endif
>
>
> @@ -156,33 +166,34 @@
>    * 5) Allow unresolved references (invalid target name) in package objects
>    * 6) Enable warning messages for behavior that is not ACPI spec compliant
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_EnableInterpreterSlack, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_EnableInterpreterSlack, FALSE);
>
>   /*
> - * Automatically serialize ALL control methods? Default is FALSE, meaning
> - * to use the Serialized/NotSerialized method flags on a per method basis.
> - * Only change this if the ASL code is poorly written and cannot handle
> - * reentrancy even though methods are marked "NotSerialized".
> + * Automatically serialize all methods that create named objects? Default
> + * is TRUE, meaning that all NonSerialized methods are scanned once at
> + * table load time to determine those that create named objects. Methods
> + * that create named objects are marked Serialized in order to prevent
> + * possible run-time problems if they are entered by more than one thread.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_AllMethodsSerialized, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_AutoSerializeMethods, TRUE);
>
>   /*
>    * Create the predefined _OSI method in the namespace? Default is TRUE
>    * because ACPI CA is fully compatible with other ACPI implementations.
>    * Changing this will revert ACPI CA (and machine ASL) to pre-OSI behavior.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_CreateOsiMethod, TRUE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_CreateOsiMethod, TRUE);
>
>   /*
>    * Optionally use default values for the ACPI register widths. Set this to
>    * TRUE to use the defaults, if an FADT contains incorrect widths/lengths.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_UseDefaultRegisterWidths, TRUE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_UseDefaultRegisterWidths, TRUE);
>
>   /*
>    * Optionally enable output from the AML Debug Object.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_EnableAmlDebugObject, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_EnableAmlDebugObject, FALSE);
>
>   /*
>    * Optionally copy the entire DSDT to local memory (instead of simply
> @@ -190,7 +201,7 @@ UINT8       ACPI_INIT_GLOBAL (AcpiGbl_EnableAmlDebugObject, FALSE);
>    * DSDT, creating the need for this option. Default is FALSE, do not copy
>    * the DSDT.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_CopyDsdtLocally, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_CopyDsdtLocally, FALSE);
>
>   /*
>    * Optionally ignore an XSDT if present and use the RSDT instead.
> @@ -198,8 +209,7 @@ UINT8       ACPI_INIT_GLOBAL (AcpiGbl_CopyDsdtLocally, FALSE);
>    * of the RSDT, the XSDT has been found to be corrupt or ill-formed on
>    * some machines. Default behavior is to use the XSDT if present.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_DoNotUseXsdt, FALSE);
> -
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_DoNotUseXsdt, FALSE);
>
>   /*
>    * Optionally use 32-bit FADT addresses if and when there is a conflict
> @@ -209,7 +219,7 @@ UINT8       ACPI_INIT_GLOBAL (AcpiGbl_DoNotUseXsdt, FALSE);
>    * some machines have been found to have a corrupted non-zero 64-bit
>    * address. Default is FALSE, do not favor the 32-bit addresses.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_Use32BitFadtAddresses, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_Use32BitFadtAddresses, FALSE);
>
>   /*
>    * Optionally truncate I/O addresses to 16 bits. Provides compatibility
> @@ -217,47 +227,28 @@ UINT8       ACPI_INIT_GLOBAL (AcpiGbl_Use32BitFadtAddresses, FALSE);
>    * this value is set to TRUE if any Windows OSI strings have been
>    * requested by the BIOS.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_TruncateIoAddresses, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_TruncateIoAddresses, FALSE);
>
>   /*
>    * Disable runtime checking and repair of values returned by control methods.
>    * Use only if the repair is causing a problem on a particular machine.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_DisableAutoRepair, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_DisableAutoRepair, FALSE);
>
>   /*
>    * Optionally do not load any SSDTs from the RSDT/XSDT during initialization.
>    * This can be useful for debugging ACPI problems on some machines.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_DisableSsdtTableLoad, FALSE);
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_DisableSsdtTableLoad, FALSE);
>
>   /*
>    * We keep track of the latest version of Windows that has been requested by
>    * the BIOS.
>    */
> -UINT8       ACPI_INIT_GLOBAL (AcpiGbl_OsiData, 0);
> -
> -
> -/* AcpiGbl_FADT is a local copy of the FADT, converted to a common format. */
> -
> -ACPI_TABLE_FADT             AcpiGbl_FADT;
> -UINT32                      AcpiCurrentGpeCount;
> -UINT32                      AcpiGbl_TraceFlags;
> -ACPI_NAME                   AcpiGbl_TraceMethodName;
> -BOOLEAN                     AcpiGbl_SystemAwakeAndRunning;
> -
> -/*
> - * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning
> - * that the ACPI hardware is no longer required. A flag in the FADT indicates
> - * a reduced HW machine, and that flag is duplicated here for convenience.
> - */
> -BOOLEAN                     AcpiGbl_ReducedHardware;
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_OsiData, 0);
>
>   #endif /* DEFINE_ACPI_GLOBALS */
>
> -/* Do not disassemble buffers to resource descriptors */
> -
> -ACPI_EXTERN UINT8       ACPI_INIT_GLOBAL (AcpiGbl_NoResourceDisassembly, FALSE);
>
>   /*****************************************************************************
>    *
> @@ -266,37 +257,36 @@ ACPI_EXTERN UINT8       ACPI_INIT_GLOBAL (AcpiGbl_NoResourceDisassembly, FALSE);
>    ****************************************************************************/
>
>   /*
> - * AcpiGbl_RootTableList is the master list of ACPI tables that were
> - * found in the RSDT/XSDT.
> + * Master list of all ACPI tables that were found in the RSDT/XSDT.
>    */
> -ACPI_EXTERN ACPI_TABLE_LIST             AcpiGbl_RootTableList;
> +ACPI_GLOBAL (ACPI_TABLE_LIST,           AcpiGbl_RootTableList);
> +
> +/* DSDT information. Used to check for DSDT corruption */
> +
> +ACPI_GLOBAL (ACPI_TABLE_HEADER *,       AcpiGbl_DSDT);
> +ACPI_GLOBAL (ACPI_TABLE_HEADER,         AcpiGbl_OriginalDsdtHeader);
>
>   #if (!ACPI_REDUCED_HARDWARE)
> -ACPI_EXTERN ACPI_TABLE_FACS            *AcpiGbl_FACS;
> +ACPI_GLOBAL (ACPI_TABLE_FACS *,         AcpiGbl_FACS);
>
>   #endif /* !ACPI_REDUCED_HARDWARE */
>
>   /* These addresses are calculated from the FADT Event Block addresses */
>
> -ACPI_EXTERN ACPI_GENERIC_ADDRESS        AcpiGbl_XPm1aStatus;
> -ACPI_EXTERN ACPI_GENERIC_ADDRESS        AcpiGbl_XPm1aEnable;
> +ACPI_GLOBAL (ACPI_GENERIC_ADDRESS,      AcpiGbl_XPm1aStatus);
> +ACPI_GLOBAL (ACPI_GENERIC_ADDRESS,      AcpiGbl_XPm1aEnable);
>
> -ACPI_EXTERN ACPI_GENERIC_ADDRESS        AcpiGbl_XPm1bStatus;
> -ACPI_EXTERN ACPI_GENERIC_ADDRESS        AcpiGbl_XPm1bEnable;
> -
> -/* DSDT information. Used to check for DSDT corruption */
> -
> -ACPI_EXTERN ACPI_TABLE_HEADER          *AcpiGbl_DSDT;
> -ACPI_EXTERN ACPI_TABLE_HEADER           AcpiGbl_OriginalDsdtHeader;
> +ACPI_GLOBAL (ACPI_GENERIC_ADDRESS,      AcpiGbl_XPm1bStatus);
> +ACPI_GLOBAL (ACPI_GENERIC_ADDRESS,      AcpiGbl_XPm1bEnable);
>
>   /*
> - * Handle both ACPI 1.0 and ACPI 2.0 Integer widths. The integer width is
> + * Handle both ACPI 1.0 and ACPI 2.0+ Integer widths. The integer width is
>    * determined by the revision of the DSDT: If the DSDT revision is less than
>    * 2, use only the lower 32 bits of the internal 64-bit Integer.
>    */
> -ACPI_EXTERN UINT8                       AcpiGbl_IntegerBitWidth;
> -ACPI_EXTERN UINT8                       AcpiGbl_IntegerByteWidth;
> -ACPI_EXTERN UINT8                       AcpiGbl_IntegerNybbleWidth;
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_IntegerBitWidth);
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_IntegerByteWidth);
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_IntegerNybbleWidth);
>
>
>   /*****************************************************************************
> @@ -310,36 +300,36 @@ ACPI_EXTERN UINT8                       AcpiGbl_IntegerNybbleWidth;
>    * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
>    * (The table maps local handles to the real OS handles)
>    */
> -ACPI_EXTERN ACPI_MUTEX_INFO             AcpiGbl_MutexInfo[ACPI_NUM_MUTEX];
> +ACPI_GLOBAL (ACPI_MUTEX_INFO,           AcpiGbl_MutexInfo[ACPI_NUM_MUTEX]);
>
>   /*
>    * Global lock mutex is an actual AML mutex object
>    * Global lock semaphore works in conjunction with the actual global lock
>    * Global lock spinlock is used for "pending" handshake
>    */
> -ACPI_EXTERN ACPI_OPERAND_OBJECT        *AcpiGbl_GlobalLockMutex;
> -ACPI_EXTERN ACPI_SEMAPHORE              AcpiGbl_GlobalLockSemaphore;
> -ACPI_EXTERN ACPI_SPINLOCK               AcpiGbl_GlobalLockPendingLock;
> -ACPI_EXTERN UINT16                      AcpiGbl_GlobalLockHandle;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_GlobalLockAcquired;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_GlobalLockPresent;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_GlobalLockPending;
> +ACPI_GLOBAL (ACPI_OPERAND_OBJECT *,     AcpiGbl_GlobalLockMutex);
> +ACPI_GLOBAL (ACPI_SEMAPHORE,            AcpiGbl_GlobalLockSemaphore);
> +ACPI_GLOBAL (ACPI_SPINLOCK,             AcpiGbl_GlobalLockPendingLock);
> +ACPI_GLOBAL (UINT16,                    AcpiGbl_GlobalLockHandle);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_GlobalLockAcquired);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_GlobalLockPresent);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_GlobalLockPending);
>
>   /*
>    * Spinlocks are used for interfaces that can be possibly called at
>    * interrupt level
>    */
> -ACPI_EXTERN ACPI_SPINLOCK               AcpiGbl_GpeLock;      /* For GPE data structs and registers */
> -ACPI_EXTERN ACPI_SPINLOCK               AcpiGbl_HardwareLock; /* For ACPI H/W except GPE registers */
> -ACPI_EXTERN ACPI_SPINLOCK               AcpiGbl_ReferenceCountLock;
> +ACPI_GLOBAL (ACPI_SPINLOCK,             AcpiGbl_GpeLock);       /* For GPE data structs and registers */
> +ACPI_GLOBAL (ACPI_SPINLOCK,             AcpiGbl_HardwareLock);  /* For ACPI H/W except GPE registers */
> +ACPI_GLOBAL (ACPI_SPINLOCK,             AcpiGbl_ReferenceCountLock);
>
>   /* Mutex for _OSI support */
>
> -ACPI_EXTERN ACPI_MUTEX                  AcpiGbl_OsiMutex;
> +ACPI_GLOBAL (ACPI_MUTEX,                AcpiGbl_OsiMutex);
>
>   /* Reader/Writer lock is used for namespace walk and dynamic table unload */
>
> -ACPI_EXTERN ACPI_RW_LOCK                AcpiGbl_NamespaceRwLock;
> +ACPI_GLOBAL (ACPI_RW_LOCK,              AcpiGbl_NamespaceRwLock);
>
>
>   /*****************************************************************************
> @@ -350,69 +340,69 @@ ACPI_EXTERN ACPI_RW_LOCK                AcpiGbl_NamespaceRwLock;
>
>   /* Object caches */
>
> -ACPI_EXTERN ACPI_CACHE_T               *AcpiGbl_NamespaceCache;
> -ACPI_EXTERN ACPI_CACHE_T               *AcpiGbl_StateCache;
> -ACPI_EXTERN ACPI_CACHE_T               *AcpiGbl_PsNodeCache;
> -ACPI_EXTERN ACPI_CACHE_T               *AcpiGbl_PsNodeExtCache;
> -ACPI_EXTERN ACPI_CACHE_T               *AcpiGbl_OperandCache;
> +ACPI_GLOBAL (ACPI_CACHE_T *,            AcpiGbl_NamespaceCache);
> +ACPI_GLOBAL (ACPI_CACHE_T *,            AcpiGbl_StateCache);
> +ACPI_GLOBAL (ACPI_CACHE_T *,            AcpiGbl_PsNodeCache);
> +ACPI_GLOBAL (ACPI_CACHE_T *,            AcpiGbl_PsNodeExtCache);
> +ACPI_GLOBAL (ACPI_CACHE_T *,            AcpiGbl_OperandCache);
> +
> +/* System */
> +
> +ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_StartupFlags, 0);
> +ACPI_INIT_GLOBAL (BOOLEAN,              AcpiGbl_Shutdown, TRUE);
>
>   /* Global handlers */
>
> -ACPI_EXTERN ACPI_GLOBAL_NOTIFY_HANDLER  AcpiGbl_GlobalNotify[2];
> -ACPI_EXTERN ACPI_EXCEPTION_HANDLER      AcpiGbl_ExceptionHandler;
> -ACPI_EXTERN ACPI_INIT_HANDLER           AcpiGbl_InitHandler;
> -ACPI_EXTERN ACPI_TABLE_HANDLER          AcpiGbl_TableHandler;
> -ACPI_EXTERN void                       *AcpiGbl_TableHandlerContext;
> -ACPI_EXTERN ACPI_WALK_STATE            *AcpiGbl_BreakpointWalk;
> -ACPI_EXTERN ACPI_INTERFACE_HANDLER      AcpiGbl_InterfaceHandler;
> -ACPI_EXTERN ACPI_SCI_HANDLER_INFO      *AcpiGbl_SciHandlerList;
> +ACPI_GLOBAL (ACPI_GLOBAL_NOTIFY_HANDLER,AcpiGbl_GlobalNotify[2]);
> +ACPI_GLOBAL (ACPI_EXCEPTION_HANDLER,    AcpiGbl_ExceptionHandler);
> +ACPI_GLOBAL (ACPI_INIT_HANDLER,         AcpiGbl_InitHandler);
> +ACPI_GLOBAL (ACPI_TABLE_HANDLER,        AcpiGbl_TableHandler);
> +ACPI_GLOBAL (void *,                    AcpiGbl_TableHandlerContext);
> +ACPI_GLOBAL (ACPI_WALK_STATE *,         AcpiGbl_BreakpointWalk);
> +ACPI_GLOBAL (ACPI_INTERFACE_HANDLER,    AcpiGbl_InterfaceHandler);
> +ACPI_GLOBAL (ACPI_SCI_HANDLER_INFO *,   AcpiGbl_SciHandlerList);
>
>   /* Owner ID support */
>
> -ACPI_EXTERN UINT32                      AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS];
> -ACPI_EXTERN UINT8                       AcpiGbl_LastOwnerIdIndex;
> -ACPI_EXTERN UINT8                       AcpiGbl_NextOwnerIdOffset;
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS]);
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_LastOwnerIdIndex);
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_NextOwnerIdOffset);
>
>   /* Initialization sequencing */
>
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_RegMethodsExecuted;
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_RegMethodsExecuted);
>
>   /* Misc */
>
> -ACPI_EXTERN UINT32                      AcpiGbl_OriginalMode;
> -ACPI_EXTERN UINT32                      AcpiGbl_RsdpOriginalLocation;
> -ACPI_EXTERN UINT32                      AcpiGbl_NsLookupCount;
> -ACPI_EXTERN UINT32                      AcpiGbl_PsFindCount;
> -ACPI_EXTERN UINT16                      AcpiGbl_Pm1EnableRegisterSave;
> -ACPI_EXTERN UINT8                       AcpiGbl_DebuggerConfiguration;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_StepToNextCall;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_AcpiHardwarePresent;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_EventsInitialized;
> -ACPI_EXTERN ACPI_INTERFACE_INFO        *AcpiGbl_SupportedInterfaces;
> -ACPI_EXTERN ACPI_ADDRESS_RANGE         *AcpiGbl_AddressRangeList[ACPI_ADDRESS_RANGE_MAX];
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_OriginalMode);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_RsdpOriginalLocation);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_NsLookupCount);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_PsFindCount);
> +ACPI_GLOBAL (UINT16,                    AcpiGbl_Pm1EnableRegisterSave);
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_DebuggerConfiguration);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_StepToNextCall);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_AcpiHardwarePresent);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_EventsInitialized);
> +ACPI_GLOBAL (ACPI_INTERFACE_INFO *,     AcpiGbl_SupportedInterfaces);
> +ACPI_GLOBAL (ACPI_ADDRESS_RANGE *,      AcpiGbl_AddressRangeList[ACPI_ADDRESS_RANGE_MAX]);
>
> -#ifndef DEFINE_ACPI_GLOBALS
> +/* Other miscellaneous, declared and initialized in utglobal */
>
> -/* Other miscellaneous */
> -
> -extern BOOLEAN                          AcpiGbl_Shutdown;
> -extern UINT32                           AcpiGbl_StartupFlags;
>   extern const char                      *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT];
>   extern const char                      *AcpiGbl_LowestDstateNames[ACPI_NUM_SxW_METHODS];
>   extern const char                      *AcpiGbl_HighestDstateNames[ACPI_NUM_SxD_METHODS];
> -extern const ACPI_OPCODE_INFO           AcpiGbl_AmlOpInfo[AML_NUM_OPCODES];
>   extern const char                      *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS];
> -#endif
> +extern const ACPI_OPCODE_INFO           AcpiGbl_AmlOpInfo[AML_NUM_OPCODES];
>
>
>   #ifdef ACPI_DBG_TRACK_ALLOCATIONS
>
> -/* Lists for tracking memory allocations */
> +/* Lists for tracking memory allocations (debug only) */
>
> -ACPI_EXTERN ACPI_MEMORY_LIST           *AcpiGbl_GlobalList;
> -ACPI_EXTERN ACPI_MEMORY_LIST           *AcpiGbl_NsNodeList;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DisplayFinalMemStats;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DisableMemTracking;
> +ACPI_GLOBAL (ACPI_MEMORY_LIST *,        AcpiGbl_GlobalList);
> +ACPI_GLOBAL (ACPI_MEMORY_LIST *,        AcpiGbl_NsNodeList);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DisplayFinalMemStats);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DisableMemTracking);
>   #endif
>
>
> @@ -428,22 +418,23 @@ ACPI_EXTERN BOOLEAN                     AcpiGbl_DisableMemTracking;
>   #define NUM_PREDEFINED_NAMES            9
>   #endif
>
> -ACPI_EXTERN ACPI_NAMESPACE_NODE         AcpiGbl_RootNodeStruct;
> -ACPI_EXTERN ACPI_NAMESPACE_NODE        *AcpiGbl_RootNode;
> -ACPI_EXTERN ACPI_NAMESPACE_NODE        *AcpiGbl_FadtGpeDevice;
> -ACPI_EXTERN ACPI_OPERAND_OBJECT        *AcpiGbl_ModuleCodeList;
> +ACPI_GLOBAL (ACPI_NAMESPACE_NODE,       AcpiGbl_RootNodeStruct);
> +ACPI_GLOBAL (ACPI_NAMESPACE_NODE *,     AcpiGbl_RootNode);
> +ACPI_GLOBAL (ACPI_NAMESPACE_NODE *,     AcpiGbl_FadtGpeDevice);
> +ACPI_GLOBAL (ACPI_OPERAND_OBJECT *,     AcpiGbl_ModuleCodeList);
>
>
>   extern const UINT8                      AcpiGbl_NsProperties [ACPI_NUM_NS_TYPES];
>   extern const ACPI_PREDEFINED_NAMES      AcpiGbl_PreDefinedNames [NUM_PREDEFINED_NAMES];
>
>   #ifdef ACPI_DEBUG_OUTPUT
> -ACPI_EXTERN UINT32                      AcpiGbl_CurrentNodeCount;
> -ACPI_EXTERN UINT32                      AcpiGbl_CurrentNodeSize;
> -ACPI_EXTERN UINT32                      AcpiGbl_MaxConcurrentNodeCount;
> -ACPI_EXTERN ACPI_SIZE                  *AcpiGbl_EntryStackPointer;
> -ACPI_EXTERN ACPI_SIZE                  *AcpiGbl_LowestStackPointer;
> -ACPI_EXTERN UINT32                      AcpiGbl_DeepestNesting;
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_CurrentNodeCount);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_CurrentNodeSize);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_MaxConcurrentNodeCount);
> +ACPI_GLOBAL (ACPI_SIZE *,               AcpiGbl_EntryStackPointer);
> +ACPI_GLOBAL (ACPI_SIZE *,               AcpiGbl_LowestStackPointer);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_DeepestNesting);
> +ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_NestingLevel, 0);
>   #endif
>
>
> @@ -453,11 +444,11 @@ ACPI_EXTERN UINT32                      AcpiGbl_DeepestNesting;
>    *
>    ****************************************************************************/
>
> -ACPI_EXTERN ACPI_THREAD_STATE          *AcpiGbl_CurrentWalkList;
> +ACPI_GLOBAL (ACPI_THREAD_STATE *,       AcpiGbl_CurrentWalkList);
>
>   /* Control method single step flag */
>
> -ACPI_EXTERN UINT8                       AcpiGbl_CmSingleStep;
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_CmSingleStep);
>
>
>   /*****************************************************************************
> @@ -466,9 +457,10 @@ ACPI_EXTERN UINT8                       AcpiGbl_CmSingleStep;
>    *
>    ****************************************************************************/
>
> -extern      ACPI_BIT_REGISTER_INFO      AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG];
> -ACPI_EXTERN UINT8                       AcpiGbl_SleepTypeA;
> -ACPI_EXTERN UINT8                       AcpiGbl_SleepTypeB;
> +extern ACPI_BIT_REGISTER_INFO           AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG];
> +
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_SleepTypeA);
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_SleepTypeB);
>
>
>   /*****************************************************************************
> @@ -479,13 +471,14 @@ ACPI_EXTERN UINT8                       AcpiGbl_SleepTypeB;
>
>   #if (!ACPI_REDUCED_HARDWARE)
>
> -ACPI_EXTERN UINT8                       AcpiGbl_AllGpesInitialized;
> -ACPI_EXTERN ACPI_GPE_XRUPT_INFO        *AcpiGbl_GpeXruptListHead;
> -ACPI_EXTERN ACPI_GPE_BLOCK_INFO        *AcpiGbl_GpeFadtBlocks[ACPI_MAX_GPE_BLOCKS];
> -ACPI_EXTERN ACPI_GBL_EVENT_HANDLER      AcpiGbl_GlobalEventHandler;
> -ACPI_EXTERN void                       *AcpiGbl_GlobalEventHandlerContext;
> -ACPI_EXTERN ACPI_FIXED_EVENT_HANDLER    AcpiGbl_FixedEventHandlers[ACPI_NUM_FIXED_EVENTS];
> -extern      ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS];
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_AllGpesInitialized);
> +ACPI_GLOBAL (ACPI_GPE_XRUPT_INFO *,     AcpiGbl_GpeXruptListHead);
> +ACPI_GLOBAL (ACPI_GPE_BLOCK_INFO *,     AcpiGbl_GpeFadtBlocks[ACPI_MAX_GPE_BLOCKS]);
> +ACPI_GLOBAL (ACPI_GBL_EVENT_HANDLER,    AcpiGbl_GlobalEventHandler);
> +ACPI_GLOBAL (void *,                    AcpiGbl_GlobalEventHandlerContext);
> +ACPI_GLOBAL (ACPI_FIXED_EVENT_HANDLER,  AcpiGbl_FixedEventHandlers[ACPI_NUM_FIXED_EVENTS]);
> +
> +extern ACPI_FIXED_EVENT_INFO            AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS];
>
>   #endif /* !ACPI_REDUCED_HARDWARE */
>
> @@ -495,23 +488,19 @@ extern      ACPI_FIXED_EVENT_INFO       AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EV
>    *
>    ****************************************************************************/
>
> -/* Procedure nesting level for debug output */
> -
> -extern      UINT32                      AcpiGbl_NestingLevel;
> -
>   /* Event counters */
>
> -ACPI_EXTERN UINT32                      AcpiMethodCount;
> -ACPI_EXTERN UINT32                      AcpiGpeCount;
> -ACPI_EXTERN UINT32                      AcpiSciCount;
> -ACPI_EXTERN UINT32                      AcpiFixedEventCount[ACPI_NUM_FIXED_EVENTS];
> +ACPI_GLOBAL (UINT32,                    AcpiMethodCount);
> +ACPI_GLOBAL (UINT32,                    AcpiGpeCount);
> +ACPI_GLOBAL (UINT32,                    AcpiSciCount);
> +ACPI_GLOBAL (UINT32,                    AcpiFixedEventCount[ACPI_NUM_FIXED_EVENTS]);
>
>   /* Support for dynamic control method tracing mechanism */
>
> -ACPI_EXTERN UINT32                      AcpiGbl_OriginalDbgLevel;
> -ACPI_EXTERN UINT32                      AcpiGbl_OriginalDbgLayer;
> -ACPI_EXTERN UINT32                      AcpiGbl_TraceDbgLevel;
> -ACPI_EXTERN UINT32                      AcpiGbl_TraceDbgLayer;
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_OriginalDbgLevel);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_OriginalDbgLayer);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_TraceDbgLevel);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_TraceDbgLayer);
>
>
>   /*****************************************************************************
> @@ -520,63 +509,64 @@ ACPI_EXTERN UINT32                      AcpiGbl_TraceDbgLayer;
>    *
>    ****************************************************************************/
>
> -ACPI_EXTERN UINT8                       AcpiGbl_DbOutputFlags;
> +ACPI_GLOBAL (UINT8,                     AcpiGbl_DbOutputFlags);
>
>   #ifdef ACPI_DISASSEMBLER
>
> -ACPI_EXTERN BOOLEAN                     ACPI_INIT_GLOBAL (AcpiGbl_IgnoreNoopOperator, FALSE);
> +/* Do not disassemble buffers to resource descriptors */
>
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DbOpt_disasm;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DbOpt_verbose;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_NumExternalMethods;
> -ACPI_EXTERN UINT32                      AcpiGbl_ResolvedExternalMethods;
> -ACPI_EXTERN ACPI_EXTERNAL_LIST         *AcpiGbl_ExternalList;
> -ACPI_EXTERN ACPI_EXTERNAL_FILE         *AcpiGbl_ExternalFileList;
> -#endif
> +ACPI_INIT_GLOBAL (UINT8,                AcpiGbl_NoResourceDisassembly, FALSE);
> +ACPI_INIT_GLOBAL (BOOLEAN,              AcpiGbl_IgnoreNoopOperator, FALSE);
>
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DbOpt_disasm);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DbOpt_verbose);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_NumExternalMethods);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_ResolvedExternalMethods);
> +ACPI_GLOBAL (ACPI_EXTERNAL_LIST *,      AcpiGbl_ExternalList);
> +ACPI_GLOBAL (ACPI_EXTERNAL_FILE *,      AcpiGbl_ExternalFileList);
> +#endif
>
>   #ifdef ACPI_DEBUGGER
>
> -extern      BOOLEAN                     AcpiGbl_MethodExecuting;
> -extern      BOOLEAN                     AcpiGbl_AbortMethod;
> -extern      BOOLEAN                     AcpiGbl_DbTerminateThreads;
> +ACPI_INIT_GLOBAL (BOOLEAN,              AcpiGbl_DbTerminateThreads, FALSE);
> +ACPI_INIT_GLOBAL (BOOLEAN,              AcpiGbl_AbortMethod, FALSE);
> +ACPI_INIT_GLOBAL (BOOLEAN,              AcpiGbl_MethodExecuting, FALSE);
>
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DbOpt_tables;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DbOpt_stats;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DbOpt_ini_methods;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DbOpt_NoRegionSupport;
> -ACPI_EXTERN BOOLEAN                     AcpiGbl_DbOutputToFile;
> -ACPI_EXTERN char                       *AcpiGbl_DbBuffer;
> -ACPI_EXTERN char                       *AcpiGbl_DbFilename;
> -ACPI_EXTERN UINT32                      AcpiGbl_DbDebugLevel;
> -ACPI_EXTERN UINT32                      AcpiGbl_DbConsoleDebugLevel;
> -ACPI_EXTERN ACPI_NAMESPACE_NODE        *AcpiGbl_DbScopeNode;
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DbOpt_tables);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DbOpt_stats);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DbOpt_ini_methods);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DbOpt_NoRegionSupport);
> +ACPI_GLOBAL (BOOLEAN,                   AcpiGbl_DbOutputToFile);
> +ACPI_GLOBAL (char *,                    AcpiGbl_DbBuffer);
> +ACPI_GLOBAL (char *,                    AcpiGbl_DbFilename);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_DbDebugLevel);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_DbConsoleDebugLevel);
> +ACPI_GLOBAL (ACPI_NAMESPACE_NODE *,     AcpiGbl_DbScopeNode);
>
> -ACPI_EXTERN char                       *AcpiGbl_DbArgs[ACPI_DEBUGGER_MAX_ARGS];
> -ACPI_EXTERN ACPI_OBJECT_TYPE            AcpiGbl_DbArgTypes[ACPI_DEBUGGER_MAX_ARGS];
> +ACPI_GLOBAL (char *,                    AcpiGbl_DbArgs[ACPI_DEBUGGER_MAX_ARGS]);
> +ACPI_GLOBAL (ACPI_OBJECT_TYPE,          AcpiGbl_DbArgTypes[ACPI_DEBUGGER_MAX_ARGS]);
>
>   /* These buffers should all be the same size */
>
> -ACPI_EXTERN char                        AcpiGbl_DbLineBuf[ACPI_DB_LINE_BUFFER_SIZE];
> -ACPI_EXTERN char                        AcpiGbl_DbParsedBuf[ACPI_DB_LINE_BUFFER_SIZE];
> -ACPI_EXTERN char                        AcpiGbl_DbScopeBuf[ACPI_DB_LINE_BUFFER_SIZE];
> -ACPI_EXTERN char                        AcpiGbl_DbDebugFilename[ACPI_DB_LINE_BUFFER_SIZE];
> +ACPI_GLOBAL (char,                      AcpiGbl_DbLineBuf[ACPI_DB_LINE_BUFFER_SIZE]);
> +ACPI_GLOBAL (char,                      AcpiGbl_DbParsedBuf[ACPI_DB_LINE_BUFFER_SIZE]);
> +ACPI_GLOBAL (char,                      AcpiGbl_DbScopeBuf[ACPI_DB_LINE_BUFFER_SIZE]);
> +ACPI_GLOBAL (char,                      AcpiGbl_DbDebugFilename[ACPI_DB_LINE_BUFFER_SIZE]);
>
>   /*
>    * Statistic globals
>    */
> -ACPI_EXTERN UINT16                      AcpiGbl_ObjTypeCount[ACPI_TYPE_NS_NODE_MAX+1];
> -ACPI_EXTERN UINT16                      AcpiGbl_NodeTypeCount[ACPI_TYPE_NS_NODE_MAX+1];
> -ACPI_EXTERN UINT16                      AcpiGbl_ObjTypeCountMisc;
> -ACPI_EXTERN UINT16                      AcpiGbl_NodeTypeCountMisc;
> -ACPI_EXTERN UINT32                      AcpiGbl_NumNodes;
> -ACPI_EXTERN UINT32                      AcpiGbl_NumObjects;
> -
> -
> -ACPI_EXTERN UINT32                      AcpiGbl_SizeOfParseTree;
> -ACPI_EXTERN UINT32                      AcpiGbl_SizeOfMethodTrees;
> -ACPI_EXTERN UINT32                      AcpiGbl_SizeOfNodeEntries;
> -ACPI_EXTERN UINT32                      AcpiGbl_SizeOfAcpiObjects;
> +ACPI_GLOBAL (UINT16,                    AcpiGbl_ObjTypeCount[ACPI_TYPE_NS_NODE_MAX+1]);
> +ACPI_GLOBAL (UINT16,                    AcpiGbl_NodeTypeCount[ACPI_TYPE_NS_NODE_MAX+1]);
> +ACPI_GLOBAL (UINT16,                    AcpiGbl_ObjTypeCountMisc);
> +ACPI_GLOBAL (UINT16,                    AcpiGbl_NodeTypeCountMisc);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_NumNodes);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_NumObjects);
> +
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfParseTree);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfMethodTrees);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfNodeEntries);
> +ACPI_GLOBAL (UINT32,                    AcpiGbl_SizeOfAcpiObjects);
>
>   #endif /* ACPI_DEBUGGER */
>
> @@ -589,7 +579,7 @@ ACPI_EXTERN UINT32                      AcpiGbl_SizeOfAcpiObjects;
>
>   #ifdef ACPI_APPLICATION
>
> -ACPI_FILE   ACPI_INIT_GLOBAL (AcpiGbl_DebugFile, NULL);
> +ACPI_INIT_GLOBAL (ACPI_FILE,            AcpiGbl_DebugFile, NULL);
>
>   #endif /* ACPI_APPLICATION */
>
> @@ -600,7 +590,9 @@ ACPI_FILE   ACPI_INIT_GLOBAL (AcpiGbl_DebugFile, NULL);
>    *
>    ****************************************************************************/
>
> -extern const AH_PREDEFINED_NAME     AslPredefinedInfo[];
> +extern const AH_PREDEFINED_NAME         AslPredefinedInfo[];
> +
>
> +#pragma pack(pop) /* Restore original struct packing */
>
>   #endif /* __ACGLOBAL_H__ */
> diff --git a/src/acpica/source/include/achware.h b/src/acpica/source/include/achware.h
> index ed39a36..7ac74db 100644
> --- a/src/acpica/source/include/achware.h
> +++ b/src/acpica/source/include/achware.h
> @@ -117,6 +117,8 @@
>   #define __ACHWARE_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* Values for the _SST predefined method */
>
>   #define ACPI_SST_INDICATOR_OFF  0
> @@ -296,4 +298,6 @@ AcpiHwDerivePciId (
>       ACPI_HANDLE             PciRegion);
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACHWARE_H__ */
> diff --git a/src/acpica/source/include/acinterp.h b/src/acpica/source/include/acinterp.h
> index fbe0890..497a4e2 100644
> --- a/src/acpica/source/include/acinterp.h
> +++ b/src/acpica/source/include/acinterp.h
> @@ -117,6 +117,8 @@
>   #define __ACINTERP_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   #define ACPI_WALK_OPERANDS          (&(WalkState->Operands [WalkState->NumOperands -1]))
>
>   /* Macros for tables used for debug output */
> @@ -161,6 +163,10 @@ typedef const struct acpi_exdump_info
>   #define ACPI_EXD_PACKAGE                11
>   #define ACPI_EXD_FIELD                  12
>   #define ACPI_EXD_REFERENCE              13
> +#define ACPI_EXD_LIST                   14 /* Operand object list */
> +#define ACPI_EXD_HDLR_LIST              15 /* Address Handler list */
> +#define ACPI_EXD_RGN_LIST               16 /* Region list */
> +#define ACPI_EXD_NODE                   17 /* Namespace Node */
>
>   /* restore default alignment */
>
> @@ -684,14 +690,6 @@ void
>   AcpiExExitInterpreter (
>       void);
>
> -void
> -AcpiExReacquireInterpreter (
> -    void);
> -
> -void
> -AcpiExRelinquishInterpreter (
> -    void);
> -
>   BOOLEAN
>   AcpiExTruncateFor32bitTable (
>       ACPI_OPERAND_OBJECT     *ObjDesc);
> @@ -795,4 +793,6 @@ AcpiExDataTableSpaceHandler (
>       void                    *HandlerContext,
>       void                    *RegionContext);
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __INTERP_H__ */
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index e31aedc..9c8cc99 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -117,6 +117,8 @@
>   #define __ACLOCAL_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* acpisrc:StructDefs -- for acpisrc conversion */
>
>   #define ACPI_SERIALIZED                 0xFF
> @@ -1421,4 +1423,6 @@ typedef struct ah_predefined_name
>
>   } AH_PREDEFINED_NAME;
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACLOCAL_H__ */
> diff --git a/src/acpica/source/include/acmacros.h b/src/acpica/source/include/acmacros.h
> index aa8bd56..14c85ef 100644
> --- a/src/acpica/source/include/acmacros.h
> +++ b/src/acpica/source/include/acmacros.h
> @@ -117,6 +117,8 @@
>   #define __ACMACROS_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * Extract data using a pointer. Any more than a byte and we
>    * get into potential aligment issues -- see the STORE macros below.
> @@ -505,4 +507,6 @@
>   #define ACPI_IS_OCTAL_DIGIT(d)              (((char)(d) >= '0') && ((char)(d) <= '7'))
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* ACMACROS_H */
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 883e9c4..2a31cdd 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -117,6 +117,8 @@
>   #define __ACNAMESP_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* To search the entire name space, pass this as SearchBase */
>
>   #define ACPI_NS_ALL                 ((ACPI_HANDLE)0)
> @@ -607,4 +609,6 @@ void
>   AcpiNsTerminate (
>       void);
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACNAMESP_H__ */
> diff --git a/src/acpica/source/include/acobject.h b/src/acpica/source/include/acobject.h
> index 534fe31..d890f96 100644
> --- a/src/acpica/source/include/acobject.h
> +++ b/src/acpica/source/include/acobject.h
> @@ -116,6 +116,8 @@
>   #ifndef _ACOBJECT_H
>   #define _ACOBJECT_H
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* acpisrc:StructDefs -- for acpisrc conversion */
>
>
> @@ -653,6 +655,6 @@ typedef union acpi_descriptor
>
>   } ACPI_DESCRIPTOR;
>
> -#pragma pack()
> +#pragma pack(pop) /* Restore original struct packing */
>
>   #endif /* _ACOBJECT_H */
> diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h
> index 2311c44..4875a5f 100644
> --- a/src/acpica/source/include/acoutput.h
> +++ b/src/acpica/source/include/acoutput.h
> @@ -116,6 +116,8 @@
>   #ifndef __ACOUTPUT_H__
>   #define __ACOUTPUT_H__
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * Debug levels and component IDs. These are used to control the
>    * granularity of the output of the ACPI_DEBUG_PRINT macro -- on a
> @@ -536,4 +538,6 @@
>   #endif /* ACPI_DEBUG_OUTPUT */
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACOUTPUT_H__ */
> diff --git a/src/acpica/source/include/acparser.h b/src/acpica/source/include/acparser.h
> index 5827a8c..90df9c1 100644
> --- a/src/acpica/source/include/acparser.h
> +++ b/src/acpica/source/include/acparser.h
> @@ -118,6 +118,8 @@
>   #define __ACPARSER_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   #define OP_HAS_RETURN_VALUE             1
>
>   /* Variable number of arguments. This field must be 32 bits */
> @@ -425,4 +427,6 @@ AcpiPsShow (
>       ACPI_PARSE_OBJECT       *op);
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACPARSER_H__ */
> diff --git a/src/acpica/source/include/acpiosxf.h b/src/acpica/source/include/acpiosxf.h
> index 00922c7..43e99ee 100644
> --- a/src/acpica/source/include/acpiosxf.h
> +++ b/src/acpica/source/include/acpiosxf.h
> @@ -122,6 +122,8 @@
>   #include "actypes.h"
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* Types for AcpiOsExecute */
>
>   typedef enum
> @@ -623,4 +625,6 @@ AcpiOsCloseDirectory (
>   #endif
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACPIOSXF_H__ */
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 4e34438..a6d7c35 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -119,13 +119,15 @@
>
>   /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION                 0x20140114
> +#define ACPI_CA_VERSION                 0x20140214
>
>   #include "acconfig.h"
>   #include "actypes.h"
>   #include "actbl.h"
>   #include "acbuffer.h"
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * Globals that are publically available
>    */
> @@ -142,7 +144,7 @@ extern UINT32               AcpiDbgLayer;
>
>   /* ACPICA runtime options */
>
> -extern UINT8                AcpiGbl_AllMethodsSerialized;
> +extern UINT8                AcpiGbl_AutoSerializeMethods;
>   extern UINT8                AcpiGbl_CopyDsdtLocally;
>   extern UINT8                AcpiGbl_CreateOsiMethod;
>   extern UINT8                AcpiGbl_DisableAutoRepair;
> @@ -903,4 +905,6 @@ AcpiDebugPrintRaw (
>       ...);
>   #endif
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACXFACE_H__ */
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 5e8b00c..75aed15 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -117,11 +117,13 @@
>   #define __ACPREDEF_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /******************************************************************************
>    *
>    * Return Package types
>    *
> - * 1) PTYPE1 packages do not contain sub-packages.
> + * 1) PTYPE1 packages do not contain subpackages.
>    *
>    * ACPI_PTYPE1_FIXED: Fixed-length length, 1 or 2 object types:
>    *      object type
> @@ -136,8 +138,8 @@
>    *      (Used for _PRW)
>    *
>    *
> - * 2) PTYPE2 packages contain a Variable-length number of sub-packages. Each
> - *    of the different types describe the contents of each of the sub-packages.
> + * 2) PTYPE2 packages contain a Variable-length number of subpackages. Each
> + *    of the different types describe the contents of each of the subpackages.
>    *
>    * ACPI_PTYPE2: Each subpackage contains 1 or 2 object types. Zero-length
>    *      parent package is allowed:
> @@ -626,7 +628,7 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>
>       /*
>        * For _HPX, a single package is returned, containing a variable-length number
> -     * of sub-packages. Each sub-package contains a PCI record setting.
> +     * of subpackages. Each subpackage contains a PCI record setting.
>        * There are several different type of record settings, of different
>        * lengths, but all elements of all settings are Integers.
>        */
> @@ -756,6 +758,12 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>                   METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
>                       PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0),
>
> +    {{"_PRP",   METHOD_0ARGS,
> +                METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Str, 1 Int/Str/Pkg */
> +                    PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_STRING, 1,
> +                        ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING |
> +                        ACPI_RTYPE_PACKAGE | ACPI_RTYPE_REFERENCE, 1,0),
> +
>       {{"_PRS",   METHOD_0ARGS,
>                   METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>
> @@ -1133,4 +1141,6 @@ static const ACPI_PREDEFINED_INFO      AcpiGbl_ScopeNames[] = {
>   extern const ACPI_PREDEFINED_INFO      AcpiGbl_ResourceNames[];
>   #endif
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif
> diff --git a/src/acpica/source/include/acresrc.h b/src/acpica/source/include/acresrc.h
> index d1366f0..db23891 100644
> --- a/src/acpica/source/include/acresrc.h
> +++ b/src/acpica/source/include/acresrc.h
> @@ -122,6 +122,8 @@
>   #include "amlresrc.h"
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * If possible, pack the following structures to byte alignment, since we
>    * don't care about performance for debug output. Two cases where we cannot
> @@ -510,4 +512,6 @@ extern ACPI_RSDUMP_INFO         AcpiRsDumpUartSerialBus[];
>   extern ACPI_RSDUMP_INFO         AcpiRsDumpGeneralFlags[];
>   #endif
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif  /* __ACRESRC_H__ */
> diff --git a/src/acpica/source/include/acrestyp.h b/src/acpica/source/include/acrestyp.h
> index 9cf948b..9ff05217 100644
> --- a/src/acpica/source/include/acrestyp.h
> +++ b/src/acpica/source/include/acrestyp.h
> @@ -117,6 +117,8 @@
>   #define __ACRESTYP_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * Definitions for Resource Attributes
>    */
> @@ -769,4 +771,6 @@ typedef struct acpi_pci_routing_table
>
>   } ACPI_PCI_ROUTING_TABLE;
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACRESTYP_H__ */
> diff --git a/src/acpica/source/include/acstruct.h b/src/acpica/source/include/acstruct.h
> index ee4f989..7e91384 100644
> --- a/src/acpica/source/include/acstruct.h
> +++ b/src/acpica/source/include/acstruct.h
> @@ -116,6 +116,9 @@
>   #ifndef __ACSTRUCT_H__
>   #define __ACSTRUCT_H__
>
> +
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* acpisrc:StructDefs -- for acpisrc conversion */
>
>   /*****************************************************************************
> @@ -211,6 +214,9 @@ typedef struct acpi_init_walk_info
>       UINT32                          TableIndex;
>       UINT32                          ObjectCount;
>       UINT32                          MethodCount;
> +    UINT32                          SerialMethodCount;
> +    UINT32                          NonSerialMethodCount;
> +    UINT32                          SerializedMethodCount;
>       UINT32                          DeviceCount;
>       UINT32                          OpRegionCount;
>       UINT32                          FieldCount;
> @@ -339,4 +345,6 @@ typedef struct acpi_walk_info
>   #define ACPI_DISPLAY_SHORT          (UINT8) 2
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif
> diff --git a/src/acpica/source/include/actables.h b/src/acpica/source/include/actables.h
> index ed0e1b0..8ec349c 100644
> --- a/src/acpica/source/include/actables.h
> +++ b/src/acpica/source/include/actables.h
> @@ -117,6 +117,8 @@
>   #define __ACTABLES_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   ACPI_STATUS
>   AcpiAllocateRootTable (
>       UINT32                  InitialTableCount);
> @@ -266,4 +268,6 @@ ACPI_STATUS
>   AcpiTbParseRootTable (
>       ACPI_PHYSICAL_ADDRESS   RsdpAddress);
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACTABLES_H__ */
> diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h
> index b300661..37d44d7 100644
> --- a/src/acpica/source/include/actbl.h
> +++ b/src/acpica/source/include/actbl.h
> @@ -117,6 +117,8 @@
>   #define __ACTBL_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*******************************************************************************
>    *
>    * Fundamental ACPI tables
> @@ -512,4 +514,6 @@ typedef struct acpi_table_desc
>   #define ACPI_FADT_V3_SIZE       (UINT32) (ACPI_FADT_OFFSET (SleepControl))
>   #define ACPI_FADT_V5_SIZE       (UINT32) (sizeof (ACPI_TABLE_FADT))
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACTBL_H__ */
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 4710672..24a51a3 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -117,6 +117,8 @@
>   #define __ACTBL1_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*******************************************************************************
>    *
>    * Additional ACPI Tables (1)
> @@ -1213,8 +1215,6 @@ typedef struct acpi_srat_x2apic_cpu_affinity
>   #define ACPI_SRAT_CPU_ENABLED       (1)         /* 00: Use affinity structure */
>
>
> -/* Reset to default packing */
> -
> -#pragma pack()
> +#pragma pack(pop) /* Restore original struct packing */
>
>   #endif /* __ACTBL1_H__ */
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 2ae8ce3..5123a93 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -117,6 +117,8 @@
>   #define __ACTBL2_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*******************************************************************************
>    *
>    * Additional ACPI Tables (2)
> @@ -1488,8 +1490,6 @@ typedef struct acpi_table_wdrt
>   } ACPI_TABLE_WDRT;
>
>
> -/* Reset to default packing */
> -
> -#pragma pack()
> +#pragma pack(pop) /* Restore original struct packing */
>
>   #endif /* __ACTBL2_H__ */
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index efec7e8..5ab1ff5 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -117,6 +117,8 @@
>   #define __ACTBL3_H__
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*******************************************************************************
>    *
>    * Additional ACPI Tables (3)
> @@ -804,8 +806,6 @@ typedef struct acpi_tpm2_control
>   } ACPI_TPM2_CONTROL;
>
>
> -/* Reset to default packing */
> -
> -#pragma pack()
> +#pragma pack(pop) /* Restore original struct packing */
>
>   #endif /* __ACTBL3_H__ */
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index a02cd10..b2dc8a7 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -116,6 +116,8 @@
>   #ifndef __ACTYPES_H__
>   #define __ACTYPES_H__
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /* acpisrc:StructDefs -- for acpisrc conversion */
>
>   /*
> @@ -1387,4 +1389,6 @@ typedef struct acpi_memory_list
>   #define ACPI_OSI_WIN_8                  0x0C
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __ACTYPES_H__ */
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index f1c2c8b..1bf4319 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -117,6 +117,8 @@
>   #define _ACUTILS_H
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   extern const UINT8                      AcpiGbl_ResourceAmlSizes[];
>   extern const UINT8                      AcpiGbl_ResourceAmlSerialBusSizes[];
>
> @@ -1171,4 +1173,7 @@ AcpiUtMethodError (
>       const char              *Path,
>       ACPI_STATUS             LookupStatus);
>
> +
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* _ACUTILS_H */
> diff --git a/src/acpica/source/include/amlcode.h b/src/acpica/source/include/amlcode.h
> index 5eaf30c..8cf250c 100644
> --- a/src/acpica/source/include/amlcode.h
> +++ b/src/acpica/source/include/amlcode.h
> @@ -118,6 +118,9 @@
>   #ifndef __AMLCODE_H__
>   #define __AMLCODE_H__
>
> +#pragma pack(push) /* Set default struct packing */
> +
> +
>   /* primary opcodes */
>
>   #define AML_NULL_CHAR               (UINT16) 0x00
> @@ -581,4 +584,6 @@ typedef enum
>   #define AML_METHOD_SYNC_LEVEL       0xF0
>
>
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* __AMLCODE_H__ */
> diff --git a/src/acpica/source/include/amlresrc.h b/src/acpica/source/include/amlresrc.h
> index 3fcd9ed..c54ae1f 100644
> --- a/src/acpica/source/include/amlresrc.h
> +++ b/src/acpica/source/include/amlresrc.h
> @@ -119,6 +119,8 @@
>   #define __AMLRESRC_H
>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   /*
>    * Resource descriptor tags, as defined in the ACPI specification.
>    * Used to symbolically reference fields within a descriptor.
> @@ -646,4 +648,7 @@ typedef union aml_resource
>
>   } AML_RESOURCE;
>
> +
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index 5aac8f8..599abbc 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -135,6 +135,8 @@
>   #include <string.h>
>   #include <signal.h>
>
> +#pragma pack(push) /* Set default struct packing */
> +
>   extern BOOLEAN              AcpiGbl_IgnoreErrors;
>   extern UINT8                AcpiGbl_RegionFillValue;
>   extern UINT8                AcpiGbl_UseHwReducedFadt;
> @@ -268,4 +270,7 @@ AeGlobalEventHandler (
>       UINT32                  EventNumber,
>       void                    *Context);
>
> +
> +#pragma pack(pop) /* Restore original struct packing */
> +
>   #endif /* _AECOMMON */
>

Acked-by: Alex Hung <alex.hung at canonical.com>



More information about the fwts-devel mailing list