aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/dswexec.c
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2010-10-23 01:36:40 -0400
committerLen Brown <len.brown@intel.com>2010-10-23 01:36:40 -0400
commit8df3fc981dc12d9fdcaef4100a2193b605024d7a (patch)
tree7db3a590cef78fc302551c905cea6699f01962bd /drivers/acpi/acpica/dswexec.c
parent8af2cdeaeefb2712b752e223c6d3396b9894b80d (diff)
Subject: [PATCH] ACPICA: Fix Scope() op in module level code
Some Panasonic Toughbooks create nodes in module level code. Module level code is the executable AML code outside of control method, for example, below AML code creates a node \_SB.PCI0.GFX0.DD02.CUBL If (\_OSI ("Windows 2006")) { Scope (\_SB.PCI0.GFX0.DD02) { Name (CUBL, Ones) ... } } Scope() op does not actually create a new object, it refers to an existing object(\_SB.PCI0.GFX0.DD02 in above example). However, for Scope(), we want to indeed open a new scope, so the child nodes(CUBL in above example) can be created correctly under it. https://bugzilla.kernel.org/show_bug.cgi?id=19462 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/dswexec.c')
-rw-r--r--drivers/acpi/acpica/dswexec.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/acpi/acpica/dswexec.c b/drivers/acpi/acpica/dswexec.c
index d555b374e314..6b0b5d08d97a 100644
--- a/drivers/acpi/acpica/dswexec.c
+++ b/drivers/acpi/acpica/dswexec.c
@@ -300,10 +300,25 @@ acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
300 * we must enter this object into the namespace. The created 300 * we must enter this object into the namespace. The created
301 * object is temporary and will be deleted upon completion of 301 * object is temporary and will be deleted upon completion of
302 * the execution of this method. 302 * the execution of this method.
303 *
304 * Note 10/2010: Except for the Scope() op. This opcode does
305 * not actually create a new object, it refers to an existing
306 * object. However, for Scope(), we want to indeed open a
307 * new scope.
303 */ 308 */
304 status = acpi_ds_load2_begin_op(walk_state, NULL); 309 if (op->common.aml_opcode != AML_SCOPE_OP) {
310 status =
311 acpi_ds_load2_begin_op(walk_state, NULL);
312 } else {
313 status =
314 acpi_ds_scope_stack_push(op->named.node,
315 op->named.node->
316 type, walk_state);
317 if (ACPI_FAILURE(status)) {
318 return_ACPI_STATUS(status);
319 }
320 }
305 } 321 }
306
307 break; 322 break;
308 323
309 case AML_CLASS_EXECUTE: 324 case AML_CLASS_EXECUTE: