RE: [PATCH] ACPICA: Fix Scope() op in module level code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



However, the fix really affects any control method that attempts to use the Scope() operator, correct?



>-----Original Message-----
>From: Lin, Ming M
>Sent: Friday, October 22, 2010 1:27 AM
>To: lenb
>Cc: Moore, Robert; linux-acpi; tony@xxxxxxxxxx;
>john.floyd@xxxxxxxxxxxxxxxxxxxxxx
>Subject: [PATCH] ACPICA: Fix Scope() op in module level code
>
>Len,
>
>Would you please include this patch in 2.6.37 merge?
>
>Thanks,
>Lin Ming
>---
>
>From: Bob Moore <robert.moore@xxxxxxxxx>
>
>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@xxxxxxxxx>
>Signed-off-by: Lin Ming <ming.m.lin@xxxxxxxxx>
>---
> drivers/acpi/acpica/dswexec.c |   19 +++++++++++++++++--
> 1 files changed, 17 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/acpi/acpica/dswexec.c b/drivers/acpi/acpica/dswexec.c
>index d555b37..6b0b5d0 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,
> 			 * we must enter this object into the namespace.  The
>created
> 			 * object is temporary and will be deleted upon
>completion of
> 			 * the execution of this method.
>+			 *
>+			 * Note 10/2010: Except for the Scope() op. This opcode
>does
>+			 * not actually create a new object, it refers to an
>existing
>+			 * object. However, for Scope(), we want to indeed open a
>+			 * new scope.
> 			 */
>-			status = acpi_ds_load2_begin_op(walk_state, NULL);
>+			if (op->common.aml_opcode != AML_SCOPE_OP) {
>+				status =
>+				    acpi_ds_load2_begin_op(walk_state, NULL);
>+			} else {
>+				status =
>+				    acpi_ds_scope_stack_push(op->named.node,
>+							     op->named.node->
>+							     type, walk_state);
>+				if (ACPI_FAILURE(status)) {
>+					return_ACPI_STATUS(status);
>+				}
>+			}
> 		}
>-
> 		break;
>
> 	case AML_CLASS_EXECUTE:
>

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux