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