Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52fc0b02 authored by Bob Moore's avatar Bob Moore Committed by Len Brown
Browse files

[ACPI] ACPICA 20060210

Removed a couple of extraneous ACPI_ERROR messages that
appeared during normal execution. These became apparent
after the conversion from ACPI_DEBUG_PRINT.

Fixed a problem where the CreateField operator could hang
if the BitIndex or NumBits parameter referred to a named
object. From Valery Podrezov.
http://bugzilla.kernel.org/show_bug.cgi?id=5359

Fixed a problem where a DeRefOf operation on a buffer
object incorrectly failed with an exception. This also
fixes a couple of related RefOf and DeRefOf issues.
From Valery Podrezov.
http://bugzilla.kernel.org/show_bug.cgi?id=5360
http://bugzilla.kernel.org/show_bug.cgi?id=5387
http://bugzilla.kernel.org/show_bug.cgi?id=5392

Fixed a problem where the AE_BUFFER_LIMIT exception was
returned instead of AE_STRING_LIMIT on an out-of-bounds
Index() operation. From Valery Podrezov.
http://bugzilla.kernel.org/show_bug.cgi?id=5480

Implemented a memory cleanup at the end of the execution
of each iteration of an AML While() loop, preventing the
accumulation of outstanding objects. From Valery Podrezov.
http://bugzilla.kernel.org/show_bug.cgi?id=5427

Eliminated a chunk of duplicate code in the object
resolution code. From Valery Podrezov.
http://bugzilla.kernel.org/show_bug.cgi?id=5336



Fixed several warnings during the 64-bit code generation.

Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 46358614
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -425,6 +425,7 @@ acpi_ds_init_field_objects(union acpi_parse_object *op,
	 * Walk the list of entries in the field_list
	 * Walk the list of entries in the field_list
	 */
	 */
	while (arg) {
	while (arg) {

		/* Ignore OFFSET and ACCESSAS terms here */
		/* Ignore OFFSET and ACCESSAS terms here */


		if (arg->common.aml_opcode == AML_INT_NAMEDFIELD_OP) {
		if (arg->common.aml_opcode == AML_INT_NAMEDFIELD_OP) {
+5 −0
Original line number Original line Diff line number Diff line
@@ -81,6 +81,7 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
	/* Invoke the global exception handler */
	/* Invoke the global exception handler */


	if (acpi_gbl_exception_handler) {
	if (acpi_gbl_exception_handler) {

		/* Exit the interpreter, allow handler to execute methods */
		/* Exit the interpreter, allow handler to execute methods */


		acpi_ex_exit_interpreter();
		acpi_ex_exit_interpreter();
@@ -100,6 +101,7 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
	}
	}
#ifdef ACPI_DISASSEMBLER
#ifdef ACPI_DISASSEMBLER
	if (ACPI_FAILURE(status)) {
	if (ACPI_FAILURE(status)) {

		/* Display method locals/args if disassembler is present */
		/* Display method locals/args if disassembler is present */


		acpi_dm_dump_method_info(status, walk_state, walk_state->op);
		acpi_dm_dump_method_info(status, walk_state, walk_state->op);
@@ -249,6 +251,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
	}
	}


	if (!(obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY)) {
	if (!(obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY)) {

		/* 1) Parse: Create a new walk state for the preempting walk */
		/* 1) Parse: Create a new walk state for the preempting walk */


		next_walk_state =
		next_walk_state =
@@ -378,9 +381,11 @@ acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
	/* Did the called method return a value? */
	/* Did the called method return a value? */


	if (return_desc) {
	if (return_desc) {

		/* Are we actually going to use the return value? */
		/* Are we actually going to use the return value? */


		if (walk_state->return_used) {
		if (walk_state->return_used) {

			/* Save the return value from the previous method */
			/* Save the return value from the previous method */


			status = acpi_ds_result_push(return_desc, walk_state);
			status = acpi_ds_result_push(return_desc, walk_state);
+1 −0
Original line number Original line Diff line number Diff line
@@ -701,6 +701,7 @@ acpi_ds_method_data_get_type(u16 opcode,


	object = acpi_ns_get_attached_object(node);
	object = acpi_ns_get_attached_object(node);
	if (!object) {
	if (!object) {

		/* Uninitialized local/arg, return TYPE_ANY */
		/* Uninitialized local/arg, return TYPE_ANY */


		return_VALUE(ACPI_TYPE_ANY);
		return_VALUE(ACPI_TYPE_ANY);
+6 −0
Original line number Original line Diff line number Diff line
@@ -103,6 +103,7 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
									 common.
									 common.
									 node)));
									 node)));
			if (ACPI_FAILURE(status)) {
			if (ACPI_FAILURE(status)) {

				/* Check if we are resolving a named reference within a package */
				/* Check if we are resolving a named reference within a package */


				if ((status == AE_NOT_FOUND)
				if ((status == AE_NOT_FOUND)
@@ -195,6 +196,7 @@ acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
	 */
	 */
	obj_desc = *obj_desc_ptr;
	obj_desc = *obj_desc_ptr;
	if (!obj_desc) {
	if (!obj_desc) {

		/* Create a new buffer object */
		/* Create a new buffer object */


		obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
		obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
@@ -355,6 +357,7 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
	arg = arg->common.next;
	arg = arg->common.next;
	for (i = 0; arg; i++) {
	for (i = 0; arg; i++) {
		if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
		if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {

			/* Object (package or buffer) is already built */
			/* Object (package or buffer) is already built */


			obj_desc->package.elements[i] =
			obj_desc->package.elements[i] =
@@ -408,6 +411,7 @@ acpi_ds_create_node(struct acpi_walk_state *walk_state,
	}
	}


	if (!op->common.value.arg) {
	if (!op->common.value.arg) {

		/* No arguments, there is nothing to do */
		/* No arguments, there is nothing to do */


		return_ACPI_STATUS(AE_OK);
		return_ACPI_STATUS(AE_OK);
@@ -469,6 +473,7 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
	obj_desc = *ret_obj_desc;
	obj_desc = *ret_obj_desc;
	op_info = acpi_ps_get_opcode_info(opcode);
	op_info = acpi_ps_get_opcode_info(opcode);
	if (op_info->class == AML_CLASS_UNKNOWN) {
	if (op_info->class == AML_CLASS_UNKNOWN) {

		/* Unknown opcode */
		/* Unknown opcode */


		return_ACPI_STATUS(AE_TYPE);
		return_ACPI_STATUS(AE_TYPE);
@@ -626,6 +631,7 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
		default:	/* Other literals, etc.. */
		default:	/* Other literals, etc.. */


			if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {
			if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {

				/* Node was saved in Op */
				/* Node was saved in Op */


				obj_desc->reference.node = op->common.node;
				obj_desc->reference.node = op->common.node;
+4 −0
Original line number Original line Diff line number Diff line
@@ -640,6 +640,7 @@ acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
	/* Initialize the Buffer Field */
	/* Initialize the Buffer Field */


	if (op->common.aml_opcode == AML_CREATE_FIELD_OP) {
	if (op->common.aml_opcode == AML_CREATE_FIELD_OP) {

		/* NOTE: Slightly different operands for this opcode */
		/* NOTE: Slightly different operands for this opcode */


		status =
		status =
@@ -984,6 +985,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
		ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", op));
		ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", op));


		if (walk_state->control_state->common.value) {
		if (walk_state->control_state->common.value) {

			/* Predicate was true, go back and evaluate it again! */
			/* Predicate was true, go back and evaluate it again! */


			status = AE_CTRL_PENDING;
			status = AE_CTRL_PENDING;
@@ -1014,6 +1016,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
		 * has been bubbled up the tree
		 * has been bubbled up the tree
		 */
		 */
		if (op->common.value.arg) {
		if (op->common.value.arg) {

			/* Since we have a real Return(), delete any implicit return */
			/* Since we have a real Return(), delete any implicit return */


			acpi_ds_clear_implicit_return(walk_state);
			acpi_ds_clear_implicit_return(walk_state);
@@ -1047,6 +1050,7 @@ acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
			walk_state->return_desc = walk_state->operands[0];
			walk_state->return_desc = walk_state->operands[0];
		} else if ((walk_state->results) &&
		} else if ((walk_state->results) &&
			   (walk_state->results->results.num_results > 0)) {
			   (walk_state->results->results.num_results > 0)) {

			/* Since we have a real Return(), delete any implicit return */
			/* Since we have a real Return(), delete any implicit return */


			acpi_ds_clear_implicit_return(walk_state);
			acpi_ds_clear_implicit_return(walk_state);
Loading