Rev 1498 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1498 | Rev 2216 | ||
---|---|---|---|
Line 6... | Line 6... | ||
6 | 6 | ||
7 | /****************************************************************************** |
7 | /****************************************************************************** |
8 | * |
8 | * |
9 | * 1. Copyright Notice |
9 | * 1. Copyright Notice |
10 | * |
10 | * |
11 | * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. |
11 | * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp. |
12 | * All rights reserved. |
12 | * All rights reserved. |
13 | * |
13 | * |
14 | * 2. License |
14 | * 2. License |
15 | * |
15 | * |
Line 126... | Line 126... | ||
126 | #include "acpi.h" |
126 | #include "acpi.h" |
127 | #include "accommon.h" |
127 | #include "accommon.h" |
128 | #include "acparser.h" |
128 | #include "acparser.h" |
129 | #include "acdispat.h" |
129 | #include "acdispat.h" |
130 | #include "amlcode.h" |
130 | #include "amlcode.h" |
131 | #include "acnamesp.h" |
- | |
132 | #include "acinterp.h" |
131 | #include "acinterp.h" |
Line 133... | Line 132... | ||
133 | 132 | ||
134 | #define _COMPONENT ACPI_PARSER |
133 | #define _COMPONENT ACPI_PARSER |
Line 633... | Line 632... | ||
633 | WalkState->MethodNode, NULL, Status); |
632 | WalkState->MethodNode, NULL, Status); |
Line 634... | Line 633... | ||
634 | 633 | ||
Line 635... | Line 634... | ||
635 | /* Check for possible multi-thread reentrancy problem */ |
634 | /* Check for possible multi-thread reentrancy problem */ |
636 | 635 | ||
637 | if ((Status == AE_ALREADY_EXISTS) && |
636 | if ((Status == AE_ALREADY_EXISTS) && |
638 | (!WalkState->MethodDesc->Method.Mutex)) |
- | |
639 | { |
- | |
640 | ACPI_INFO ((AE_INFO, |
- | |
641 | "Marking method %4.4s as Serialized because of AE_ALREADY_EXISTS error", |
- | |
642 | WalkState->MethodNode->Name.Ascii)); |
637 | (!(WalkState->MethodDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED))) |
643 | 638 | { |
|
644 | /* |
639 | /* |
645 | * Method tried to create an object twice. The probable cause is |
- | |
646 | * that the method cannot handle reentrancy. |
- | |
647 | * |
640 | * Method is not serialized and tried to create an object |
648 | * The method is marked NotSerialized, but it tried to create |
641 | * twice. The probable cause is that the method cannot |
649 | * a named object, causing the second thread entrance to fail. |
- | |
650 | * Workaround this problem by marking the method permanently |
642 | * handle reentrancy. Mark as "pending serialized" now, and |
651 | * as Serialized. |
643 | * then mark "serialized" when the last thread exits. |
652 | */ |
644 | */ |
653 | WalkState->MethodDesc->Method.MethodFlags |= AML_METHOD_SERIALIZED; |
645 | WalkState->MethodDesc->Method.InfoFlags |= |
654 | WalkState->MethodDesc->Method.SyncLevel = 0; |
646 | ACPI_METHOD_SERIALIZED_PENDING; |
Line 655... | Line 647... | ||
655 | } |
647 | } |