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

Alexander Motin mavbsd at gmail.com
Thu Aug 1 14:05:04 UTC 2019


I was just got the same outcome, investigating my X11DPI-NT board boot
issue, same as reported on current@ thread "Re: Boot still broken from
r349133-r349160 - Was re:(Problem with USB after r349133)".  Revert of
this commit solves the issue, otherwise boot stops and I see the same
backtraces and messages as Scott.

On 01.08.2019 09:54, Scott Long wrote:
> Hi,
> 
> I need to ask that this be backed out.  I have two systems that are failing
> to boot when this revision is present.  One I can’t debug because it causes
> USB to fail to probe, leaving me without a working console (and no network
> access for other reasons).  The other fails in a different way and livelocks
> the system:
> 
> 
> ixl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
> 	options=e507bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6>
> 	ether ac:1f:6b:0a:4a:57
> 	media: Ethernet autoselect (1000baseT <full-duplex>)
> 	status: active
> 	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
> Starting devd.
> 
> Here the boot hangs.  If I hit Ctrl-C, I get this:
> 
> ^CACPI Error: AE_ERROR, Thread 100315 could not acquire Mutex [ACPI_MTX_Namespace] (0x1) (20190703/utmutex-434)
> ACPI Error: AE_ERROR, Thread 100315 could not acquire Mutex [ACPI_MTX_Namespace] (0x1) (20190703/utmutex-434)
> ACPI Error: AE_ERROR, Thread 100315 could not acquire Mutex [ACPI_MTX_Namespace] (0x1) (20190703/utmutex-434)
> 
> Breaking into DDB gives this:
> db> bt
> Tracing pid 11 tid 100012 td 0xfffff800038a85a0
> acpi_cpu_idle_mwait() at acpi_cpu_idle_mwait+0x70/frame 0xfffffe00005a4180
> acpi_cpu_idle() at acpi_cpu_idle+0x183/frame 0xfffffe00005a41d0
> cpu_idle_acpi() at cpu_idle_acpi+0x3f/frame 0xfffffe00005a41f0
> cpu_idle() at cpu_idle+0xa6/frame 0xfffffe00005a4210
> sched_idletd() at sched_idletd+0x442/frame 0xfffffe00005a42f0
> fork_exit() at fork_exit+0x83/frame 0xfffffe00005a4330
> fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00005a4330
> --- trap 0, rip = 0, rsp = 0, rbp = 0 ---
> db> ps
>   pid  ppid  pgrp   uid  state   wmesg   wchan               cmd
>   401   399    59     0  S+      piperd  0xfffff80005214000  sort
>   400   399    59     0  S+      acmtx   0xfffff80003770280  devmatch
>> 100247                   S       acmtx   0xfffff80003770280  [usbus0]
> ...
> db> bt 100315
> Thread 100315 not found
> db> bt 400
> Tracing pid 400 tid 100339 td 0xfffff8002a52c5a0
> sched_switch() at sched_switch+0x64a/frame 0xfffffe00b4c21d20
> mi_switch() at mi_switch+0xe2/frame 0xfffffe00b4c21d50
> sleepq_catch_signals() at sleepq_catch_signals+0x425/frame 0xfffffe00b4c21da0
> sleepq_wait_sig() at sleepq_wait_sig+0xf/frame 0xfffffe00b4c21dd0
> _sleep() at _sleep+0x1bf/frame 0xfffffe00b4c21e50
> AcpiOsAcquireMutex() at AcpiOsAcquireMutex+0xab/frame 0xfffffe00b4c21ea0
> AcpiUtAcquireMutex() at AcpiUtAcquireMutex+0x3d/frame 0xfffffe00b4c21ee0
> AcpiGetObjectInfo() at AcpiGetObjectInfo+0x51/frame 0xfffffe00b4c21f60
> acpi_child_pnpinfo_str_method() at acpi_child_pnpinfo_str_method+0x24/frame 0xfffffe00b4c21f90
> sysctl_devices() at sysctl_devices+0x215/frame 0xfffffe00b4c21fe0
> sysctl_root_handler_locked() at sysctl_root_handler_locked+0x8b/frame 0xfffffe00b4c22020
> sysctl_root() at sysctl_root+0x24d/frame 0xfffffe00b4c220a0
> userland_sysctl() at userland_sysctl+0x17a/frame 0xfffffe00b4c22150
> sys___sysctl() at sys___sysctl+0x5f/frame 0xfffffe00b4c22200
> amd64_syscall() at amd64_syscall+0x3b0/frame 0xfffffe00b4c22330
> fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe00b4c22330
> --- syscall (202, FreeBSD ELF64, sys___sysctl), rip = 0x80041cb2a, rsp = 0x7fffffffda78, rbp = 0x7fffffffdab0 ---
> db> bt 100247
> Tracing pid 45 tid 100247 td 0xfffff800077045a0
> sched_switch() at sched_switch+0x64a/frame 0xfffffe00a7f76dc0
> mi_switch() at mi_switch+0xe2/frame 0xfffffe00a7f76df0
> sleepq_catch_signals() at sleepq_catch_signals+0x425/frame 0xfffffe00a7f76e40
> sleepq_wait_sig() at sleepq_wait_sig+0xf/frame 0xfffffe00a7f76e70
> _sleep() at _sleep+0x1bf/frame 0xfffffe00a7f76ef0
> AcpiOsAcquireMutex() at AcpiOsAcquireMutex+0xab/frame 0xfffffe00a7f76f40
> AcpiUtAcquireMutex() at AcpiUtAcquireMutex+0x3d/frame 0xfffffe00a7f76f80
> AcpiNsGetNode() at AcpiNsGetNode+0x27/frame 0xfffffe00a7f77020
> AcpiNsEvaluate() at AcpiNsEvaluate+0x1a7/frame 0xfffffe00a7f77060
> AcpiEvaluateObject() at AcpiEvaluateObject+0x196/frame 0xfffffe00a7f770c0
> acpi_GetInteger() at acpi_GetInteger+0x3f/frame 0xfffffe00a7f77120
> acpi_get_domain() at acpi_get_domain+0x92/frame 0xfffffe00a7f77170
> device_attach() at device_attach+0x2e7/frame 0xfffffe00a7f771c0
> device_probe_and_attach() at device_probe_and_attach+0x42/frame 0xfffffe00a7f771f0
> usb_probe_and_attach() at usb_probe_and_attach+0x282/frame 0xfffffe00a7f77280
> usb_bus_attach() at usb_bus_attach+0x1b3/frame 0xfffffe00a7f772b0
> usb_process() at usb_process+0xf5/frame 0xfffffe00a7f772f0
> fork_exit() at fork_exit+0x83/frame 0xfffffe00a7f77330
> fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00a7f77330
> --- trap 0, rip = 0, rsp = 0, rbp = 0 ---
> db> 
> 
> It looks like there’s a leaked mutex inside of ACPI.  Not sure
> what’s up with thread 100315, but thread 400 is a dead
> give-away.  If I revert the 20190703 ACPICA import then
> everything is fine.  I don’t know yet if this is the same problem
> on my first system, but both work fine without this revision,
> and the hung usb thread is also very telling.
> 
> Please consider reverting this from HEAD while we debug it
> further.
> 
> Thanks,
> Scott
> 
> 
>> On Jul 9, 2019, at 12:02 PM, Jung-uk Kim <jkim at FreeBSD.org> wrote:
>>
>> Author: jkim
>> Date: Tue Jul  9 18:02:36 2019
>> New Revision: 349863
>> URL: https://svnweb.freebsd.org/changeset/base/349863
>>
>> Log:
>>  MFV:	r349861
>>
>>  Import ACPICA 20190703.
>>
>> 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
>> Directory Properties:
>>  head/sys/contrib/dev/acpica/   (props changed)
>>
>> Modified: head/sys/contrib/dev/acpica/changes.txt
>> ==============================================================================
>> --- head/sys/contrib/dev/acpica/changes.txt	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/changes.txt	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -1,4 +1,53 @@
>> ----------------------------------------
>> +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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/compiler/asldefine.h	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -298,4 +298,20 @@
>> #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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/compiler/aslglobal.h	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -223,11 +223,26 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/compiler/aslload.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -164,6 +164,7 @@
>>
>> static ACPI_STATUS
>> LdLoadFieldElements (
>> +    UINT32                  AmlType,
>>     ACPI_PARSE_OBJECT       *Op,
>>     ACPI_WALK_STATE         *WalkState);
>>
>> @@ -190,6 +191,10 @@ LdCommonNamespaceEnd (
>>     UINT32                  Level,
>>     void                    *Context);
>>
>> +static void
>> +LdCheckSpecialNames (
>> +    ACPI_NAMESPACE_NODE     *Node,
>> +    ACPI_PARSE_OBJECT       *Op);
>>
>> /*******************************************************************************
>>  *
>> @@ -247,7 +252,8 @@ LdLoadNamespace (
>>  *
>>  * FUNCTION:    LdLoadFieldElements
>>  *
>> - * PARAMETERS:  Op              - Parent node (Field)
>> + * PARAMETERS:  AmlType         - Type to search
>> + *              Op              - Parent node (Field)
>>  *              WalkState       - Current walk state
>>  *
>>  * RETURN:      Status
>> @@ -259,6 +265,7 @@ LdLoadNamespace (
>>
>> static ACPI_STATUS
>> LdLoadFieldElements (
>> +    UINT32                  AmlType,
>>     ACPI_PARSE_OBJECT       *Op,
>>     ACPI_WALK_STATE         *WalkState)
>> {
>> @@ -274,7 +281,7 @@ LdLoadFieldElements (
>>     {
>>         Status = AcpiNsLookup (WalkState->ScopeInfo,
>>             SourceRegion->Asl.Value.String,
>> -            ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
>> +            AmlType, ACPI_IMODE_EXECUTE,
>>             ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
>>         if (Status == AE_NOT_FOUND)
>>         {
>> @@ -507,11 +514,15 @@ LdNamespace1Begin (
>>      */
>>     switch (Op->Asl.AmlOpcode)
>>     {
>> -    case AML_BANK_FIELD_OP:
>>     case AML_INDEX_FIELD_OP:
>> +
>> +        Status = LdLoadFieldElements (ACPI_TYPE_LOCAL_REGION_FIELD, Op, WalkState);
>> +        return (Status);
>> +
>> +    case AML_BANK_FIELD_OP:
>>     case AML_FIELD_OP:
>>
>> -        Status = LdLoadFieldElements (Op, WalkState);
>> +        Status = LdLoadFieldElements (ACPI_TYPE_REGION, Op, WalkState);
>>         return (Status);
>>
>>     case AML_INT_CONNECTION_OP:
>> @@ -966,6 +977,10 @@ LdNamespace1Begin (
>>         }
>>     }
>>
>> +    /* Check special names like _WAK and _PTS */
>> +
>> +    LdCheckSpecialNames (Node, Op);
>> +
>>     if (ForceNewScope)
>>     {
>>         Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
>> @@ -1001,6 +1016,42 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/compiler/aslmessages.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -365,7 +365,8 @@ 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_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"
>> };
>>
>> /* Table compiler */
>>
>> Modified: head/sys/contrib/dev/acpica/compiler/aslmessages.h
>> ==============================================================================
>> --- head/sys/contrib/dev/acpica/compiler/aslmessages.h	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/compiler/aslmessages.h	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -368,6 +368,7 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/compiler/aslstubs.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -166,12 +166,6 @@
>>  * 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/compiler/aslsupport.l	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -220,7 +220,7 @@ AslDoLineDirective (
>>
>>     while ((c = input()) != '\n' && c != EOF)
>>     {
>> -        *AslGbl_LineBufPtr = c;
>> +        *AslGbl_LineBufPtr = (char) c;
>>         AslGbl_LineBufPtr++;
>>     }
>>     *AslGbl_LineBufPtr = 0;
>> @@ -498,7 +498,7 @@ AslInsertLineBuffer (
>>
>>         if (AcpiGbl_CaptureComments)
>>         {
>> -            CvProcessCommentState (SourceChar);
>> +            CvProcessCommentState ((char) SourceChar);
>>         }
>>     }
>> }
>> @@ -601,7 +601,7 @@ loop:
>>         AslInsertLineBuffer (c);
>>         if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
>>         {
>> -            *StringBuffer = c;
>> +            *StringBuffer = (char) c;
>>             ++StringBuffer;
>>         }
>>         c1 = c;
>> @@ -629,7 +629,7 @@ loop:
>>     AslInsertLineBuffer (c);
>>     if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
>>     {
>> -        *StringBuffer = c;
>> +        *StringBuffer = (char) c;
>>         ++StringBuffer;
>>     }
>>
>> @@ -720,7 +720,7 @@ AslDoCommentType2 (
>>         AslInsertLineBuffer (c);
>>         if (AcpiGbl_CaptureComments && CurrentState.CaptureComments)
>>         {
>> -            *StringBuffer = c;
>> +            *StringBuffer = (char) c;
>>             ++StringBuffer;
>>         }
>>     }
>> @@ -878,7 +878,7 @@ DoCharacter:
>>                 if (ACPI_IS_OCTAL_DIGIT (StringChar))
>>                 {
>>                     State = ASL_OCTAL_CONSTANT;
>> -                    ConvertBuffer[0] = StringChar;
>> +                    ConvertBuffer[0] = (char) StringChar;
>>                     i = 1;
>>                     continue;
>>                 }
>> @@ -934,7 +934,7 @@ DoCharacter:
>>
>>             /* Append another digit of the constant */
>>
>> -            ConvertBuffer[i] = StringChar;
>> +            ConvertBuffer[i] = (char) StringChar;
>>             i++;
>>             continue;
>>
>> @@ -978,7 +978,7 @@ DoCharacter:
>>
>>             /* Append another digit of the constant */
>>
>> -            ConvertBuffer[i] = StringChar;
>> +            ConvertBuffer[i] = (char) StringChar;
>>             i++;
>>             continue;
>>
>> @@ -989,7 +989,7 @@ DoCharacter:
>>
>>         /* Save the finished character */
>>
>> -        *StringBuffer = StringChar;
>> +        *StringBuffer = (char) StringChar;
>>         StringBuffer++;
>>         if (StringBuffer >= EndBuffer)
>>         {
>>
>> Modified: head/sys/contrib/dev/acpica/components/dispatcher/dsinit.c
>> ==============================================================================
>> --- head/sys/contrib/dev/acpica/components/dispatcher/dsinit.c	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/dispatcher/dsinit.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -362,7 +362,7 @@ AcpiDsInitializeObjects (
>>     if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_DSDT))
>>     {
>>         ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
>> -            "\nInitializing Namespace objects:\n"));
>> +            "\nACPI table initialization:\n"));
>>     }
>>
>>     /* Summary of objects initialized */
>>
>> Modified: head/sys/contrib/dev/acpica/components/events/evgpe.c
>> ==============================================================================
>> --- head/sys/contrib/dev/acpica/components/events/evgpe.c	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/events/evgpe.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -316,6 +316,7 @@ AcpiEvMaskGpe (
>>  * FUNCTION:    AcpiEvAddGpeReference
>>  *
>>  * PARAMETERS:  GpeEventInfo            - Add a reference to this GPE
>> + *              ClearOnEnable           - Clear GPE status before enabling it
>>  *
>>  * RETURN:      Status
>>  *
>> @@ -326,7 +327,8 @@ AcpiEvMaskGpe (
>>
>> ACPI_STATUS
>> AcpiEvAddGpeReference (
>> -    ACPI_GPE_EVENT_INFO     *GpeEventInfo)
>> +    ACPI_GPE_EVENT_INFO     *GpeEventInfo,
>> +    BOOLEAN                 ClearOnEnable)
>> {
>>     ACPI_STATUS             Status = AE_OK;
>>
>> @@ -343,6 +345,11 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/events/evgpeblk.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -637,7 +637,7 @@ AcpiEvInitializeGpeBlock (
>>                 continue;
>>             }
>>
>> -            Status = AcpiEvAddGpeReference (GpeEventInfo);
>> +            Status = AcpiEvAddGpeReference (GpeEventInfo, FALSE);
>>             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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/events/evxface.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -1256,7 +1256,7 @@ AcpiRemoveGpeHandler (
>>             ACPI_GPE_DISPATCH_NOTIFY)) &&
>>         Handler->OriginallyEnabled)
>>     {
>> -        (void) AcpiEvAddGpeReference (GpeEventInfo);
>> +        (void) AcpiEvAddGpeReference (GpeEventInfo, FALSE);
>>         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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/events/evxfgpe.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -267,7 +267,7 @@ AcpiEnableGpe (
>>         if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) !=
>>             ACPI_GPE_DISPATCH_NONE)
>>         {
>> -            Status = AcpiEvAddGpeReference (GpeEventInfo);
>> +            Status = AcpiEvAddGpeReference (GpeEventInfo, TRUE);
>>             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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/executer/exconfig.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -342,10 +342,9 @@ AcpiExLoadTableOp (
>>         return_ACPI_STATUS (Status);
>>     }
>>
>> -    /* Complete the initialization/resolution of package objects */
>> +    /* Complete the initialization/resolution of new objects */
>>
>> -    Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
>> -        ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
>> +    AcpiNsInitializeObjects ();
>>
>>     /* Parameter Data (optional) */
>>
>> @@ -620,10 +619,11 @@ AcpiExLoadOp (
>>         return_ACPI_STATUS (Status);
>>     }
>>
>> -    /* Complete the initialization/resolution of package objects */
>> +    /* Complete the initialization/resolution of new objects */
>>
>> -    Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
>> -        ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
>> +    AcpiExExitInterpreter ();
>> +    AcpiNsInitializeObjects ();
>> +    AcpiExEnterInterpreter ();
>>
>>     /* 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/namespace/nsaccess.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -184,6 +184,7 @@ 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;
>>
>> @@ -213,13 +214,30 @@ AcpiNsRootInitialize (
>>      */
>>     AcpiGbl_RootNode = &AcpiGbl_RootNodeStruct;
>>
>> -    /* Enter the pre-defined names in the name table */
>> +    /* Enter the predefined 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)
>> @@ -227,17 +245,35 @@ AcpiNsRootInitialize (
>>             continue;
>>         }
>>
>> -        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))
>> +        /*
>> +         * 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)
>>         {
>> -            ACPI_EXCEPTION ((AE_INFO, Status,
>> -                "Could not create predefined name %s",
>> -                InitVal->Name));
>> -            continue;
>> +            Status = AE_NO_MEMORY;
>> +            goto UnlockAndExit;
>>         }
>>
>> +        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.
>> @@ -286,7 +322,7 @@ AcpiNsRootInitialize (
>>
>>                 NewNode->Value = ObjDesc->Method.ParamCount;
>> #else
>> -                /* Mark this as a very SPECIAL method */
>> +                /* Mark this as a very SPECIAL method (_OSI) */
>>
>>                 ObjDesc->Method.InfoFlags = ACPI_METHOD_INTERNAL_ONLY;
>>                 ObjDesc->Method.Dispatch.Implementation = AcpiUtOsiImplementation;
>> @@ -358,7 +394,6 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/namespace/nseval.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -160,14 +160,7 @@
>> #define _COMPONENT          ACPI_NAMESPACE
>>         ACPI_MODULE_NAME    ("nseval")
>>
>> -/* Local prototypes */
>>
>> -static void
>> -AcpiNsExecModuleCode (
>> -    ACPI_OPERAND_OBJECT     *MethodObj,
>> -    ACPI_EVALUATE_INFO      *Info);
>> -
>> -
>> /*******************************************************************************
>>  *
>>  * FUNCTION:    AcpiNsEvaluate
>> @@ -464,207 +457,4 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/namespace/nsinit.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -212,29 +212,30 @@ AcpiNsInitializeObjects (
>>     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
>>         "**** Starting initialization of namespace objects ****\n"));
>>     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
>> -        "Completing Region/Field/Buffer/Package initialization:\n"));
>> +        "Final data object initialization: "));
>>
>> -    /* Set all init info to zero */
>> +    /* Clear the info block */
>>
>>     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,
>> -        "    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));
>> +        "Namespace contains %u (0x%X) objects\n",
>> +        Info.ObjectCount,
>> +        Info.ObjectCount));
>>
>>     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
>>         "%u Control Methods found\n%u Op Regions found\n",
>> @@ -561,35 +562,19 @@ AcpiNsInitOneObject (
>>     AcpiExEnterInterpreter ();
>>
>>     /*
>> -     * Each of these types can contain executable AML code within the
>> -     * declaration.
>> +     * Only initialization of Package objects can be deferred, in order
>> +     * to support forward references.
>>      */
>>     switch (Type)
>>     {
>> -    case ACPI_TYPE_REGION:
>> +    case ACPI_TYPE_LOCAL_BANK_FIELD:
>>
>> -        Info->OpRegionInit++;
>> -        Status = AcpiDsGetRegionArguments (ObjDesc);
>> -        break;
>> +        /* TBD: BankFields do not require deferred init, remove this code */
>>
>> -    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 */
>> @@ -600,8 +585,12 @@ AcpiNsInitOneObject (
>>
>>     default:
>>
>> -        /* No other types can get here */
>> +        /* No other types should 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/namespace/nsload.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -268,18 +268,6 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/namespace/nsutils.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -802,23 +802,10 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/tables/tbdata.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -1191,19 +1191,6 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/tables/tbxfload.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -479,6 +479,13 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/utilities/utinit.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -342,7 +342,6 @@ 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	Tue Jul  9 17:18:24 2019	(r349862)
>> +++ head/sys/contrib/dev/acpica/components/utilities/utxfinit.c	Tue Jul  9 18:02:36 2019	(r349863)
>> @@ -381,24 +381,17 @@ AcpiInitializeObjects (
>>     ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
>>
>>
>> +#ifdef ACPI_OBSOLETE_BEHAVIOR
>>     /*
>> -     * 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.
>> +     * 05/2019: Removed, initialization now happens at both object
>> +     * creation and table load time
>>      */
>> -    AcpiNsExecModuleCodeList ();
>>
>>     /*
>>      * Initialize the objects that remain uninitialized. This
>>      * runs the executable AML that may be part of the
>> -     * declaration of these objects:
>>
>> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
>>
> 
> 

-- 
Alexander Motin


More information about the svn-src-head mailing list