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