svn commit: r350510 - in head/sys/contrib/dev/acpica: . compiler components/dispatcher components/events components/executer components/namespace components/tables components/utilities include

Scott Long scottl at samsco.org
Thu Aug 1 17:57:06 UTC 2019


Thanks.  I’m working on the root cause right now, hopefully will have
more information soon.

Scott


> On Aug 1, 2019, at 11:45 AM, Jung-uk Kim <jkim at FreeBSD.org> wrote:
> 
> Author: jkim
> Date: Thu Aug  1 17:45:43 2019
> New Revision: 350510
> URL: https://svnweb.freebsd.org/changeset/base/350510
> 
> Log:
>  Revert r349863 (ACPICA 20190703).
> 
>  This commit caused boot failures on some systems.
> 
>  Requested by:	scottl
> 
> Modified:
>  head/sys/contrib/dev/acpica/changes.txt
>  head/sys/contrib/dev/acpica/compiler/asldefine.h
>  head/sys/contrib/dev/acpica/compiler/aslglobal.h
>  head/sys/contrib/dev/acpica/compiler/aslload.c
>  head/sys/contrib/dev/acpica/compiler/aslmessages.c
>  head/sys/contrib/dev/acpica/compiler/aslmessages.h
>  head/sys/contrib/dev/acpica/compiler/aslstubs.c
>  head/sys/contrib/dev/acpica/compiler/aslsupport.l
>  head/sys/contrib/dev/acpica/components/dispatcher/dsinit.c
>  head/sys/contrib/dev/acpica/components/events/evgpe.c
>  head/sys/contrib/dev/acpica/components/events/evgpeblk.c
>  head/sys/contrib/dev/acpica/components/events/evxface.c
>  head/sys/contrib/dev/acpica/components/events/evxfgpe.c
>  head/sys/contrib/dev/acpica/components/executer/exconfig.c
>  head/sys/contrib/dev/acpica/components/namespace/nsaccess.c
>  head/sys/contrib/dev/acpica/components/namespace/nseval.c
>  head/sys/contrib/dev/acpica/components/namespace/nsinit.c
>  head/sys/contrib/dev/acpica/components/namespace/nsload.c
>  head/sys/contrib/dev/acpica/components/namespace/nsutils.c
>  head/sys/contrib/dev/acpica/components/tables/tbdata.c
>  head/sys/contrib/dev/acpica/components/tables/tbxfload.c
>  head/sys/contrib/dev/acpica/components/utilities/utinit.c
>  head/sys/contrib/dev/acpica/components/utilities/utxfinit.c
>  head/sys/contrib/dev/acpica/include/acevents.h
>  head/sys/contrib/dev/acpica/include/acglobal.h
>  head/sys/contrib/dev/acpica/include/acnamesp.h
>  head/sys/contrib/dev/acpica/include/acpixf.h
> 
> Modified: head/sys/contrib/dev/acpica/changes.txt
> ==============================================================================
> --- head/sys/contrib/dev/acpica/changes.txt	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/changes.txt	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -1,53 +1,4 @@
> ----------------------------------------
> -03 July 2019. Summary of changes for version 20190703:
> -
> -
> -1) ACPICA kernel-resident subsystem:
> -
> -Remove legacy module-level support code. There were still some remnants 
> -of the legacy module-level code executions. Since we no longer support 
> -this option, this is essentially dead code and has been removed from the 
> -ACPICA source.
> -
> -iASL: ensure that _WAK, _PTS, _TTS, and _Sx are declared only at the root 
> -scope. If these named objects are declared outside the root scope, they 
> -will not be invoked by any host Operating System.
> -
> -Clear status of GPEs on first direct enable. ACPI GPEs (other than the EC 
> -one) can be enabled in two situations. First, the GPEs with existing _Lxx 
> -and _Exx methods are enabled implicitly by ACPICA during system 
> -initialization.  Second, the GPEs without these methods (like GPEs listed 
> -by _PRW objects for wakeup devices) need to be enabled directly by the 
> -code that is going to use them (e.g. ACPI power management or device 
> -drivers).
> -
> -In the former case, if the status of a given GPE is set to start with, 
> -its handler method (either _Lxx or _Exx) needs to be invoked to take care 
> -of the events (possibly) signaled before the GPE was enabled. In the 
> -latter case, however, the first caller of AcpiEnableGpe() for a given GPE 
> -should not be expected to care about any events that might be signaled 
> -through it earlier.  In that case, it is better to clear the status of 
> -the GPE before enabling it, to prevent stale events from triggering 
> -unwanted actions (like spurious system resume, for example).
> -
> -For this reason, modify AcpiEvAddGpeReference() to take an additional 
> -boolean argument indicating whether or not the GPE status needs to be 
> -cleared when its reference counter changes from zero to one and make 
> -AcpiEnableGpe() pass TRUE to it through that new argument.
> -
> -
> -2) iASL Compiler/Disassembler and ACPICA tools:
> -
> -The tool generation process has been migrated to MSVC 2017, and all 
> -project files have been upgraded. The new project files appear in the 
> -directory \acpica\generate\msvc2017. This change effectively deprecates 
> -the older project files in \acpica\generate\msvc9.
> -
> -iASL: ensure that _WAK, _PTS, _TTS, and _Sx are declared only at the root 
> -scope. If these named objects are declared outside the root scope, they 
> -will not be invoked by any host Operating System
> -
> -----------------------------------------
> 09 May 2019. Summary of changes for version 20190509:
> 
> 
> 
> Modified: head/sys/contrib/dev/acpica/compiler/asldefine.h
> ==============================================================================
> --- head/sys/contrib/dev/acpica/compiler/asldefine.h	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/compiler/asldefine.h	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -298,20 +298,4 @@
> #define COMMENT_CAPTURE_ON    AslGbl_CommentState.CaptureComments = TRUE;
> #define COMMENT_CAPTURE_OFF   AslGbl_CommentState.CaptureComments = FALSE;
> 
> -/*
> - * Special name segments - these must only be declared at the root scope
> - */
> -#define NAMESEG__PTS    "_PTS"
> -#define NAMESEG__WAK    "_WAK"
> -#define NAMESEG__S0     "_S0_"
> -#define NAMESEG__S1     "_S1_"
> -#define NAMESEG__S2     "_S2_"
> -#define NAMESEG__S3     "_S3_"
> -#define NAMESEG__S4     "_S4_"
> -#define NAMESEG__S5     "_S5_"
> -#define NAMESEG__TTS    "_TTS"
> -
> -#define MAX_SPECIAL_NAMES      9
> -
> -
> #endif /* ASLDEFINE.H */
> 
> Modified: head/sys/contrib/dev/acpica/compiler/aslglobal.h
> ==============================================================================
> --- head/sys/contrib/dev/acpica/compiler/aslglobal.h	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/compiler/aslglobal.h	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -223,26 +223,11 @@ const char                          *AslGbl_OpFlagName
>     "OP_NOT_FOUND_DURING_LOAD"
> };
> 
> -const char                          *AslGbl_SpecialNamedObjects [MAX_SPECIAL_NAMES] =
> -{
> -    NAMESEG__PTS,
> -    NAMESEG__WAK,
> -    NAMESEG__S0,
> -    NAMESEG__S1,
> -    NAMESEG__S2,
> -    NAMESEG__S3,
> -    NAMESEG__S4,
> -    NAMESEG__S5,
> -    NAMESEG__TTS
> -};
> -
> #else
> extern ASL_FILE_DESC                AslGbl_FileDescs [ASL_NUM_FILES];
> extern UINT32                       AslGbl_ExceptionCount[ASL_NUM_REPORT_LEVELS];
> extern const char                   *AslGbl_OpFlagNames[ACPI_NUM_OP_FLAGS];
> -extern const char                   *AslGbl_SpecialNamedObjects[MAX_SPECIAL_NAMES];
> #endif
> -
> 
> 
> /*
> 
> Modified: head/sys/contrib/dev/acpica/compiler/aslload.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/compiler/aslload.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/compiler/aslload.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -164,7 +164,6 @@
> 
> static ACPI_STATUS
> LdLoadFieldElements (
> -    UINT32                  AmlType,
>     ACPI_PARSE_OBJECT       *Op,
>     ACPI_WALK_STATE         *WalkState);
> 
> @@ -191,10 +190,6 @@ LdCommonNamespaceEnd (
>     UINT32                  Level,
>     void                    *Context);
> 
> -static void
> -LdCheckSpecialNames (
> -    ACPI_NAMESPACE_NODE     *Node,
> -    ACPI_PARSE_OBJECT       *Op);
> 
> /*******************************************************************************
>  *
> @@ -252,8 +247,7 @@ LdLoadNamespace (
>  *
>  * FUNCTION:    LdLoadFieldElements
>  *
> - * PARAMETERS:  AmlType         - Type to search
> - *              Op              - Parent node (Field)
> + * PARAMETERS:  Op              - Parent node (Field)
>  *              WalkState       - Current walk state
>  *
>  * RETURN:      Status
> @@ -265,7 +259,6 @@ LdLoadNamespace (
> 
> static ACPI_STATUS
> LdLoadFieldElements (
> -    UINT32                  AmlType,
>     ACPI_PARSE_OBJECT       *Op,
>     ACPI_WALK_STATE         *WalkState)
> {
> @@ -281,7 +274,7 @@ LdLoadFieldElements (
>     {
>         Status = AcpiNsLookup (WalkState->ScopeInfo,
>             SourceRegion->Asl.Value.String,
> -            AmlType, ACPI_IMODE_EXECUTE,
> +            ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
>             ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
>         if (Status == AE_NOT_FOUND)
>         {
> @@ -514,15 +507,11 @@ LdNamespace1Begin (
>      */
>     switch (Op->Asl.AmlOpcode)
>     {
> -    case AML_INDEX_FIELD_OP:
> -
> -        Status = LdLoadFieldElements (ACPI_TYPE_LOCAL_REGION_FIELD, Op, WalkState);
> -        return (Status);
> -
>     case AML_BANK_FIELD_OP:
> +    case AML_INDEX_FIELD_OP:
>     case AML_FIELD_OP:
> 
> -        Status = LdLoadFieldElements (ACPI_TYPE_REGION, Op, WalkState);
> +        Status = LdLoadFieldElements (Op, WalkState);
>         return (Status);
> 
>     case AML_INT_CONNECTION_OP:
> @@ -977,10 +966,6 @@ LdNamespace1Begin (
>         }
>     }
> 
> -    /* Check special names like _WAK and _PTS */
> -
> -    LdCheckSpecialNames (Node, Op);
> -
>     if (ForceNewScope)
>     {
>         Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
> @@ -1016,42 +1001,6 @@ FinishNode:
>     }
> 
>     return_ACPI_STATUS (Status);
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION:    LdCheckSpecialNames
> - *
> - * PARAMETERS:  Node        - Node that represents the named object
> - *              Op          - Named object declaring this named object
> - *
> - * RETURN:      None
> - *
> - * DESCRIPTION: Check if certain named objects are declared in the incorrect
> - *              scope. Special named objects are listed in
> - *              AslGbl_SpecialNamedObjects and can only be declared at the root
> - *              scope.
> - *
> - ******************************************************************************/
> -
> -static void
> -LdCheckSpecialNames (
> -    ACPI_NAMESPACE_NODE     *Node,
> -    ACPI_PARSE_OBJECT       *Op)
> -{
> -    UINT32                  i;
> -
> -
> -    for (i = 0; i < MAX_SPECIAL_NAMES; i++)
> -    {
> -        if (ACPI_COMPARE_NAMESEG(Node->Name.Ascii, AslGbl_SpecialNamedObjects[i]) &&
> -            Node->Parent != AcpiGbl_RootNode)
> -        {
> -            AslError (ASL_ERROR, ASL_MSG_INVALID_SPECIAL_NAME, Op, Op->Asl.ExternalName);
> -            return;
> -        }
> -    }
> }
> 
> 
> 
> Modified: head/sys/contrib/dev/acpica/compiler/aslmessages.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/compiler/aslmessages.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/compiler/aslmessages.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -365,8 +365,7 @@ const char                      *AslCompilerMsgs [] =
> /*    ASL_MSG_REGION_LENGTH */              "Operation Region declared with zero length",
> /*    ASL_MSG_TEMPORARY_OBJECT */           "Object is created temporarily in another method and cannot be accessed",
> /*    ASL_MSG_UNDEFINED_EXTERNAL */         "Named object was declared external but the actual definition does not exist",
> -/*    ASL_MSG_BUFFER_FIELD_OVERFLOW */      "Buffer field extends beyond end of target buffer",
> -/*    ASL_MSG_INVALID_SPECIAL_NAME */       "declaration of this named object outside root scope is illegal"
> +/*    ASL_MSG_BUFFER_FIELD_OVERFLOW */        "Buffer field extends beyond end of target buffer"
> };
> 
> /* Table compiler */
> 
> Modified: head/sys/contrib/dev/acpica/compiler/aslmessages.h
> ==============================================================================
> --- head/sys/contrib/dev/acpica/compiler/aslmessages.h	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/compiler/aslmessages.h	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -368,7 +368,6 @@ typedef enum
>     ASL_MSG_TEMPORARY_OBJECT,
>     ASL_MSG_UNDEFINED_EXTERNAL,
>     ASL_MSG_BUFFER_FIELD_OVERFLOW,
> -    ASL_MSG_INVALID_SPECIAL_NAME,
> 
>     /* These messages are used by the Data Table compiler only */
> 
> 
> Modified: head/sys/contrib/dev/acpica/compiler/aslstubs.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/compiler/aslstubs.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/compiler/aslstubs.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -166,6 +166,12 @@
>  * Things like Events, Global Lock, etc. are not used
>  * by the compiler, so they are stubbed out here.
>  */
> +void
> +AcpiNsExecModuleCodeList (
> +    void)
> +{
> +}
> +
> ACPI_STATUS
> AcpiNsInitializeObjects (
>     void)
> 
> Modified: head/sys/contrib/dev/acpica/compiler/aslsupport.l
> ==============================================================================
> --- head/sys/contrib/dev/acpica/compiler/aslsupport.l	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/compiler/aslsupport.l	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -220,7 +220,7 @@ AslDoLineDirective (
> 
>     while ((c = input()) != '\n' && c != EOF)
>     {
> -        *AslGbl_LineBufPtr = (char) c;
> +        *AslGbl_LineBufPtr = c;
>         AslGbl_LineBufPtr++;
>     }
>     *AslGbl_LineBufPtr = 0;
> @@ -498,7 +498,7 @@ AslInsertLineBuffer (
> 
>         if (AcpiGbl_CaptureComments)
>         {
> -            CvProcessCommentState ((char) SourceChar);
> +            CvProcessCommentState (SourceChar);
>         }
>     }
> }
> @@ -601,7 +601,7 @@ loop:
>         AslInsertLineBuffer (c);
>         if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
>         {
> -            *StringBuffer = (char) c;
> +            *StringBuffer = c;
>             ++StringBuffer;
>         }
>         c1 = c;
> @@ -629,7 +629,7 @@ loop:
>     AslInsertLineBuffer (c);
>     if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
>     {
> -        *StringBuffer = (char) c;
> +        *StringBuffer = c;
>         ++StringBuffer;
>     }
> 
> @@ -720,7 +720,7 @@ AslDoCommentType2 (
>         AslInsertLineBuffer (c);
>         if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
>         {
> -            *StringBuffer = (char) c;
> +            *StringBuffer = c;
>             ++StringBuffer;
>         }
>     }
> @@ -878,7 +878,7 @@ DoCharacter:
>                 if (ACPI_IS_OCTAL_DIGIT (StringChar))
>                 {
>                     State = ASL_OCTAL_CONSTANT;
> -                    ConvertBuffer[0] = (char) StringChar;
> +                    ConvertBuffer[0] = StringChar;
>                     i = 1;
>                     continue;
>                 }
> @@ -934,7 +934,7 @@ DoCharacter:
> 
>             /* Append another digit of the constant */
> 
> -            ConvertBuffer[i] = (char) StringChar;
> +            ConvertBuffer[i] = StringChar;
>             i++;
>             continue;
> 
> @@ -978,7 +978,7 @@ DoCharacter:
> 
>             /* Append another digit of the constant */
> 
> -            ConvertBuffer[i] = (char) StringChar;
> +            ConvertBuffer[i] = StringChar;
>             i++;
>             continue;
> 
> @@ -989,7 +989,7 @@ DoCharacter:
> 
>         /* Save the finished character */
> 
> -        *StringBuffer = (char) StringChar;
> +        *StringBuffer = StringChar;
>         StringBuffer++;
>         if (StringBuffer >= EndBuffer)
>         {
> 
> Modified: head/sys/contrib/dev/acpica/components/dispatcher/dsinit.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/dispatcher/dsinit.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/dispatcher/dsinit.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -362,7 +362,7 @@ AcpiDsInitializeObjects (
>     if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT))
>     {
>         ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
> -            "\nACPI table initialization:\n"));
> +            "\nInitializing Namespace objects:\n"));
>     }
> 
>     /* Summary of objects initialized */
> 
> Modified: head/sys/contrib/dev/acpica/components/events/evgpe.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/events/evgpe.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/events/evgpe.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -316,7 +316,6 @@ AcpiEvMaskGpe (
>  * FUNCTION:    AcpiEvAddGpeReference
>  *
>  * PARAMETERS:  GpeEventInfo            - Add a reference to this GPE
> - *              ClearOnEnable           - Clear GPE status before enabling it
>  *
>  * RETURN:      Status
>  *
> @@ -327,8 +326,7 @@ AcpiEvMaskGpe (
> 
> ACPI_STATUS
> AcpiEvAddGpeReference (
> -    ACPI_GPE_EVENT_INFO     *GpeEventInfo,
> -    BOOLEAN                 ClearOnEnable)
> +    ACPI_GPE_EVENT_INFO     *GpeEventInfo)
> {
>     ACPI_STATUS             Status = AE_OK;
> 
> @@ -345,11 +343,6 @@ AcpiEvAddGpeReference (
>     if (GpeEventInfo->RuntimeCount == 1)
>     {
>         /* Enable on first reference */
> -
> -        if (ClearOnEnable)
> -        {
> -            (void) AcpiHwClearGpe (GpeEventInfo);
> -        }
> 
>         Status = AcpiEvUpdateGpeEnableMask (GpeEventInfo);
>         if (ACPI_SUCCESS (Status))
> 
> Modified: head/sys/contrib/dev/acpica/components/events/evgpeblk.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/events/evgpeblk.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/events/evgpeblk.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -637,7 +637,7 @@ AcpiEvInitializeGpeBlock (
>                 continue;
>             }
> 
> -            Status = AcpiEvAddGpeReference (GpeEventInfo, FALSE);
> +            Status = AcpiEvAddGpeReference (GpeEventInfo);
>             if (ACPI_FAILURE (Status))
>             {
>                 ACPI_EXCEPTION ((AE_INFO, Status,
> 
> Modified: head/sys/contrib/dev/acpica/components/events/evxface.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/events/evxface.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/events/evxface.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -1256,7 +1256,7 @@ AcpiRemoveGpeHandler (
>             ACPI_GPE_DISPATCH_NOTIFY)) &&
>         Handler->OriginallyEnabled)
>     {
> -        (void) AcpiEvAddGpeReference (GpeEventInfo, FALSE);
> +        (void) AcpiEvAddGpeReference (GpeEventInfo);
>         if (ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo))
>         {
>             /* Poll edge triggered GPEs to handle existing events */
> 
> Modified: head/sys/contrib/dev/acpica/components/events/evxfgpe.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/events/evxfgpe.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/events/evxfgpe.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -267,7 +267,7 @@ AcpiEnableGpe (
>         if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) !=
>             ACPI_GPE_DISPATCH_NONE)
>         {
> -            Status = AcpiEvAddGpeReference (GpeEventInfo, TRUE);
> +            Status = AcpiEvAddGpeReference (GpeEventInfo);
>             if (ACPI_SUCCESS (Status) &&
>                 ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo))
>             {
> 
> Modified: head/sys/contrib/dev/acpica/components/executer/exconfig.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/executer/exconfig.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/executer/exconfig.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -342,9 +342,10 @@ AcpiExLoadTableOp (
>         return_ACPI_STATUS (Status);
>     }
> 
> -    /* Complete the initialization/resolution of new objects */
> +    /* Complete the initialization/resolution of package objects */
> 
> -    AcpiNsInitializeObjects ();
> +    Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
> +        ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
> 
>     /* Parameter Data (optional) */
> 
> @@ -619,11 +620,10 @@ AcpiExLoadOp (
>         return_ACPI_STATUS (Status);
>     }
> 
> -    /* Complete the initialization/resolution of new objects */
> +    /* Complete the initialization/resolution of package objects */
> 
> -    AcpiExExitInterpreter ();
> -    AcpiNsInitializeObjects ();
> -    AcpiExEnterInterpreter ();
> +    Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
> +        ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
> 
>     /* Store the DdbHandle into the Target operand */
> 
> 
> Modified: head/sys/contrib/dev/acpica/components/namespace/nsaccess.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/namespace/nsaccess.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/namespace/nsaccess.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -184,7 +184,6 @@ AcpiNsRootInitialize (
>     ACPI_STATUS                 Status;
>     const ACPI_PREDEFINED_NAMES *InitVal = NULL;
>     ACPI_NAMESPACE_NODE         *NewNode;
> -    ACPI_NAMESPACE_NODE         *PrevNode = NULL;
>     ACPI_OPERAND_OBJECT         *ObjDesc;
>     ACPI_STRING                 Val = NULL;
> 
> @@ -214,30 +213,13 @@ AcpiNsRootInitialize (
>      */
>     AcpiGbl_RootNode = &AcpiGbl_RootNodeStruct;
> 
> -    /* Enter the predefined names in the name table */
> +    /* Enter the pre-defined names in the name table */
> 
>     ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
>         "Entering predefined entries into namespace\n"));
> 
> -    /*
> -     * Create the initial (default) namespace.
> -     * This namespace looks like something similar to this:
> -     *
> -     *   ACPI Namespace (from Namespace Root):
> -     *    0  _GPE Scope        00203160 00
> -     *    0  _PR_ Scope        002031D0 00
> -     *    0  _SB_ Device       00203240 00 Notify Object: 0020ADD8
> -     *    0  _SI_ Scope        002032B0 00
> -     *    0  _TZ_ Device       00203320 00
> -     *    0  _REV Integer      00203390 00 = 0000000000000002
> -     *    0  _OS_ String       00203488 00 Len 14 "Microsoft Windows NT"
> -     *    0  _GL_ Mutex        00203580 00 Object 002035F0
> -     *    0  _OSI Method       00203678 00 Args 1 Len 0000 Aml 00000000
> -     */
>     for (InitVal = AcpiGbl_PreDefinedNames; InitVal->Name; InitVal++)
>     {
> -        Status = AE_OK;
> -
>         /* _OSI is optional for now, will be permanent later */
> 
>         if (!strcmp (InitVal->Name, "_OSI") && !AcpiGbl_CreateOsiMethod)
> @@ -245,35 +227,17 @@ AcpiNsRootInitialize (
>             continue;
>         }
> 
> -        /*
> -         * Create, init, and link the new predefined name
> -         * Note: No need to use AcpiNsLookup here because all the
> -         * predefined names are at the root level. It is much easier to
> -         * just create and link the new node(s) here.
> -         */
> -        NewNode = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_NAMESPACE_NODE));
> -        if (!NewNode)
> +        Status = AcpiNsLookup (NULL, ACPI_CAST_PTR (char, InitVal->Name),
> +            InitVal->Type, ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH,
> +            NULL, &NewNode);
> +        if (ACPI_FAILURE (Status))
>         {
> -            Status = AE_NO_MEMORY;
> -            goto UnlockAndExit;
> +            ACPI_EXCEPTION ((AE_INFO, Status,
> +                "Could not create predefined name %s",
> +                InitVal->Name));
> +            continue;
>         }
> 
> -        ACPI_COPY_NAMESEG (NewNode->Name.Ascii, InitVal->Name);
> -        NewNode->DescriptorType = ACPI_DESC_TYPE_NAMED;
> -        NewNode->Type = InitVal->Type;
> -
> -        if (!PrevNode)
> -        {
> -            AcpiGbl_RootNodeStruct.Child = NewNode;
> -        }
> -        else
> -        {
> -            PrevNode->Peer = NewNode;
> -        }
> -
> -        NewNode->Parent = &AcpiGbl_RootNodeStruct;
> -        PrevNode = NewNode;
> -
>         /*
>          * Name entered successfully. If entry in PreDefinedNames[] specifies
>          * an initial value, create the initial value.
> @@ -322,7 +286,7 @@ AcpiNsRootInitialize (
> 
>                 NewNode->Value = ObjDesc->Method.ParamCount;
> #else
> -                /* Mark this as a very SPECIAL method (_OSI) */
> +                /* Mark this as a very SPECIAL method */
> 
>                 ObjDesc->Method.InfoFlags = ACPI_METHOD_INTERNAL_ONLY;
>                 ObjDesc->Method.Dispatch.Implementation = AcpiUtOsiImplementation;
> @@ -394,6 +358,7 @@ AcpiNsRootInitialize (
>             AcpiUtRemoveReference (ObjDesc);
>         }
>     }
> +
> 
> UnlockAndExit:
>     (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
> 
> Modified: head/sys/contrib/dev/acpica/components/namespace/nseval.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/namespace/nseval.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/namespace/nseval.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -160,7 +160,14 @@
> #define _COMPONENT          ACPI_NAMESPACE
>         ACPI_MODULE_NAME    ("nseval")
> 
> +/* Local prototypes */
> 
> +static void
> +AcpiNsExecModuleCode (
> +    ACPI_OPERAND_OBJECT     *MethodObj,
> +    ACPI_EVALUATE_INFO      *Info);
> +
> +
> /*******************************************************************************
>  *
>  * FUNCTION:    AcpiNsEvaluate
> @@ -457,4 +464,207 @@ Cleanup:
>     ACPI_FREE (Info->FullPathname);
>     Info->FullPathname = NULL;
>     return_ACPI_STATUS (Status);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiNsExecModuleCodeList
> + *
> + * PARAMETERS:  None
> + *
> + * RETURN:      None. Exceptions during method execution are ignored, since
> + *              we cannot abort a table load.
> + *
> + * DESCRIPTION: Execute all elements of the global module-level code list.
> + *              Each element is executed as a single control method.
> + *
> + * NOTE: With this option enabled, each block of detected executable AML
> + * code that is outside of any control method is wrapped with a temporary
> + * control method object and placed on a global list. The methods on this
> + * list are executed below.
> + *
> + * This function executes the module-level code for all tables only after
> + * all of the tables have been loaded. It is a legacy option and is
> + * not compatible with other ACPI implementations. See AcpiNsLoadTable.
> + *
> + * This function will be removed when the legacy option is removed.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiNsExecModuleCodeList (
> +    void)
> +{
> +    ACPI_OPERAND_OBJECT     *Prev;
> +    ACPI_OPERAND_OBJECT     *Next;
> +    ACPI_EVALUATE_INFO      *Info;
> +    UINT32                  MethodCount = 0;
> +
> +
> +    ACPI_FUNCTION_TRACE (NsExecModuleCodeList);
> +
> +
> +    /* Exit now if the list is empty */
> +
> +    Next = AcpiGbl_ModuleCodeList;
> +    if (!Next)
> +    {
> +        ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES,
> +            "Legacy MLC block list is empty\n"));
> +
> +        return_VOID;
> +    }
> +
> +    /* Allocate the evaluation information block */
> +
> +    Info = ACPI_ALLOCATE (sizeof (ACPI_EVALUATE_INFO));
> +    if (!Info)
> +    {
> +        return_VOID;
> +    }
> +
> +    /* Walk the list, executing each "method" */
> +
> +    while (Next)
> +    {
> +        Prev = Next;
> +        Next = Next->Method.Mutex;
> +
> +        /* Clear the link field and execute the method */
> +
> +        Prev->Method.Mutex = NULL;
> +        AcpiNsExecModuleCode (Prev, Info);
> +        MethodCount++;
> +
> +        /* Delete the (temporary) method object */
> +
> +        AcpiUtRemoveReference (Prev);
> +    }
> +
> +    ACPI_INFO ((
> +        "Executed %u blocks of module-level executable AML code",
> +        MethodCount));
> +
> +    ACPI_FREE (Info);
> +    AcpiGbl_ModuleCodeList = NULL;
> +    return_VOID;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiNsExecModuleCode
> + *
> + * PARAMETERS:  MethodObj           - Object container for the module-level code
> + *              Info                - Info block for method evaluation
> + *
> + * RETURN:      None. Exceptions during method execution are ignored, since
> + *              we cannot abort a table load.
> + *
> + * DESCRIPTION: Execute a control method containing a block of module-level
> + *              executable AML code. The control method is temporarily
> + *              installed to the root node, then evaluated.
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiNsExecModuleCode (
> +    ACPI_OPERAND_OBJECT     *MethodObj,
> +    ACPI_EVALUATE_INFO      *Info)
> +{
> +    ACPI_OPERAND_OBJECT     *ParentObj;
> +    ACPI_NAMESPACE_NODE     *ParentNode;
> +    ACPI_OBJECT_TYPE        Type;
> +    ACPI_STATUS             Status;
> +
> +
> +    ACPI_FUNCTION_TRACE (NsExecModuleCode);
> +
> +
> +    /*
> +     * Get the parent node. We cheat by using the NextObject field
> +     * of the method object descriptor.
> +     */
> +    ParentNode = ACPI_CAST_PTR (
> +        ACPI_NAMESPACE_NODE, MethodObj->Method.NextObject);
> +    Type = AcpiNsGetType (ParentNode);
> +
> +    /*
> +     * Get the region handler and save it in the method object. We may need
> +     * this if an operation region declaration causes a _REG method to be run.
> +     *
> +     * We can't do this in AcpiPsLinkModuleCode because
> +     * AcpiGbl_RootNode->Object is NULL at PASS1.
> +     */
> +    if ((Type == ACPI_TYPE_DEVICE) && ParentNode->Object)
> +    {
> +        MethodObj->Method.Dispatch.Handler =
> +            ParentNode->Object->Device.Handler;
> +    }
> +
> +    /* Must clear NextObject (AcpiNsAttachObject needs the field) */
> +
> +    MethodObj->Method.NextObject = NULL;
> +
> +    /* Initialize the evaluation information block */
> +
> +    memset (Info, 0, sizeof (ACPI_EVALUATE_INFO));
> +    Info->PrefixNode = ParentNode;
> +
> +    /*
> +     * Get the currently attached parent object. Add a reference,
> +     * because the ref count will be decreased when the method object
> +     * is installed to the parent node.
> +     */
> +    ParentObj = AcpiNsGetAttachedObject (ParentNode);
> +    if (ParentObj)
> +    {
> +        AcpiUtAddReference (ParentObj);
> +    }
> +
> +    /* Install the method (module-level code) in the parent node */
> +
> +    Status = AcpiNsAttachObject (ParentNode, MethodObj, ACPI_TYPE_METHOD);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        goto Exit;
> +    }
> +
> +    /* Execute the parent node as a control method */
> +
> +    Status = AcpiNsEvaluate (Info);
> +
> +    ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES,
> +        "Executed module-level code at %p\n",
> +        MethodObj->Method.AmlStart));
> +
> +    /* Delete a possible implicit return value (in slack mode) */
> +
> +    if (Info->ReturnObject)
> +    {
> +        AcpiUtRemoveReference (Info->ReturnObject);
> +    }
> +
> +    /* Detach the temporary method object */
> +
> +    AcpiNsDetachObject (ParentNode);
> +
> +    /* Restore the original parent object */
> +
> +    if (ParentObj)
> +    {
> +        Status = AcpiNsAttachObject (ParentNode, ParentObj, Type);
> +    }
> +    else
> +    {
> +        ParentNode->Type = (UINT8) Type;
> +    }
> +
> +Exit:
> +    if (ParentObj)
> +    {
> +        AcpiUtRemoveReference (ParentObj);
> +    }
> +    return_VOID;
> }
> 
> Modified: head/sys/contrib/dev/acpica/components/namespace/nsinit.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/namespace/nsinit.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/namespace/nsinit.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -212,30 +212,29 @@ AcpiNsInitializeObjects (
>     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
>         "**** Starting initialization of namespace objects ****\n"));
>     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
> -        "Final data object initialization: "));
> +        "Completing Region/Field/Buffer/Package initialization:\n"));
> 
> -    /* Clear the info block */
> +    /* Set all init info to zero */
> 
>     memset (&Info, 0, sizeof (ACPI_INIT_WALK_INFO));
> 
>     /* Walk entire namespace from the supplied root */
> 
> -    /*
> -     * TBD: will become ACPI_TYPE_PACKAGE as this type object
> -     * is now the only one that supports deferred initialization
> -     * (forward references).
> -     */
>     Status = AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
> -        ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL, &Info, NULL);
> +        ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL,
> +        &Info, NULL);
>     if (ACPI_FAILURE (Status))
>     {
>         ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace"));
>     }
> 
>     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
> -        "Namespace contains %u (0x%X) objects\n",
> -        Info.ObjectCount,
> -        Info.ObjectCount));
> +        "    Initialized %u/%u Regions %u/%u Fields %u/%u "
> +        "Buffers %u/%u Packages (%u nodes)\n",
> +        Info.OpRegionInit,  Info.OpRegionCount,
> +        Info.FieldInit,     Info.FieldCount,
> +        Info.BufferInit,    Info.BufferCount,
> +        Info.PackageInit,   Info.PackageCount, Info.ObjectCount));
> 
>     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
>         "%u Control Methods found\n%u Op Regions found\n",
> @@ -562,19 +561,35 @@ AcpiNsInitOneObject (
>     AcpiExEnterInterpreter ();
> 
>     /*
> -     * Only initialization of Package objects can be deferred, in order
> -     * to support forward references.
> +     * Each of these types can contain executable AML code within the
> +     * declaration.
>      */
>     switch (Type)
>     {
> -    case ACPI_TYPE_LOCAL_BANK_FIELD:
> +    case ACPI_TYPE_REGION:
> 
> -        /* TBD: BankFields do not require deferred init, remove this code */
> +        Info->OpRegionInit++;
> +        Status = AcpiDsGetRegionArguments (ObjDesc);
> +        break;
> 
> +    case ACPI_TYPE_BUFFER_FIELD:
> +
>         Info->FieldInit++;
> +        Status = AcpiDsGetBufferFieldArguments (ObjDesc);
> +        break;
> +
> +    case ACPI_TYPE_LOCAL_BANK_FIELD:
> +
> +        Info->FieldInit++;
>         Status = AcpiDsGetBankFieldArguments (ObjDesc);
>         break;
> 
> +    case ACPI_TYPE_BUFFER:
> +
> +        Info->BufferInit++;
> +        Status = AcpiDsGetBufferArguments (ObjDesc);
> +        break;
> +
>     case ACPI_TYPE_PACKAGE:
> 
>         /* Complete the initialization/resolution of the package object */
> @@ -585,12 +600,8 @@ AcpiNsInitOneObject (
> 
>     default:
> 
> -        /* No other types should get here */
> +        /* No other types can get here */
> 
> -        Status = AE_TYPE;
> -        ACPI_EXCEPTION ((AE_INFO, Status,
> -            "Opcode is not deferred [%4.4s] (%s)",
> -            AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Type)));
>         break;
>     }
> 
> 
> Modified: head/sys/contrib/dev/acpica/components/namespace/nsload.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/namespace/nsload.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/namespace/nsload.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -268,6 +268,18 @@ Unlock:
>     ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
>         "**** Completed Table Object Initialization\n"));
> 
> +    /*
> +     * This case handles the legacy option that groups all module-level
> +     * code blocks together and defers execution until all of the tables
> +     * are loaded. Execute all of these blocks at this time.
> +     * Execute any module-level code that was detected during the table
> +     * load phase.
> +     *
> +     * Note: this option is deprecated and will be eliminated in the
> +     * future. Use of this option can cause problems with AML code that
> +     * depends upon in-order immediate execution of module-level code.
> +     */
> +    AcpiNsExecModuleCodeList ();
>     return_ACPI_STATUS (Status);
> }
> 
> 
> Modified: head/sys/contrib/dev/acpica/components/namespace/nsutils.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/namespace/nsutils.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/namespace/nsutils.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -802,10 +802,23 @@ AcpiNsTerminate (
>     void)
> {
>     ACPI_STATUS             Status;
> +    ACPI_OPERAND_OBJECT     *Prev;
> +    ACPI_OPERAND_OBJECT     *Next;
> 
> 
>     ACPI_FUNCTION_TRACE (NsTerminate);
> 
> +
> +    /* Delete any module-level code blocks */
> +
> +    Next = AcpiGbl_ModuleCodeList;
> +    while (Next)
> +    {
> +        Prev = Next;
> +        Next = Next->Method.Mutex;
> +        Prev->Method.Mutex = NULL; /* Clear the Mutex (cheated) field */
> +        AcpiUtRemoveReference (Prev);
> +    }
> 
>     /*
>      * Free the entire namespace -- all nodes and all objects
> 
> Modified: head/sys/contrib/dev/acpica/components/tables/tbdata.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/tables/tbdata.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/tables/tbdata.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -1191,6 +1191,19 @@ AcpiTbLoadTable (
>     Status = AcpiNsLoadTable (TableIndex, ParentNode);
> 
>     /*
> +     * This case handles the legacy option that groups all module-level
> +     * code blocks together and defers execution until all of the tables
> +     * are loaded. Execute all of these blocks at this time.
> +     * Execute any module-level code that was detected during the table
> +     * load phase.
> +     *
> +     * Note: this option is deprecated and will be eliminated in the
> +     * future. Use of this option can cause problems with AML code that
> +     * depends upon in-order immediate execution of module-level code.
> +     */
> +    AcpiNsExecModuleCodeList ();
> +
> +    /*
>      * Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is
>      * responsible for discovering any new wake GPEs by running _PRW methods
>      * that may have been loaded by this table.
> 
> Modified: head/sys/contrib/dev/acpica/components/tables/tbxfload.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/tables/tbxfload.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/tables/tbxfload.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -479,13 +479,6 @@ AcpiLoadTable (
>     ACPI_INFO (("Host-directed Dynamic ACPI Table Load:"));
>     Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
>         ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex);
> -    if (ACPI_SUCCESS (Status))
> -    {
> -        /* Complete the initialization/resolution of new objects */
> -
> -        AcpiNsInitializeObjects ();
> -    }
> -
>     return_ACPI_STATUS (Status);
> }
> 
> 
> Modified: head/sys/contrib/dev/acpica/components/utilities/utinit.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/utilities/utinit.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/utilities/utinit.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -342,6 +342,7 @@ AcpiUtInitGlobals (
> 
>     /* Namespace */
> 
> +    AcpiGbl_ModuleCodeList              = NULL;
>     AcpiGbl_RootNode                    = NULL;
>     AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
>     AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
> 
> Modified: head/sys/contrib/dev/acpica/components/utilities/utxfinit.c
> ==============================================================================
> --- head/sys/contrib/dev/acpica/components/utilities/utxfinit.c	Thu Aug  1 17:37:25 2019	(r350509)
> +++ head/sys/contrib/dev/acpica/components/utilities/utxfinit.c	Thu Aug  1 17:45:43 2019	(r350510)
> @@ -381,17 +381,24 @@ AcpiInitializeObjects (
>     ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
> 
> 
> -#ifdef ACPI_OBSOLETE_BEHAVIOR
>     /*
> -     * 05/2019: Removed, initialization now happens at both object
> -     * creation and table load time
> +     * This case handles the legacy option that groups all module-level
> +     * code blocks together and defers execution until all of the tables
> +     * are loaded. Execute all of these blocks at this time.
> +     * Execute any module-level code that was detected during the table
> +     * load phase.
> +     *
> +     * Note: this option is deprecated and will be eliminated in the
> +     * future. Use of this option can cause problems with AML code that
> +     * depends upon in-order immediate execution of module-level code.
>      */
> +    AcpiNsExecModuleCodeList ();
> 
>     /*
>      * Initialize the objects that remain uninitialized. This
>      * runs the executable AML that may be part of the
> -     * declaration of these objects: OperationRegions, BufferFields,
> 
> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
> 



More information about the svn-src-head mailing list