diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-07-10 17:34:01 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-07-11 10:17:37 -0400 |
commit | e8807e4470e6b4230b24c537d7179a945f0f7c40 (patch) | |
tree | 7108fb6af43dd62bee00dc89d5016c53416d9455 | |
parent | 92d21ac74a9e3c09b0b01c764e530657e4c85c49 (diff) |
Revert "ACPICA: Namespace: Fix namespace/interpreter lock ordering"
Revert commit 45209046c47b (ACPICA: Namespace: Fix namespace/interpreter
lock ordering) that renders Dell Precision 5510 with the latest (1.2.10)
BIOS applied unable to boot.
Fixes: 45209046c47b (ACPICA: Namespace: Fix namespace/interpreter lock ordering)
Link: https://bugzilla.kernel.org/show_bug.cgi?id=121701
Reported-by: Greg White <gwhite@kupulau.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | drivers/acpi/acpica/nsload.c | 7 | ||||
-rw-r--r-- | drivers/acpi/acpica/nsparse.c | 9 |
2 files changed, 8 insertions, 8 deletions
diff --git a/drivers/acpi/acpica/nsload.c b/drivers/acpi/acpica/nsload.c index 297f6aacd7d4..b5e2b0ada0ab 100644 --- a/drivers/acpi/acpica/nsload.c +++ b/drivers/acpi/acpica/nsload.c | |||
@@ -46,7 +46,6 @@ | |||
46 | #include "acnamesp.h" | 46 | #include "acnamesp.h" |
47 | #include "acdispat.h" | 47 | #include "acdispat.h" |
48 | #include "actables.h" | 48 | #include "actables.h" |
49 | #include "acinterp.h" | ||
50 | 49 | ||
51 | #define _COMPONENT ACPI_NAMESPACE | 50 | #define _COMPONENT ACPI_NAMESPACE |
52 | ACPI_MODULE_NAME("nsload") | 51 | ACPI_MODULE_NAME("nsload") |
@@ -79,8 +78,6 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node) | |||
79 | 78 | ||
80 | ACPI_FUNCTION_TRACE(ns_load_table); | 79 | ACPI_FUNCTION_TRACE(ns_load_table); |
81 | 80 | ||
82 | acpi_ex_enter_interpreter(); | ||
83 | |||
84 | /* | 81 | /* |
85 | * Parse the table and load the namespace with all named | 82 | * Parse the table and load the namespace with all named |
86 | * objects found within. Control methods are NOT parsed | 83 | * objects found within. Control methods are NOT parsed |
@@ -92,7 +89,7 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node) | |||
92 | */ | 89 | */ |
93 | status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); | 90 | status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); |
94 | if (ACPI_FAILURE(status)) { | 91 | if (ACPI_FAILURE(status)) { |
95 | goto unlock_interp; | 92 | return_ACPI_STATUS(status); |
96 | } | 93 | } |
97 | 94 | ||
98 | /* If table already loaded into namespace, just return */ | 95 | /* If table already loaded into namespace, just return */ |
@@ -133,8 +130,6 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node) | |||
133 | 130 | ||
134 | unlock: | 131 | unlock: |
135 | (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); | 132 | (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); |
136 | unlock_interp: | ||
137 | (void)acpi_ex_exit_interpreter(); | ||
138 | 133 | ||
139 | if (ACPI_FAILURE(status)) { | 134 | if (ACPI_FAILURE(status)) { |
140 | return_ACPI_STATUS(status); | 135 | return_ACPI_STATUS(status); |
diff --git a/drivers/acpi/acpica/nsparse.c b/drivers/acpi/acpica/nsparse.c index f631a47724f0..1783cd7e1446 100644 --- a/drivers/acpi/acpica/nsparse.c +++ b/drivers/acpi/acpica/nsparse.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #include "acparser.h" | 47 | #include "acparser.h" |
48 | #include "acdispat.h" | 48 | #include "acdispat.h" |
49 | #include "actables.h" | 49 | #include "actables.h" |
50 | #include "acinterp.h" | ||
50 | 51 | ||
51 | #define _COMPONENT ACPI_NAMESPACE | 52 | #define _COMPONENT ACPI_NAMESPACE |
52 | ACPI_MODULE_NAME("nsparse") | 53 | ACPI_MODULE_NAME("nsparse") |
@@ -170,6 +171,8 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node) | |||
170 | 171 | ||
171 | ACPI_FUNCTION_TRACE(ns_parse_table); | 172 | ACPI_FUNCTION_TRACE(ns_parse_table); |
172 | 173 | ||
174 | acpi_ex_enter_interpreter(); | ||
175 | |||
173 | /* | 176 | /* |
174 | * AML Parse, pass 1 | 177 | * AML Parse, pass 1 |
175 | * | 178 | * |
@@ -185,7 +188,7 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node) | |||
185 | status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, | 188 | status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, |
186 | table_index, start_node); | 189 | table_index, start_node); |
187 | if (ACPI_FAILURE(status)) { | 190 | if (ACPI_FAILURE(status)) { |
188 | return_ACPI_STATUS(status); | 191 | goto error_exit; |
189 | } | 192 | } |
190 | 193 | ||
191 | /* | 194 | /* |
@@ -201,8 +204,10 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node) | |||
201 | status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, | 204 | status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, |
202 | table_index, start_node); | 205 | table_index, start_node); |
203 | if (ACPI_FAILURE(status)) { | 206 | if (ACPI_FAILURE(status)) { |
204 | return_ACPI_STATUS(status); | 207 | goto error_exit; |
205 | } | 208 | } |
206 | 209 | ||
210 | error_exit: | ||
211 | acpi_ex_exit_interpreter(); | ||
207 | return_ACPI_STATUS(status); | 212 | return_ACPI_STATUS(status); |
208 | } | 213 | } |