Date: Thu, 1 Aug 2019 11:57:02 -0600 From: Scott Long <scottl@samsco.org> To: Jung-uk Kim <jkim@FreeBSD.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r350510 - in head/sys/contrib/dev/acpica: . compiler components/dispatcher components/events components/executer components/namespace components/tables components/utilities include Message-ID: <58DA75EF-AFA5-42C3-B441-7A9018C8E134@samsco.org> In-Reply-To: <201908011745.x71HjhAC058358@repo.freebsd.org> References: <201908011745.x71HjhAC058358@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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@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 *** >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?58DA75EF-AFA5-42C3-B441-7A9018C8E134>
