Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1190604 > unrolled thread

[PATCH 00/22] ACPICA: 20150717 Release

Started byLv Zheng <lv.zheng@intel.com>
First post2015-07-23 07:00 +0200
Last post2015-07-29 03:50 +0200
Articles 13 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 00/22] ACPICA: 20150717 Release Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:00 +0200
    [PATCH 04/22] ACPICA: Dispatcher: Cleanup union acpi_operand_object's AML address assignments. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:00 +0200
    [PATCH 05/22] ACPICA: Executer: Add back pointing reference of method operand. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:00 +0200
    [PATCH 09/22] ACPICA: Executer: Add interpreter tracing mode for method tracing facility. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:00 +0200
    [PATCH 3/4] ACPI / Documentation: Update method tracing documentation. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:10 +0200
    [PATCH 2/4] ACPI / sysfs: Update method tracing facility. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:10 +0200
    [PATCH 1/4] ACPI / sysfs: Add ACPI_LV_REPAIR debug level. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:10 +0200
    [PATCH 4/4] ACPI / sysfs: Add support to allow leading "\" missing in trace_method_name. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:10 +0200
    [PATCH 0/4] ACPI: Update method tracing facility. Lv Zheng <lv.zheng@intel.com> - 2015-07-23 07:10 +0200
      RE: [PATCH 0/4] ACPI: Update method tracing facility. "Zheng, Lv" <lv.zheng@intel.com> - 2015-07-24 04:10 +0200
        RE: [PATCH 0/4] ACPI: Update method tracing facility. "Zheng, Lv" <lv.zheng@intel.com> - 2015-07-27 02:50 +0200
    Re: [PATCH 00/22] ACPICA: 20150717 Release "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2015-07-29 02:40 +0200
      RE: [PATCH 00/22] ACPICA: 20150717 Release "Zheng, Lv" <lv.zheng@intel.com> - 2015-07-29 03:50 +0200

#1190604 — [PATCH 00/22] ACPICA: 20150717 Release

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:00 +0200
Subject[PATCH 00/22] ACPICA: 20150717 Release
Message-ID<pPgLU-4QI-7@gated-at.bofh.it>
The 20150717 ACPICA kernel-resident subsystem updates are linuxized based
on the linux-pm/linux-next branch.

The patchset has passed the following build/boot tests.
Build tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. i386 + allyes + CONFIG_ACPI=y
3. i386 + default + COFNIG_ACPI=n
4. i386 + allyes + CONFIG_ACPI=n
5. x86_64 + default + COFNIG_ACPI=y
6. x86_64 + allyes + CONFIG_ACPI=y
7. x86_64 + default + COFNIG_ACPI=n
8. x86_64 + allyes + CONFIG_ACPI=n
Boot tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. x86_64 + default + COFNIG_ACPI=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2. x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
3. default: kernel configuration with following items enabled:
   All hardware drivers related to the machines of i386/x86_64
   All "drivers/acpi" configurations
   All "drivers/platform" drivers
   All other drivers that link the APIs provided by ACPICA subsystem

The divergences checking result:
Before applying (20150619 Release):
  539 lines
After applying (20150717 Release):
  518 lines
Note that the reduction is due to:
1. The FACS related divergences are not counted;
2. Some debugger related divergences are merged in this release as the
   configurability of the debugger code has improved.

Bob Moore (6):
  ACPICA: iASL: Add new warnings for method local_x and arg_x
    variables.
  ACPICA: Cleanup use of all non-ANSI local C library functions.
  ACPICA: Cleanup use of NEGATIVE and POSITIVE defines.
  ACPICA: iASL: Add support for TCPA Server Table.
  ACPICA: iASL/Disassembler: Add prototype verbose mode.
  ACPICA: Update version to 20150717.

Lv Zheng (15):
  ACPICA: Parser: Reduce parser/namespace divergences for tracer
    support.
  ACPICA: Parser: Cleanup aml_offset in struct acpi_walk_state.
  ACPICA: Parser: Cleanup aml_offset in union acpi_operand_object.
  ACPICA: Dispatcher: Cleanup union acpi_operand_object's AML address
    assignments.
  ACPICA: Executer: Add back pointing reference of method operand.
  ACPICA: Namespace: Add function to directly return normalized full
    path.
  ACPICA: Dispatcher: Move stack traversal code to dispatcher.
  ACPICA: Dispatcher: Add trace support for interpreter.
  ACPICA: Executer: Add interpreter tracing mode for method tracing
    facility.
  ACPICA: Executer: Add OSL trace hook support.
  ACPICA: Executer: Add option to bypass opcode tracing.
  ACPICA: Parser: Remove redundant opcode execution debugging output.
  ACPICA: MSVC: Fix inclusion order issue of <crtdbg.h>.
  ACPICA: Debugger: Reduce structure size for debugger.
  ACPICA: Debugger: Move debugger specific APIs to debugger component.

Markus Elfring (1):
  ACPICA: Remove extraneous check for null walk_state.

 drivers/acpi/acpica/Makefile     |    2 +
 drivers/acpi/acpica/acdebug.h    |   19 ++
 drivers/acpi/acpica/acdispat.h   |    8 +
 drivers/acpi/acpica/acglobal.h   |    3 +-
 drivers/acpi/acpica/acinterp.h   |   22 +++
 drivers/acpi/acpica/aclocal.h    |   11 +-
 drivers/acpi/acpica/acmacros.h   |    9 +
 drivers/acpi/acpica/acnamesp.h   |   13 +-
 drivers/acpi/acpica/acobject.h   |    1 +
 drivers/acpi/acpica/acparser.h   |    4 +-
 drivers/acpi/acpica/acstruct.h   |    2 +-
 drivers/acpi/acpica/acutils.h    |   23 ++-
 drivers/acpi/acpica/dsargs.c     |    4 +-
 drivers/acpi/acpica/dsdebug.c    |  231 +++++++++++++++++++++++
 drivers/acpi/acpica/dsmethod.c   |   35 ++--
 drivers/acpi/acpica/dswload.c    |    2 +-
 drivers/acpi/acpica/dswload2.c   |    2 +-
 drivers/acpi/acpica/excreate.c   |    1 +
 drivers/acpi/acpica/exdebug.c    |  324 ++++++++++++++++++++++++++++++++
 drivers/acpi/acpica/exdump.c     |    5 +-
 drivers/acpi/acpica/nsnames.c    |  275 +++++++++++++++------------
 drivers/acpi/acpica/nsparse.c    |   42 ++---
 drivers/acpi/acpica/nsutils.c    |    2 +-
 drivers/acpi/acpica/nsxfname.c   |    8 +-
 drivers/acpi/acpica/psargs.c     |   26 +--
 drivers/acpi/acpica/psloop.c     |   18 +-
 drivers/acpi/acpica/psobject.c   |   17 +-
 drivers/acpi/acpica/psparse.c    |   14 +-
 drivers/acpi/acpica/psutils.c    |    8 +-
 drivers/acpi/acpica/psxface.c    |  123 +-----------
 drivers/acpi/acpica/rscreate.c   |    3 +-
 drivers/acpi/acpica/utdebug.c    |   31 +++-
 drivers/acpi/acpica/utdelete.c   |    3 +
 drivers/acpi/acpica/utinit.c     |    2 -
 drivers/acpi/acpica/utmisc.c     |    2 +-
 drivers/acpi/acpica/utnonansi.c  |  380 ++++++++++++++++++++++++++++++++++++++
 drivers/acpi/acpica/utstring.c   |  342 ----------------------------------
 include/acpi/acoutput.h          |   21 ++-
 include/acpi/acpiosxf.h          |    6 +
 include/acpi/acpixf.h            |   13 +-
 include/acpi/actbl2.h            |   17 +-
 include/acpi/actypes.h           |   11 +-
 include/acpi/platform/acenvex.h  |    3 +
 include/acpi/platform/acmsvcex.h |   54 ++++++
 include/acpi/platform/acwinex.h  |   49 +++++
 45 files changed, 1491 insertions(+), 700 deletions(-)
 create mode 100644 drivers/acpi/acpica/dsdebug.c
 create mode 100644 drivers/acpi/acpica/utnonansi.c
 create mode 100644 include/acpi/platform/acmsvcex.h
 create mode 100644 include/acpi/platform/acwinex.h

-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1190605 — [PATCH 04/22] ACPICA: Dispatcher: Cleanup union acpi_operand_object's AML address assignments.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:00 +0200
Subject[PATCH 04/22] ACPICA: Dispatcher: Cleanup union acpi_operand_object's AML address assignments.
Message-ID<pPgLV-4QI-47@gated-at.bofh.it>
In reply to#1190604
ACPICA commit afb52611dbe7403551f93504d3798534f5c343f4

This patch cleans up the code of assigning the AML address to the
union acpi_operand_object.

The idea behind this cleanup is:
The AML address of the union acpi_operand_object should always be determined at
the point where the object is encountered. It should be started from the
first byte of the object. For example, the opcode of the object, the name
string of the user_term object, or the first byte of the packaged object
(where a pkg_length is prefixed). So it's not cleaner to have it assigned
here and there in the entire ACPICA source tree.

There are some special cases for the internal opcodes, before cleaning up
the internal opcodes, we should also determine the rules for the AML
addresses of the internal opcodes:
1. INT_NAMEPATH_OP: the address of the first byte for the name_string.
2. INT_METHODCALL_OP: the address of the first byte for the name_string.
3. INT_BYTELIST_OP: the address of the first byte for the byte_data list.
4. INT_EVAL_SUBTREE_OP: the address of the first byte for the
                        Region/Package/Buffer/bank_field/Field arguments.
5. INT_NAMEDFIELD_OP: the address to the name_seg.
6. INT_RESERVEDFIELD_OP: the address to the 0x00 prefix.
7. INT_ACCESSFIELD_OP: the address to the 0x01 prefix.
8. INT_CONNECTION_OP: the address to the 0x02 prefix.
9: INT_EXTACCESSFIELD_OP: the address to the 0x03 prefix.
10.INT_RETURN_VALUE_OP: the address of the replaced operand.
11.computational_data: the address to the
                      Byte/Word/Dword/Qword/string_prefix.

Before cleaning up the internal root scope of the aml_walk, turning it into
the term_list, we need to remember the aml_start address as the "Aml"
attribute for the union acpi_operand_object created by acpi_ps_create_scope_op().

Finally, we can delete some redundant AML address assignment in psloop.c.

Link: https://github.com/acpica/acpica/commit/afb52611
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
---
 drivers/acpi/acpica/acparser.h |    4 ++--
 drivers/acpi/acpica/dsargs.c   |    4 ++--
 drivers/acpi/acpica/dsmethod.c |    2 +-
 drivers/acpi/acpica/dswload.c  |    2 +-
 drivers/acpi/acpica/dswload2.c |    2 +-
 drivers/acpi/acpica/nsparse.c  |   40 +++++++++++++++++++---------------------
 drivers/acpi/acpica/psargs.c   |   21 ++++++++++++---------
 drivers/acpi/acpica/psloop.c   |    3 ---
 drivers/acpi/acpica/psobject.c |    2 +-
 drivers/acpi/acpica/psparse.c  |   12 ++++++++----
 drivers/acpi/acpica/psutils.c  |    8 +++++---
 drivers/acpi/acpica/psxface.c  |    2 +-
 12 files changed, 53 insertions(+), 49 deletions(-)

diff --git a/drivers/acpi/acpica/acparser.h b/drivers/acpi/acpica/acparser.h
index 0cdd2fc..6021ccf 100644
--- a/drivers/acpi/acpica/acparser.h
+++ b/drivers/acpi/acpica/acparser.h
@@ -225,11 +225,11 @@ void acpi_ps_delete_parse_tree(union acpi_parse_object *root);
 /*
  * psutils - parser utilities
  */
-union acpi_parse_object *acpi_ps_create_scope_op(void);
+union acpi_parse_object *acpi_ps_create_scope_op(u8 *aml);
 
 void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode);
 
-union acpi_parse_object *acpi_ps_alloc_op(u16 opcode);
+union acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml);
 
 void acpi_ps_free_op(union acpi_parse_object *op);
 
diff --git a/drivers/acpi/acpica/dsargs.c b/drivers/acpi/acpica/dsargs.c
index 3e69897..e2ab59e 100644
--- a/drivers/acpi/acpica/dsargs.c
+++ b/drivers/acpi/acpica/dsargs.c
@@ -86,7 +86,7 @@ acpi_ds_execute_arguments(struct acpi_namespace_node *node,
 
 	/* Allocate a new parser op to be the root of the parsed tree */
 
-	op = acpi_ps_alloc_op(AML_INT_EVAL_SUBTREE_OP);
+	op = acpi_ps_alloc_op(AML_INT_EVAL_SUBTREE_OP, aml_start);
 	if (!op) {
 		return_ACPI_STATUS(AE_NO_MEMORY);
 	}
@@ -129,7 +129,7 @@ acpi_ds_execute_arguments(struct acpi_namespace_node *node,
 
 	/* Evaluate the deferred arguments */
 
-	op = acpi_ps_alloc_op(AML_INT_EVAL_SUBTREE_OP);
+	op = acpi_ps_alloc_op(AML_INT_EVAL_SUBTREE_OP, aml_start);
 	if (!op) {
 		return_ACPI_STATUS(AE_NO_MEMORY);
 	}
diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
index bf8c16e..4abc242 100644
--- a/drivers/acpi/acpica/dsmethod.c
+++ b/drivers/acpi/acpica/dsmethod.c
@@ -103,7 +103,7 @@ acpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
 
 	/* Create/Init a root op for the method parse tree */
 
-	op = acpi_ps_alloc_op(AML_METHOD_OP);
+	op = acpi_ps_alloc_op(AML_METHOD_OP, obj_desc->method.aml_start);
 	if (!op) {
 		return_ACPI_STATUS(AE_NO_MEMORY);
 	}
diff --git a/drivers/acpi/acpica/dswload.c b/drivers/acpi/acpica/dswload.c
index 845ff44..097188a 100644
--- a/drivers/acpi/acpica/dswload.c
+++ b/drivers/acpi/acpica/dswload.c
@@ -388,7 +388,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
 
 		/* Create a new op */
 
-		op = acpi_ps_alloc_op(walk_state->opcode);
+		op = acpi_ps_alloc_op(walk_state->opcode, walk_state->aml);
 		if (!op) {
 			return_ACPI_STATUS(AE_NO_MEMORY);
 		}
diff --git a/drivers/acpi/acpica/dswload2.c b/drivers/acpi/acpica/dswload2.c
index fcaa30c..e2c08cd 100644
--- a/drivers/acpi/acpica/dswload2.c
+++ b/drivers/acpi/acpica/dswload2.c
@@ -335,7 +335,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
 
 		/* Create a new op */
 
-		op = acpi_ps_alloc_op(walk_state->opcode);
+		op = acpi_ps_alloc_op(walk_state->opcode, walk_state->aml);
 		if (!op) {
 			return_ACPI_STATUS(AE_NO_MEMORY);
 		}
diff --git a/drivers/acpi/acpica/nsparse.c b/drivers/acpi/acpica/nsparse.c
index 9926a67c..3736d43b 100644
--- a/drivers/acpi/acpica/nsparse.c
+++ b/drivers/acpi/acpica/nsparse.c
@@ -78,6 +78,20 @@ acpi_ns_one_complete_parse(u32 pass_number,
 
 	ACPI_FUNCTION_TRACE(ns_one_complete_parse);
 
+	status = acpi_get_table_by_index(table_index, &table);
+	if (ACPI_FAILURE(status)) {
+		return_ACPI_STATUS(status);
+	}
+
+	/* Table must consist of at least a complete header */
+
+	if (table->length < sizeof(struct acpi_table_header)) {
+		return_ACPI_STATUS(AE_BAD_HEADER);
+	}
+
+	aml_start = (u8 *)table + sizeof(struct acpi_table_header);
+	aml_length = table->length - sizeof(struct acpi_table_header);
+
 	status = acpi_tb_get_owner_id(table_index, &owner_id);
 	if (ACPI_FAILURE(status)) {
 		return_ACPI_STATUS(status);
@@ -85,7 +99,7 @@ acpi_ns_one_complete_parse(u32 pass_number,
 
 	/* Create and init a Root Node */
 
-	parse_root = acpi_ps_create_scope_op();
+	parse_root = acpi_ps_create_scope_op(aml_start);
 	if (!parse_root) {
 		return_ACPI_STATUS(AE_NO_MEMORY);
 	}
@@ -98,23 +112,12 @@ acpi_ns_one_complete_parse(u32 pass_number,
 		return_ACPI_STATUS(AE_NO_MEMORY);
 	}
 
-	status = acpi_get_table_by_index(table_index, &table);
+	status = acpi_ds_init_aml_walk(walk_state, parse_root, NULL,
+				       aml_start, aml_length, NULL,
+				       (u8)pass_number);
 	if (ACPI_FAILURE(status)) {
 		acpi_ds_delete_walk_state(walk_state);
-		acpi_ps_free_op(parse_root);
-		return_ACPI_STATUS(status);
-	}
-
-	/* Table must consist of at least a complete header */
-
-	if (table->length < sizeof(struct acpi_table_header)) {
-		status = AE_BAD_HEADER;
-	} else {
-		aml_start = (u8 *)table + sizeof(struct acpi_table_header);
-		aml_length = table->length - sizeof(struct acpi_table_header);
-		status = acpi_ds_init_aml_walk(walk_state, parse_root, NULL,
-					       aml_start, aml_length, NULL,
-					       (u8)pass_number);
+		goto cleanup;
 	}
 
 	/* Found OSDT table, enable the namespace override feature */
@@ -124,11 +127,6 @@ acpi_ns_one_complete_parse(u32 pass_number,
 		walk_state->namespace_override = TRUE;
 	}
 
-	if (ACPI_FAILURE(status)) {
-		acpi_ds_delete_walk_state(walk_state);
-		goto cleanup;
-	}
-
 	/* start_node is the default location to load the table */
 
 	if (start_node && start_node != acpi_gbl_root_node) {
diff --git a/drivers/acpi/acpica/psargs.c b/drivers/acpi/acpica/psargs.c
index 0bee946..29d8b7b 100644
--- a/drivers/acpi/acpica/psargs.c
+++ b/drivers/acpi/acpica/psargs.c
@@ -287,7 +287,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
 				  "Control Method - %p Desc %p Path=%p\n", node,
 				  method_desc, path));
 
-		name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
+		name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP, start);
 		if (!name_op) {
 			return_ACPI_STATUS(AE_NO_MEMORY);
 		}
@@ -535,13 +535,11 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
 
 	/* Allocate a new field op */
 
-	field = acpi_ps_alloc_op(opcode);
+	field = acpi_ps_alloc_op(opcode, aml);
 	if (!field) {
 		return_PTR(NULL);
 	}
 
-	field->common.aml = aml;
-
 	/* Decode the field type */
 
 	switch (opcode) {
@@ -603,6 +601,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
 		 * Argument for Connection operator can be either a Buffer
 		 * (resource descriptor), or a name_string.
 		 */
+		aml = parser_state->aml;
 		if (ACPI_GET8(parser_state->aml) == AML_BUFFER_OP) {
 			parser_state->aml++;
 
@@ -615,7 +614,8 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
 
 				/* Non-empty list */
 
-				arg = acpi_ps_alloc_op(AML_INT_BYTELIST_OP);
+				arg =
+				    acpi_ps_alloc_op(AML_INT_BYTELIST_OP, aml);
 				if (!arg) {
 					acpi_ps_free_op(field);
 					return_PTR(NULL);
@@ -664,7 +664,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
 
 			parser_state->aml = pkg_end;
 		} else {
-			arg = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
+			arg = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP, aml);
 			if (!arg) {
 				acpi_ps_free_op(field);
 				return_PTR(NULL);
@@ -729,7 +729,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
 
 		/* Constants, strings, and namestrings are all the same size */
 
-		arg = acpi_ps_alloc_op(AML_BYTE_OP);
+		arg = acpi_ps_alloc_op(AML_BYTE_OP, parser_state->aml);
 		if (!arg) {
 			return_ACPI_STATUS(AE_NO_MEMORY);
 		}
@@ -776,7 +776,8 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
 
 			/* Non-empty list */
 
-			arg = acpi_ps_alloc_op(AML_INT_BYTELIST_OP);
+			arg = acpi_ps_alloc_op(AML_INT_BYTELIST_OP,
+					       parser_state->aml);
 			if (!arg) {
 				return_ACPI_STATUS(AE_NO_MEMORY);
 			}
@@ -806,7 +807,9 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
 
 			/* null_name or name_string */
 
-			arg = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
+			arg =
+			    acpi_ps_alloc_op(AML_INT_NAMEPATH_OP,
+					     parser_state->aml);
 			if (!arg) {
 				return_ACPI_STATUS(AE_NO_MEMORY);
 			}
diff --git a/drivers/acpi/acpica/psloop.c b/drivers/acpi/acpica/psloop.c
index d584383..49c60c2 100644
--- a/drivers/acpi/acpica/psloop.c
+++ b/drivers/acpi/acpica/psloop.c
@@ -137,7 +137,6 @@ acpi_ps_get_arguments(struct acpi_walk_state *walk_state,
 			}
 
 			if (arg) {
-				arg->common.aml = walk_state->aml;
 				acpi_ps_append_arg(op, arg);
 			}
 
@@ -491,8 +490,6 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
 				continue;
 			}
 
-			op->common.aml = walk_state->aml;
-
 			if (walk_state->op_info) {
 				ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
 						  "Opcode %4.4X [%s] Op %p Aml %p\n",
diff --git a/drivers/acpi/acpica/psobject.c b/drivers/acpi/acpica/psobject.c
index 6ba3bb7..e54bc2a 100644
--- a/drivers/acpi/acpica/psobject.c
+++ b/drivers/acpi/acpica/psobject.c
@@ -297,7 +297,7 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
 	/* Create Op structure and append to parent's argument list */
 
 	walk_state->op_info = acpi_ps_get_opcode_info(walk_state->opcode);
-	op = acpi_ps_alloc_op(walk_state->opcode);
+	op = acpi_ps_alloc_op(walk_state->opcode, aml_op_start);
 	if (!op) {
 		return_ACPI_STATUS(AE_NO_MEMORY);
 	}
diff --git a/drivers/acpi/acpica/psparse.c b/drivers/acpi/acpica/psparse.c
index a555f7f..b857ad5 100644
--- a/drivers/acpi/acpica/psparse.c
+++ b/drivers/acpi/acpica/psparse.c
@@ -185,7 +185,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
 			 * op must be replaced by a placeholder return op
 			 */
 			replacement_op =
-			    acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP);
+			    acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP,
+					     op->common.aml);
 			if (!replacement_op) {
 				status = AE_NO_MEMORY;
 			}
@@ -209,7 +210,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
 			    || (op->common.parent->common.aml_opcode ==
 				AML_VAR_PACKAGE_OP)) {
 				replacement_op =
-				    acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP);
+				    acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP,
+						     op->common.aml);
 				if (!replacement_op) {
 					status = AE_NO_MEMORY;
 				}
@@ -224,7 +226,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
 					AML_VAR_PACKAGE_OP)) {
 					replacement_op =
 					    acpi_ps_alloc_op(op->common.
-							     aml_opcode);
+							     aml_opcode,
+							     op->common.aml);
 					if (!replacement_op) {
 						status = AE_NO_MEMORY;
 					} else {
@@ -240,7 +243,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
 		default:
 
 			replacement_op =
-			    acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP);
+			    acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP,
+					     op->common.aml);
 			if (!replacement_op) {
 				status = AE_NO_MEMORY;
 			}
diff --git a/drivers/acpi/acpica/psutils.c b/drivers/acpi/acpica/psutils.c
index 3244091..183cc1e 100644
--- a/drivers/acpi/acpica/psutils.c
+++ b/drivers/acpi/acpica/psutils.c
@@ -60,11 +60,11 @@ ACPI_MODULE_NAME("psutils")
  * DESCRIPTION: Create a Scope and associated namepath op with the root name
  *
  ******************************************************************************/
-union acpi_parse_object *acpi_ps_create_scope_op(void)
+union acpi_parse_object *acpi_ps_create_scope_op(u8 *aml)
 {
 	union acpi_parse_object *scope_op;
 
-	scope_op = acpi_ps_alloc_op(AML_SCOPE_OP);
+	scope_op = acpi_ps_alloc_op(AML_SCOPE_OP, aml);
 	if (!scope_op) {
 		return (NULL);
 	}
@@ -103,6 +103,7 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
  * FUNCTION:    acpi_ps_alloc_op
  *
  * PARAMETERS:  opcode          - Opcode that will be stored in the new Op
+ *              aml             - Address of the opcode
  *
  * RETURN:      Pointer to the new Op, null on failure
  *
@@ -112,7 +113,7 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
  *
  ******************************************************************************/
 
-union acpi_parse_object *acpi_ps_alloc_op(u16 opcode)
+union acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml)
 {
 	union acpi_parse_object *op;
 	const struct acpi_opcode_info *op_info;
@@ -149,6 +150,7 @@ union acpi_parse_object *acpi_ps_alloc_op(u16 opcode)
 
 	if (op) {
 		acpi_ps_init_op(op, opcode);
+		op->common.aml = aml;
 		op->common.flags = flags;
 	}
 
diff --git a/drivers/acpi/acpica/psxface.c b/drivers/acpi/acpica/psxface.c
index 841a5ea..1f3f46d 100644
--- a/drivers/acpi/acpica/psxface.c
+++ b/drivers/acpi/acpica/psxface.c
@@ -256,7 +256,7 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
 
 	/* Create and init a Root Node */
 
-	op = acpi_ps_create_scope_op();
+	op = acpi_ps_create_scope_op(info->obj_desc->method.aml_start);
 	if (!op) {
 		status = AE_NO_MEMORY;
 		goto cleanup;
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1190606 — [PATCH 05/22] ACPICA: Executer: Add back pointing reference of method operand.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:00 +0200
Subject[PATCH 05/22] ACPICA: Executer: Add back pointing reference of method operand.
Message-ID<pPgLV-4QI-49@gated-at.bofh.it>
In reply to#1190604
ACPICA commit 9dcd124e914e87495fbd1786d9484b962e0823e0

This patch adds back pointing reference of the namespace node for a method
operand. The namespace node then can be used in
acpi_ds_terminate_control_method() to obtain method full path to be used by
tracing facilities. Lv Zheng.

Link: https://github.com/acpica/acpica/commit/9dcd124e
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
---
 drivers/acpi/acpica/acobject.h |    1 +
 drivers/acpi/acpica/excreate.c |    1 +
 drivers/acpi/acpica/utdelete.c |    3 +++
 3 files changed, 5 insertions(+)

diff --git a/drivers/acpi/acpica/acobject.h b/drivers/acpi/acpica/acobject.h
index c81d98d..0bd02c4 100644
--- a/drivers/acpi/acpica/acobject.h
+++ b/drivers/acpi/acpica/acobject.h
@@ -176,6 +176,7 @@ struct acpi_object_method {
 	u8 param_count;
 	u8 sync_level;
 	union acpi_operand_object *mutex;
+	union acpi_operand_object *node;
 	u8 *aml_start;
 	union {
 		acpi_internal_method implementation;
diff --git a/drivers/acpi/acpica/excreate.c b/drivers/acpi/acpica/excreate.c
index aaeea48..ccb7219 100644
--- a/drivers/acpi/acpica/excreate.c
+++ b/drivers/acpi/acpica/excreate.c
@@ -486,6 +486,7 @@ acpi_ex_create_method(u8 * aml_start,
 
 	obj_desc->method.aml_start = aml_start;
 	obj_desc->method.aml_length = aml_length;
+	obj_desc->method.node = operand[0];
 
 	/*
 	 * Disassemble the method flags. Split off the arg_count, Serialized
diff --git a/drivers/acpi/acpica/utdelete.c b/drivers/acpi/acpica/utdelete.c
index 71fce38..1638312 100644
--- a/drivers/acpi/acpica/utdelete.c
+++ b/drivers/acpi/acpica/utdelete.c
@@ -209,6 +209,9 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
 			acpi_ut_delete_object_desc(object->method.mutex);
 			object->method.mutex = NULL;
 		}
+		if (object->method.node) {
+			object->method.node = NULL;
+		}
 		break;
 
 	case ACPI_TYPE_REGION:
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1190607 — [PATCH 09/22] ACPICA: Executer: Add interpreter tracing mode for method tracing facility.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:00 +0200
Subject[PATCH 09/22] ACPICA: Executer: Add interpreter tracing mode for method tracing facility.
Message-ID<pPgLW-4QI-51@gated-at.bofh.it>
In reply to#1190604
ACPICA commit 07fffd02607685b655ed92ee15c160e6a810b60b

The acpi_debug_trace() is the mechanism known as ACPI method tracing that is
used by Linux as ACPICA debugging message reducer. This facility can be
controlled through Linux ACPI subsystem - /sys/module/acpi/parameters.
This facility requires CONFIG_ACPI_DEBUG to be enabled to see ACPICA trace
logs in the kernel dmesg output.

This patch enhances acpi_debug_trace() to make it not only a message reducer,
but a real tracer to trace AML interpreter execution. Note that in addition
to the AML tracer enabling, this patch also updates the facility with the
following enhancements:
1. Allow a full path to be specified by the acpi_debug_trace() API.
2. Allow any method rather than just the entrance of acpi_evaluate_object()
   to be traced.
3. All interpreter ACPI_LV_TRACE_POINT messages are collected for
   ACPI_EXECUTER layer.

The Makefile of drivers/acpi/acpica is also updated to include exdebug.o
and the duplicated stubs are removed after that.

Note that since this patch has enhanced the method tracing facility, Linux
need also be updated after applying this patch. Lv Zheng.

Link: https://github.com/acpica/acpica/commit/07fffd02
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
---
 drivers/acpi/acpica/acdebug.h  |    2 +
 drivers/acpi/acpica/acglobal.h |    2 -
 drivers/acpi/acpica/acinterp.h |   18 +++
 drivers/acpi/acpica/dsdebug.c  |   25 +---
 drivers/acpi/acpica/dsmethod.c |   32 +----
 drivers/acpi/acpica/exdebug.c  |  271 ++++++++++++++++++++++++++++++++++++++++
 drivers/acpi/acpica/psloop.c   |   16 +--
 drivers/acpi/acpica/psparse.c  |    4 +-
 drivers/acpi/acpica/psxface.c  |  121 ++----------------
 drivers/acpi/acpica/utinit.c   |    2 -
 include/acpi/acoutput.h        |   13 ++
 include/acpi/acpixf.h          |    6 +-
 12 files changed, 327 insertions(+), 185 deletions(-)

diff --git a/drivers/acpi/acpica/acdebug.h b/drivers/acpi/acpica/acdebug.h
index 43685dd..88482f7 100644
--- a/drivers/acpi/acpica/acdebug.h
+++ b/drivers/acpi/acpica/acdebug.h
@@ -102,6 +102,8 @@ void acpi_db_display_interfaces(char *action_arg, char *interface_name_arg);
 
 acpi_status acpi_db_sleep(char *object_arg);
 
+void acpi_db_trace(char *enable_arg, char *method_arg, char *once_arg);
+
 void acpi_db_display_locks(void);
 
 void acpi_db_display_resources(char *object_arg);
diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h
index 53f96a3..5342300 100644
--- a/drivers/acpi/acpica/acglobal.h
+++ b/drivers/acpi/acpica/acglobal.h
@@ -290,8 +290,6 @@ ACPI_GLOBAL(u32, acpi_fixed_event_count[ACPI_NUM_FIXED_EVENTS]);
 
 ACPI_GLOBAL(u32, acpi_gbl_original_dbg_level);
 ACPI_GLOBAL(u32, acpi_gbl_original_dbg_layer);
-ACPI_GLOBAL(u32, acpi_gbl_trace_dbg_level);
-ACPI_GLOBAL(u32, acpi_gbl_trace_dbg_layer);
 
 /*****************************************************************************
  *
diff --git a/drivers/acpi/acpica/acinterp.h b/drivers/acpi/acpica/acinterp.h
index 7ac9800..a3c6e2a 100644
--- a/drivers/acpi/acpica/acinterp.h
+++ b/drivers/acpi/acpica/acinterp.h
@@ -131,6 +131,24 @@ void
 acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
 			u32 level, u32 index);
 
+void
+acpi_ex_start_trace_method(struct acpi_namespace_node *method_node,
+			   union acpi_operand_object *obj_desc,
+			   struct acpi_walk_state *walk_state);
+
+void
+acpi_ex_stop_trace_method(struct acpi_namespace_node *method_node,
+			  union acpi_operand_object *obj_desc,
+			  struct acpi_walk_state *walk_state);
+
+void
+acpi_ex_start_trace_opcode(union acpi_parse_object *op,
+			   struct acpi_walk_state *walk_state);
+
+void
+acpi_ex_stop_trace_opcode(union acpi_parse_object *op,
+			  struct acpi_walk_state *walk_state);
+
 /*
  * exfield - ACPI AML (p-code) execution - field manipulation
  */
diff --git a/drivers/acpi/acpica/dsdebug.c b/drivers/acpi/acpica/dsdebug.c
index 7df9b50e..a651d30 100644
--- a/drivers/acpi/acpica/dsdebug.c
+++ b/drivers/acpi/acpica/dsdebug.c
@@ -48,6 +48,7 @@
 #ifdef ACPI_DISASSEMBLER
 #include "acdisasm.h"
 #endif
+#include "acinterp.h"
 
 #define _COMPONENT          ACPI_DISPATCHER
 ACPI_MODULE_NAME("dsdebug")
@@ -128,7 +129,6 @@ acpi_ds_dump_method_stack(acpi_status status,
 	struct acpi_walk_state *next_walk_state;
 	struct acpi_namespace_node *previous_method = NULL;
 	union acpi_operand_object *method_desc;
-	char *pathname = NULL;
 
 	ACPI_FUNCTION_TRACE(ds_dump_method_stack);
 
@@ -173,25 +173,10 @@ acpi_ds_dump_method_stack(acpi_status status,
 
 	while (next_walk_state) {
 		method_desc = next_walk_state->method_desc;
-		if (method_desc && method_desc->method.node) {
-			pathname = acpi_ns_get_normalized_pathname((struct
-								    acpi_namespace_node
-								    *)
-								   method_desc->
-								   method.node,
-								   TRUE);
-		}
-		if (pathname) {
-			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-					  "End method [0x%p:%s] execution.\n",
-					  method_desc->method.aml_start,
-					  pathname));
-			ACPI_FREE(pathname);
-			pathname = NULL;
-		} else {
-			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-					  "End method [0x%p] execution.\n",
-					  method_desc->method.aml_start));
+		if (method_desc) {
+			acpi_ex_stop_trace_method((struct acpi_namespace_node *)
+						  method_desc->method.node,
+						  method_desc, walk_state);
 		}
 
 		ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
index 0fa6f19..ea2bdde 100644
--- a/drivers/acpi/acpica/dsmethod.c
+++ b/drivers/acpi/acpica/dsmethod.c
@@ -327,7 +327,6 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
 			       struct acpi_walk_state *walk_state)
 {
 	acpi_status status = AE_OK;
-	char *pathname = NULL;
 
 	ACPI_FUNCTION_TRACE_PTR(ds_begin_method_execution, method_node);
 
@@ -335,17 +334,7 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
 		return_ACPI_STATUS(AE_NULL_ENTRY);
 	}
 
-	pathname = acpi_ns_get_normalized_pathname(method_node, TRUE);
-	if (pathname) {
-		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-				  "Begin method [0x%p:%s] execution.\n",
-				  obj_desc->method.aml_start, pathname));
-		ACPI_FREE(pathname);
-	} else {
-		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-				  "Begin method [0x%p] execution.\n",
-				  obj_desc->method.aml_start));
-	}
+	acpi_ex_start_trace_method(method_node, obj_desc, walk_state);
 
 	/* Prevent wraparound of thread count */
 
@@ -708,7 +697,6 @@ void
 acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
 				 struct acpi_walk_state *walk_state)
 {
-	char *pathname = NULL;
 
 	ACPI_FUNCTION_TRACE_PTR(ds_terminate_control_method, walk_state);
 
@@ -846,22 +834,8 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
 		}
 	}
 
-	if (method_desc->method.node) {
-		pathname = acpi_ns_get_normalized_pathname((struct
-							    acpi_namespace_node
-							    *)method_desc->
-							   method.node, TRUE);
-	}
-	if (pathname) {
-		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-				  "End method [0x%p:%s] execution.\n",
-				  method_desc->method.aml_start, pathname));
-		ACPI_FREE(pathname);
-	} else {
-		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-				  "End method [0x%p] execution.\n",
-				  method_desc->method.aml_start));
-	}
+	acpi_ex_stop_trace_method((struct acpi_namespace_node *)method_desc->
+				  method.node, method_desc, walk_state);
 
 	return_VOID;
 }
diff --git a/drivers/acpi/acpica/exdebug.c b/drivers/acpi/acpica/exdebug.c
index 815442b..00ba9fc 100644
--- a/drivers/acpi/acpica/exdebug.c
+++ b/drivers/acpi/acpica/exdebug.c
@@ -43,11 +43,15 @@
 
 #include <acpi/acpi.h>
 #include "accommon.h"
+#include "acnamesp.h"
 #include "acinterp.h"
+#include "acparser.h"
 
 #define _COMPONENT          ACPI_EXECUTER
 ACPI_MODULE_NAME("exdebug")
 
+static union acpi_operand_object *acpi_gbl_trace_method_object = NULL;
+
 #ifndef ACPI_NO_ERROR_MESSAGES
 /*******************************************************************************
  *
@@ -70,6 +74,7 @@ ACPI_MODULE_NAME("exdebug")
  * enabled if necessary.
  *
  ******************************************************************************/
+
 void
 acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
 			u32 level, u32 index)
@@ -308,3 +313,269 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
 	return_VOID;
 }
 #endif
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_interpreter_trace_enabled
+ *
+ * PARAMETERS:  name                - Whether method name should be matched,
+ *                                    this should be checked before starting
+ *                                    the tracer
+ *
+ * RETURN:      TRUE if interpreter trace is enabled.
+ *
+ * DESCRIPTION: Check whether interpreter trace is enabled
+ *
+ ******************************************************************************/
+
+static u8 acpi_ex_interpreter_trace_enabled(char *name)
+{
+
+	/* Check if tracing is enabled */
+
+	if (!(acpi_gbl_trace_flags & ACPI_TRACE_ENABLED)) {
+		return (FALSE);
+	}
+
+	/*
+	 * Check if tracing is filtered:
+	 *
+	 * 1. If the tracer is started, acpi_gbl_trace_method_object should have
+	 *    been filled by the trace starter
+	 * 2. If the tracer is not started, acpi_gbl_trace_method_name should be
+	 *    matched if it is specified
+	 * 3. If the tracer is oneshot style, acpi_gbl_trace_method_name should
+	 *    not be cleared by the trace stopper during the first match
+	 */
+	if (acpi_gbl_trace_method_object) {
+		return (TRUE);
+	}
+	if (name &&
+	    (acpi_gbl_trace_method_name &&
+	     strcmp(acpi_gbl_trace_method_name, name))) {
+		return (FALSE);
+	}
+	if ((acpi_gbl_trace_flags & ACPI_TRACE_ONESHOT) &&
+	    !acpi_gbl_trace_method_name) {
+		return (FALSE);
+	}
+
+	return (TRUE);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_start_trace_method
+ *
+ * PARAMETERS:  method_node         - Node of the method
+ *              obj_desc            - The method object
+ *              walk_state          - current state, NULL if not yet executing
+ *                                    a method.
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Start control method execution trace
+ *
+ ******************************************************************************/
+
+void
+acpi_ex_start_trace_method(struct acpi_namespace_node *method_node,
+			   union acpi_operand_object *obj_desc,
+			   struct acpi_walk_state *walk_state)
+{
+	acpi_status status;
+	char *pathname = NULL;
+	u8 enabled = FALSE;
+
+	ACPI_FUNCTION_NAME(ex_start_trace_method);
+
+	if (method_node) {
+		pathname = acpi_ns_get_normalized_pathname(method_node, TRUE);
+	}
+
+	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+	if (ACPI_FAILURE(status)) {
+		goto exit;
+	}
+
+	enabled = acpi_ex_interpreter_trace_enabled(pathname);
+	if (enabled && !acpi_gbl_trace_method_object) {
+		acpi_gbl_trace_method_object = obj_desc;
+		acpi_gbl_original_dbg_level = acpi_dbg_level;
+		acpi_gbl_original_dbg_layer = acpi_dbg_layer;
+		acpi_dbg_level = ACPI_TRACE_LEVEL_ALL;
+		acpi_dbg_layer = ACPI_TRACE_LAYER_ALL;
+
+		if (acpi_gbl_trace_dbg_level) {
+			acpi_dbg_level = acpi_gbl_trace_dbg_level;
+		}
+		if (acpi_gbl_trace_dbg_layer) {
+			acpi_dbg_layer = acpi_gbl_trace_dbg_layer;
+		}
+	}
+	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+
+exit:
+	if (enabled) {
+		if (pathname) {
+			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+					  "Begin method [0x%p:%s] execution.\n",
+					  obj_desc->method.aml_start,
+					  pathname));
+		} else {
+			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+					  "Begin method [0x%p] execution.\n",
+					  obj_desc->method.aml_start));
+		}
+	}
+	if (pathname) {
+		ACPI_FREE(pathname);
+	}
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_stop_trace_method
+ *
+ * PARAMETERS:  method_node         - Node of the method
+ *              obj_desc            - The method object
+ *              walk_state          - current state, NULL if not yet executing
+ *                                    a method.
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Stop control method execution trace
+ *
+ ******************************************************************************/
+
+void
+acpi_ex_stop_trace_method(struct acpi_namespace_node *method_node,
+			  union acpi_operand_object *obj_desc,
+			  struct acpi_walk_state *walk_state)
+{
+	acpi_status status;
+	char *pathname = NULL;
+	u8 enabled;
+
+	ACPI_FUNCTION_NAME(ex_stop_trace_method);
+
+	if (method_node) {
+		pathname = acpi_ns_get_normalized_pathname(method_node, TRUE);
+	}
+
+	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+	if (ACPI_FAILURE(status)) {
+		goto exit_path;
+	}
+
+	enabled = acpi_ex_interpreter_trace_enabled(NULL);
+
+	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+
+	if (enabled) {
+		if (pathname) {
+			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+					  "End method [0x%p:%s] execution.\n",
+					  obj_desc->method.aml_start,
+					  pathname));
+		} else {
+			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+					  "End method [0x%p] execution.\n",
+					  obj_desc->method.aml_start));
+		}
+	}
+
+	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+	if (ACPI_FAILURE(status)) {
+		goto exit_path;
+	}
+
+	/* Check whether the tracer should be stopped */
+
+	if (acpi_gbl_trace_method_object == obj_desc) {
+
+		/* Disable further tracing if type is one-shot */
+
+		if (acpi_gbl_trace_flags & ACPI_TRACE_ONESHOT) {
+			acpi_gbl_trace_method_name = NULL;
+		}
+
+		acpi_dbg_level = acpi_gbl_original_dbg_level;
+		acpi_dbg_layer = acpi_gbl_original_dbg_layer;
+		acpi_gbl_trace_method_object = NULL;
+	}
+
+	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+
+exit_path:
+	if (pathname) {
+		ACPI_FREE(pathname);
+	}
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_start_trace_opcode
+ *
+ * PARAMETERS:  op                  - The parser opcode object
+ *              walk_state          - current state, NULL if not yet executing
+ *                                    a method.
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Start opcode execution trace
+ *
+ ******************************************************************************/
+
+void
+acpi_ex_start_trace_opcode(union acpi_parse_object *op,
+			   struct acpi_walk_state *walk_state)
+{
+
+	ACPI_FUNCTION_NAME(ex_start_trace_opcode);
+
+	if (acpi_ex_interpreter_trace_enabled(NULL)) {
+		if (walk_state->op_info) {
+			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+					  "Begin opcode: %s[0x%p] Class=0x%02x, Type=0x%02x, Flags=0x%04x.\n",
+					  op->common.aml_op_name,
+					  op->common.aml,
+					  walk_state->op_info->class,
+					  walk_state->op_info->type,
+					  walk_state->op_info->flags));
+		} else {
+			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+					  "Begin opcode: %s[0x%p].\n",
+					  op->common.aml_op_name,
+					  op->common.aml));
+		}
+	}
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_stop_trace_opcode
+ *
+ * PARAMETERS:  op                  - The parser opcode object
+ *              walk_state          - current state, NULL if not yet executing
+ *                                    a method.
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Stop opcode execution trace
+ *
+ ******************************************************************************/
+
+void
+acpi_ex_stop_trace_opcode(union acpi_parse_object *op,
+			  struct acpi_walk_state *walk_state)
+{
+
+	ACPI_FUNCTION_NAME(ex_stop_trace_opcode);
+
+	if (acpi_ex_interpreter_trace_enabled(NULL)) {
+		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+				  "End opcode: %s[0x%p].\n",
+				  op->common.aml_op_name, op->common.aml));
+	}
+}
diff --git a/drivers/acpi/acpica/psloop.c b/drivers/acpi/acpica/psloop.c
index 80339ba..a7de52e 100644
--- a/drivers/acpi/acpica/psloop.c
+++ b/drivers/acpi/acpica/psloop.c
@@ -51,6 +51,7 @@
 
 #include <acpi/acpi.h>
 #include "accommon.h"
+#include "acinterp.h"
 #include "acparser.h"
 #include "acdispat.h"
 #include "amlcode.h"
@@ -498,20 +499,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
 						  op->common.aml));
 			}
 
-			if (walk_state->op_info) {
-				ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-						  "Begin opcode: %s[0x%p] Class=0x%02x, Type=0x%02x, Flags=0x%04x.\n",
-						  op->common.aml_op_name,
-						  op->common.aml,
-						  walk_state->op_info->class,
-						  walk_state->op_info->type,
-						  walk_state->op_info->flags));
-			} else {
-				ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-						  "Begin opcode: %s[0x%p].\n",
-						  op->common.aml_op_name,
-						  op->common.aml));
-			}
+			acpi_ex_start_trace_opcode(op, walk_state);
 		}
 
 		/*
diff --git a/drivers/acpi/acpica/psparse.c b/drivers/acpi/acpica/psparse.c
index 97ea0e5..98001d7 100644
--- a/drivers/acpi/acpica/psparse.c
+++ b/drivers/acpi/acpica/psparse.c
@@ -147,9 +147,7 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
 		return_ACPI_STATUS(AE_OK);	/* OK for now */
 	}
 
-	ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
-			  "End opcode: %s[0x%p].\n",
-			  op->common.aml_op_name, op->common.aml));
+	acpi_ex_stop_trace_opcode(op, walk_state);
 
 	/* Delete this op and the subtree below it if asked to */
 
diff --git a/drivers/acpi/acpica/psxface.c b/drivers/acpi/acpica/psxface.c
index 1f3f46d..4254805 100644
--- a/drivers/acpi/acpica/psxface.c
+++ b/drivers/acpi/acpica/psxface.c
@@ -47,15 +47,12 @@
 #include "acdispat.h"
 #include "acinterp.h"
 #include "actables.h"
+#include "acnamesp.h"
 
 #define _COMPONENT          ACPI_PARSER
 ACPI_MODULE_NAME("psxface")
 
 /* Local Prototypes */
-static void acpi_ps_start_trace(struct acpi_evaluate_info *info);
-
-static void acpi_ps_stop_trace(struct acpi_evaluate_info *info);
-
 static void
 acpi_ps_update_parameter_list(struct acpi_evaluate_info *info, u16 action);
 
@@ -76,7 +73,7 @@ acpi_ps_update_parameter_list(struct acpi_evaluate_info *info, u16 action);
  ******************************************************************************/
 
 acpi_status
-acpi_debug_trace(char *name, u32 debug_level, u32 debug_layer, u32 flags)
+acpi_debug_trace(const char *name, u32 debug_level, u32 debug_layer, u32 flags)
 {
 	acpi_status status;
 
@@ -85,108 +82,14 @@ acpi_debug_trace(char *name, u32 debug_level, u32 debug_layer, u32 flags)
 		return (status);
 	}
 
-	/* TBDs: Validate name, allow full path or just nameseg */
-
-	acpi_gbl_trace_method_name = *ACPI_CAST_PTR(u32, name);
+	acpi_gbl_trace_method_name = name;
 	acpi_gbl_trace_flags = flags;
-
-	if (debug_level) {
-		acpi_gbl_trace_dbg_level = debug_level;
-	}
-	if (debug_layer) {
-		acpi_gbl_trace_dbg_layer = debug_layer;
-	}
+	acpi_gbl_trace_dbg_level = debug_level;
+	acpi_gbl_trace_dbg_layer = debug_layer;
+	status = AE_OK;
 
 	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
-	return (AE_OK);
-}
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ps_start_trace
- *
- * PARAMETERS:  info        - Method info struct
- *
- * RETURN:      None
- *
- * DESCRIPTION: Start control method execution trace
- *
- ******************************************************************************/
-
-static void acpi_ps_start_trace(struct acpi_evaluate_info *info)
-{
-	acpi_status status;
-
-	ACPI_FUNCTION_ENTRY();
-
-	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
-	if (ACPI_FAILURE(status)) {
-		return;
-	}
-
-	if ((!acpi_gbl_trace_method_name) ||
-	    (acpi_gbl_trace_method_name != info->node->name.integer)) {
-		goto exit;
-	}
-
-	acpi_gbl_original_dbg_level = acpi_dbg_level;
-	acpi_gbl_original_dbg_layer = acpi_dbg_layer;
-
-	acpi_dbg_level = 0x00FFFFFF;
-	acpi_dbg_layer = ACPI_UINT32_MAX;
-
-	if (acpi_gbl_trace_dbg_level) {
-		acpi_dbg_level = acpi_gbl_trace_dbg_level;
-	}
-	if (acpi_gbl_trace_dbg_layer) {
-		acpi_dbg_layer = acpi_gbl_trace_dbg_layer;
-	}
-
-exit:
-	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
-}
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ps_stop_trace
- *
- * PARAMETERS:  info        - Method info struct
- *
- * RETURN:      None
- *
- * DESCRIPTION: Stop control method execution trace
- *
- ******************************************************************************/
-
-static void acpi_ps_stop_trace(struct acpi_evaluate_info *info)
-{
-	acpi_status status;
-
-	ACPI_FUNCTION_ENTRY();
-
-	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
-	if (ACPI_FAILURE(status)) {
-		return;
-	}
-
-	if ((!acpi_gbl_trace_method_name) ||
-	    (acpi_gbl_trace_method_name != info->node->name.integer)) {
-		goto exit;
-	}
-
-	/* Disable further tracing if type is one-shot */
-
-	if (acpi_gbl_trace_flags & 1) {
-		acpi_gbl_trace_method_name = 0;
-		acpi_gbl_trace_dbg_level = 0;
-		acpi_gbl_trace_dbg_layer = 0;
-	}
-
-	acpi_dbg_level = acpi_gbl_original_dbg_level;
-	acpi_dbg_layer = acpi_gbl_original_dbg_layer;
-
-exit:
-	(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+	return (status);
 }
 
 /*******************************************************************************
@@ -212,7 +115,7 @@ exit:
  *
  ******************************************************************************/
 
-acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
+acpi_status acpi_ps_execute_method(struct acpi_evaluate_info * info)
 {
 	acpi_status status;
 	union acpi_parse_object *op;
@@ -243,10 +146,6 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
 	 */
 	acpi_ps_update_parameter_list(info, REF_INCREMENT);
 
-	/* Begin tracing if requested */
-
-	acpi_ps_start_trace(info);
-
 	/*
 	 * Execute the method. Performs parse simultaneously
 	 */
@@ -326,10 +225,6 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
 cleanup:
 	acpi_ps_delete_parse_tree(op);
 
-	/* End optional tracing */
-
-	acpi_ps_stop_trace(info);
-
 	/* Take away the extra reference that we gave the parameters above */
 
 	acpi_ps_update_parameter_list(info, REF_DECREMENT);
diff --git a/drivers/acpi/acpica/utinit.c b/drivers/acpi/acpica/utinit.c
index e402e07..7f897c6 100644
--- a/drivers/acpi/acpica/utinit.c
+++ b/drivers/acpi/acpica/utinit.c
@@ -204,8 +204,6 @@ acpi_status acpi_ut_init_globals(void)
 	acpi_gbl_acpi_hardware_present = TRUE;
 	acpi_gbl_last_owner_id_index = 0;
 	acpi_gbl_next_owner_id_offset = 0;
-	acpi_gbl_trace_dbg_level = 0;
-	acpi_gbl_trace_dbg_layer = 0;
 	acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
 	acpi_gbl_osi_mutex = NULL;
 	acpi_gbl_reg_methods_executed = FALSE;
diff --git a/include/acpi/acoutput.h b/include/acpi/acoutput.h
index 8f89df9..37f46d4 100644
--- a/include/acpi/acoutput.h
+++ b/include/acpi/acoutput.h
@@ -184,6 +184,19 @@
 #define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
 #define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
 
+/*
+ * Global trace flags
+ */
+#define ACPI_TRACE_ENABLED          ((u32) 2)
+#define ACPI_TRACE_ONESHOT          ((u32) 1)
+
+/* Defaults for trace debugging level/layer */
+
+#define ACPI_TRACE_LEVEL_ALL        ACPI_LV_ALL
+#define ACPI_TRACE_LAYER_ALL        0x000001FF
+#define ACPI_TRACE_LEVEL_DEFAULT    ACPI_LV_TRACE_POINT
+#define ACPI_TRACE_LAYER_DEFAULT    ACPI_EXECUTER
+
 #if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
 /*
  * The module name is used primarily for error and debug messages.
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index e8ec18a..9c362cf 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -251,7 +251,9 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_reduced_hardware, FALSE);
  * traced each time it is executed.
  */
 ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_flags, 0);
-ACPI_INIT_GLOBAL(acpi_name, acpi_gbl_trace_method_name, 0);
+ACPI_INIT_GLOBAL(const char *, acpi_gbl_trace_method_name, NULL);
+ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_dbg_level, ACPI_TRACE_LEVEL_DEFAULT);
+ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_dbg_layer, ACPI_TRACE_LAYER_DEFAULT);
 
 /*
  * Runtime configuration of debug output control masks. We want the debug
@@ -504,7 +506,7 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status
 					   acpi_object_handler handler,
 					   void **data))
 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
-			     acpi_debug_trace(char *name, u32 debug_level,
+			     acpi_debug_trace(const char *name, u32 debug_level,
 					      u32 debug_layer, u32 flags))
 
 /*
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1190611 — [PATCH 3/4] ACPI / Documentation: Update method tracing documentation.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:10 +0200
Subject[PATCH 3/4] ACPI / Documentation: Update method tracing documentation.
Message-ID<pPgVB-5hq-11@gated-at.bofh.it>
In reply to#1190604
This patch updates method tracing documentation.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
---
 Documentation/acpi/method-tracing.txt |   53 ++++++++++++++++++++++++---------
 1 file changed, 39 insertions(+), 14 deletions(-)

diff --git a/Documentation/acpi/method-tracing.txt b/Documentation/acpi/method-tracing.txt
index f6efb1e..c77f91c 100644
--- a/Documentation/acpi/method-tracing.txt
+++ b/Documentation/acpi/method-tracing.txt
@@ -1,26 +1,51 @@
 /sys/module/acpi/parameters/:
 
 trace_method_name
-	The AML method name that the user wants to trace
+	The full path of the AML method that the user wants to use with the
+	"method"/"method-once" tracing mode.
+	Note that the full path shouldn't contain the trailing "_"s in its
+	name segments but should contain "\" to form an absolute path.
 
 trace_debug_layer
-	The temporary debug_layer used when tracing the method.
-	Using 0xffffffff by default if it is 0.
+	The temporary debug_layer used when the tracing feature is enabled.
+	Using ACPI_EXECUTER (0x80) by default.
 
 trace_debug_level
-	The temporary debug_level used when tracing the method.
-	Using 0x00ffffff by default if it is 0.
+	The temporary debug_level used when the tracing feature is enabled.
+	Using ACPI_LV_TRACE_POINT (0x10) by default.
 
 trace_state
 	The status of the tracing feature.
 
-	"enabled" means this feature is enabled
-	and the AML method is traced every time it's executed.
+	Users can enable/disable this debug tracing feature by executing
+	the following command:
+	    # echo string > /sys/module/acpi/parameters/trace_state
+	Where "string" should be one of the followings:
+	"disable"
+	    Disable the tracing feature.
+	"enable"
+	    Enable the tracing feature.
+	    ACPICA debugging messages matching
+	    "trace_debug_layer/trace_debug_level" during any method
+	    execution will be logged.
+	"method"
+	    Enable the tracing feature.
+	    ACPICA debugging messages matching
+	    "trace_debug_layer/trace_debug_level" during method execution
+	    of "trace_method_name" will be logged.
+	"method-once"
+	    Enable the tracing feature.
+	    ACPICA debugging messages matching
+	    "trace_debug_layer/trace_debug_level" during method execution
+	    of "trace_method_name" will be logged only once.
+	"opcode"
+	    Enable the tracing feature.
+	    ACPICA debugging messages matching
+	    "trace_debug_layer/trace_debug_level" during method/opcode
+	    execution of "trace_method_name" will be logged.
+	"opcode-once"
+	    Enable the tracing feature.
+	    ACPICA debugging messages matching
+	    "trace_debug_layer/trace_debug_level" during method/opcode
+	    execution of "trace_method_name" will be logged only once.
 
-	"1" means this feature is enabled and the AML method
-	will only be traced during the next execution.
-
-	"disabled" means this feature is disabled.
-	Users can enable/disable this debug tracing feature by
-	"echo string > /sys/module/acpi/parameters/trace_state".
-	"string" should be one of "enable", "disable" and "1".
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1190612 — [PATCH 2/4] ACPI / sysfs: Update method tracing facility.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:10 +0200
Subject[PATCH 2/4] ACPI / sysfs: Update method tracing facility.
Message-ID<pPgVB-5hq-15@gated-at.bofh.it>
In reply to#1190604
This patch updates the method tracing facility as the acpi_debug_trace()
API has been updated to allow it to trace AML interpreter execution, the
meanings and the usages of the API parameters are changed due to the
updates.

The new API:
1. Uses ACPI_TRACE_ENABLED flag to indicate the enabling of the tracer;
2. Allows tracer still can be enabled when method name is not specified so
   that the AML interpreter execution can be traced without knowing the
   method name, which is useful for kernel boot tracing;
3. Supports arbitrary full path name, it doesn't need to be a name related
   to an entrance of acpi_evaluate_object().

Note that the sysfs parameters are also updated so that when reading the
attribute files, ACPICA internal settings are returned.

In order to make the sysfs parameters (acpi.trace_state) available during
boot, this patch adds code to bypass ACPICA semaphore/mutex invocations
when acpi mutex utilities haven't been initialized.

This patch doesn't update documentation of method tracing facility, it will
be updated by further patches.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
---
 drivers/acpi/osl.c   |    8 +++
 drivers/acpi/sysfs.c |  136 +++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 108 insertions(+), 36 deletions(-)

diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index 1925f1a..21c1e71 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -79,6 +79,7 @@ static void *acpi_irq_context;
 static struct workqueue_struct *kacpid_wq;
 static struct workqueue_struct *kacpi_notify_wq;
 static struct workqueue_struct *kacpi_hotplug_wq;
+static bool acpi_os_initialized;
 
 /*
  * This list of permanent mappings is for memory that may be accessed from
@@ -1312,6 +1313,9 @@ acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout)
 	long jiffies;
 	int ret = 0;
 
+	if (!acpi_os_initialized)
+		return AE_OK;
+
 	if (!sem || (units < 1))
 		return AE_BAD_PARAMETER;
 
@@ -1351,6 +1355,9 @@ acpi_status acpi_os_signal_semaphore(acpi_handle handle, u32 units)
 {
 	struct semaphore *sem = (struct semaphore *)handle;
 
+	if (!acpi_os_initialized)
+		return AE_OK;
+
 	if (!sem || (units < 1))
 		return AE_BAD_PARAMETER;
 
@@ -1859,6 +1866,7 @@ acpi_status __init acpi_os_initialize(void)
 		rv = acpi_os_map_generic_address(&acpi_gbl_FADT.reset_register);
 		pr_debug(PREFIX "%s: map reset_reg status %d\n", __func__, rv);
 	}
+	acpi_os_initialized = true;
 
 	return AE_OK;
 }
diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
index 7ab6ba4..8979e4a 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -70,6 +70,7 @@ static const struct acpi_dlevel acpi_debug_levels[] = {
 	ACPI_DEBUG_INIT(ACPI_LV_DEBUG_OBJECT),
 	ACPI_DEBUG_INIT(ACPI_LV_INFO),
 	ACPI_DEBUG_INIT(ACPI_LV_REPAIR),
+	ACPI_DEBUG_INIT(ACPI_LV_TRACE_POINT),
 
 	ACPI_DEBUG_INIT(ACPI_LV_INIT_NAMES),
 	ACPI_DEBUG_INIT(ACPI_LV_PARSE),
@@ -163,55 +164,118 @@ static const struct kernel_param_ops param_ops_debug_level = {
 module_param_cb(debug_layer, &param_ops_debug_layer, &acpi_dbg_layer, 0644);
 module_param_cb(debug_level, &param_ops_debug_level, &acpi_dbg_level, 0644);
 
-static char trace_method_name[6];
-module_param_string(trace_method_name, trace_method_name, 6, 0644);
-static unsigned int trace_debug_layer;
-module_param(trace_debug_layer, uint, 0644);
-static unsigned int trace_debug_level;
-module_param(trace_debug_level, uint, 0644);
+static char* trace_method_name;
+static bool trace_method_kmalloced;
 
-static int param_set_trace_state(const char *val, struct kernel_param *kp)
+int param_set_trace_method_name(const char *val, const struct kernel_param *kp)
 {
-	int result = 0;
+	u32 saved_flags = 0;
 
-	if (!strncmp(val, "enable", sizeof("enable") - 1)) {
-		result = acpi_debug_trace(trace_method_name, trace_debug_level,
-					  trace_debug_layer, 0);
-		if (result)
-			result = -EBUSY;
-		goto exit;
+	if (strlen(val) > 1024) {
+		pr_err("%s: string parameter too long\n", kp->name);
+		return -ENOSPC;
 	}
 
-	if (!strncmp(val, "disable", sizeof("disable") - 1)) {
-		int name = 0;
-		result = acpi_debug_trace((char *)&name, trace_debug_level,
-					  trace_debug_layer, 0);
-		if (result)
-			result = -EBUSY;
-		goto exit;
-	}
+	/*
+	 * It's not safe to update acpi_gbl_trace_method_name without
+	 * having the tracer stopped, so we save the original tracer
+	 * state and disable it.
+	 */
+	saved_flags = acpi_gbl_trace_flags;
+	(void)acpi_debug_trace(NULL,
+			       acpi_gbl_trace_dbg_level,
+			       acpi_gbl_trace_dbg_layer,
+			       0);
+
+	if (trace_method_kmalloced)
+		kfree(trace_method_name);
+	trace_method_name = NULL;
+	trace_method_kmalloced = false;
+
+	/* This is a hack.  We can't kmalloc in early boot. */
+	if (slab_is_available()) {
+		trace_method_name = kstrdup(val, GFP_KERNEL);
+		if (!trace_method_name)
+			return -ENOMEM;
+		trace_method_kmalloced = true;
+	} else
+		trace_method_name = (char *)val;
 
-	if (!strncmp(val, "1", 1)) {
-		result = acpi_debug_trace(trace_method_name, trace_debug_level,
-					  trace_debug_layer, 1);
-		if (result)
-			result = -EBUSY;
-		goto exit;
-	}
+	/* Restore the original tracer state */
+	(void)acpi_debug_trace(trace_method_name,
+			       acpi_gbl_trace_dbg_level,
+			       acpi_gbl_trace_dbg_layer,
+			       saved_flags);
 
-	result = -EINVAL;
-exit:
-	return result;
+	return 0;
+}
+
+static int param_get_trace_method_name(char *buffer, const struct kernel_param *kp)
+{
+	return scnprintf(buffer, PAGE_SIZE, "%s", acpi_gbl_trace_method_name);
+}
+
+static const struct kernel_param_ops param_ops_trace_method = {
+	.set = param_set_trace_method_name,
+	.get = param_get_trace_method_name,
+};
+
+static const struct kernel_param_ops param_ops_trace_attrib = {
+	.set = param_set_uint,
+	.get = param_get_uint,
+};
+
+module_param_cb(trace_method_name, &param_ops_trace_method, &trace_method_name, 0644);
+module_param_cb(trace_debug_layer, &param_ops_trace_attrib, &acpi_gbl_trace_dbg_layer, 0644);
+module_param_cb(trace_debug_level, &param_ops_trace_attrib, &acpi_gbl_trace_dbg_level, 0644);
+
+static int param_set_trace_state(const char *val, struct kernel_param *kp)
+{
+	acpi_status status;
+	const char *method = trace_method_name;
+	u32 flags = 0;
+
+/* So "xxx-once" comparison should go prior than "xxx" comparison */
+#define acpi_compare_param(val, key)	\
+	strncmp((val), (key), sizeof(key) - 1)
+
+	if (!acpi_compare_param(val, "enable")) {
+		method = NULL;
+		flags = ACPI_TRACE_ENABLED;
+	} else if (!acpi_compare_param(val, "disable"))
+		method = NULL;
+	else if (!acpi_compare_param(val, "method-once"))
+		flags = ACPI_TRACE_ENABLED | ACPI_TRACE_ONESHOT;
+	else if (!acpi_compare_param(val, "method"))
+		flags = ACPI_TRACE_ENABLED;
+	else if (!acpi_compare_param(val, "opcode-once"))
+		flags = ACPI_TRACE_ENABLED | ACPI_TRACE_ONESHOT | ACPI_TRACE_OPCODE;
+	else if (!acpi_compare_param(val, "opcode"))
+		flags = ACPI_TRACE_ENABLED | ACPI_TRACE_OPCODE;
+	else
+		return -EINVAL;
+
+	status = acpi_debug_trace(method,
+				  acpi_gbl_trace_dbg_level,
+				  acpi_gbl_trace_dbg_layer,
+				  flags);
+	if (ACPI_FAILURE(status))
+		return -EBUSY;
+
+	return 0;
 }
 
 static int param_get_trace_state(char *buffer, struct kernel_param *kp)
 {
-	if (!acpi_gbl_trace_method_name)
+	if (!(acpi_gbl_trace_flags & ACPI_TRACE_ENABLED))
 		return sprintf(buffer, "disable");
 	else {
-		if (acpi_gbl_trace_flags & 1)
-			return sprintf(buffer, "1");
-		else
+		if (acpi_gbl_trace_method_name) {
+			if (acpi_gbl_trace_flags & ACPI_TRACE_ONESHOT)
+				return sprintf(buffer, "method-once");
+			else
+				return sprintf(buffer, "method");
+		} else
 			return sprintf(buffer, "enable");
 	}
 	return 0;
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1190613 — [PATCH 1/4] ACPI / sysfs: Add ACPI_LV_REPAIR debug level.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:10 +0200
Subject[PATCH 1/4] ACPI / sysfs: Add ACPI_LV_REPAIR debug level.
Message-ID<pPgVB-5hq-19@gated-at.bofh.it>
In reply to#1190604
This patch updates debug_level file, adding ACPI_LV_REPAIR.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
---
 drivers/acpi/sysfs.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
index 0876d77b..7ab6ba4 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -69,6 +69,7 @@ static const struct acpi_dlevel acpi_debug_levels[] = {
 	ACPI_DEBUG_INIT(ACPI_LV_INIT),
 	ACPI_DEBUG_INIT(ACPI_LV_DEBUG_OBJECT),
 	ACPI_DEBUG_INIT(ACPI_LV_INFO),
+	ACPI_DEBUG_INIT(ACPI_LV_REPAIR),
 
 	ACPI_DEBUG_INIT(ACPI_LV_INIT_NAMES),
 	ACPI_DEBUG_INIT(ACPI_LV_PARSE),
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1190614 — [PATCH 4/4] ACPI / sysfs: Add support to allow leading "\" missing in trace_method_name.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:10 +0200
Subject[PATCH 4/4] ACPI / sysfs: Add support to allow leading "\" missing in trace_method_name.
Message-ID<pPgVB-5hq-21@gated-at.bofh.it>
In reply to#1190604
Since _SB.PCI0 can be used as relative path from root and can be easily
converted into internal trace_method_name format, we allow users to specify
trace_method_name using relative paths from root.
Note this is useful for grub2 for which users failed to pass "\" from the
grub configuration file.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
---
 drivers/acpi/sysfs.c |   28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
index 8979e4a..40a4265 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -164,14 +164,18 @@ static const struct kernel_param_ops param_ops_debug_level = {
 module_param_cb(debug_layer, &param_ops_debug_layer, &acpi_dbg_layer, 0644);
 module_param_cb(debug_level, &param_ops_debug_level, &acpi_dbg_level, 0644);
 
-static char* trace_method_name;
-static bool trace_method_kmalloced;
+static char trace_method_name[1024];
 
 int param_set_trace_method_name(const char *val, const struct kernel_param *kp)
 {
 	u32 saved_flags = 0;
+	bool is_abs_path = true;
 
-	if (strlen(val) > 1024) {
+	if (*val != '\\')
+		is_abs_path = false;
+
+	if ((is_abs_path && strlen(val) > 1023) ||
+	    (!is_abs_path && strlen(val) > 1022)) {
 		pr_err("%s: string parameter too long\n", kp->name);
 		return -ENOSPC;
 	}
@@ -187,19 +191,13 @@ int param_set_trace_method_name(const char *val, const struct kernel_param *kp)
 			       acpi_gbl_trace_dbg_layer,
 			       0);
 
-	if (trace_method_kmalloced)
-		kfree(trace_method_name);
-	trace_method_name = NULL;
-	trace_method_kmalloced = false;
-
 	/* This is a hack.  We can't kmalloc in early boot. */
-	if (slab_is_available()) {
-		trace_method_name = kstrdup(val, GFP_KERNEL);
-		if (!trace_method_name)
-			return -ENOMEM;
-		trace_method_kmalloced = true;
-	} else
-		trace_method_name = (char *)val;
+	if (is_abs_path)
+		strcpy(trace_method_name, val);
+	else {
+		trace_method_name[0] = '\\';
+		strcpy(trace_method_name+1, val);
+	}
 
 	/* Restore the original tracer state */
 	(void)acpi_debug_trace(trace_method_name,
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1190616 — [PATCH 0/4] ACPI: Update method tracing facility.

FromLv Zheng <lv.zheng@intel.com>
Date2015-07-23 07:10 +0200
Subject[PATCH 0/4] ACPI: Update method tracing facility.
Message-ID<pPgVB-5hq-13@gated-at.bofh.it>
In reply to#1190604
This patch updates method tracing facility according to ACPICA 20150717
release changes.

Lv Zheng (4):
  ACPI / sysfs: Add ACPI_LV_REPAIR debug level.
  ACPI / sysfs: Update method tracing facility.
  ACPI / Documentation: Update method tracing documentation.
  ACPI / sysfs: Add support to allow suppress leading "\" in
    trace_method_name.

 Documentation/acpi/method-tracing.txt |   53 +++++++++----
 drivers/acpi/osl.c                    |    8 ++
 drivers/acpi/sysfs.c                  |  133 ++++++++++++++++++++++++---------
 3 files changed, 145 insertions(+), 49 deletions(-)

-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1191450 — RE: [PATCH 0/4] ACPI: Update method tracing facility.

From"Zheng, Lv" <lv.zheng@intel.com>
Date2015-07-24 04:10 +0200
SubjectRE: [PATCH 0/4] ACPI: Update method tracing facility.
Message-ID<pPAAX-8ws-37@gated-at.bofh.it>
In reply to#1190616
SGksIFJhZmFlbA0KDQpBQ1BJQ0EgbG9ncyBjb250YWluIGRldGFpbHMgKHRyYWNlIGxvZ3MpIHRo
YXQgbWF5IGJlIHVzZWZ1bCBmb3IgZGV2ZWxvcG1lbnQuDQpCdXQgdGhlIHF1YW50aXR5IG9mIHRo
ZSB0cmFjZSBsb2dzIGFyZSBodWdlIHRvIGJlIHB1dCBpbnRvIHRoZSBrZXJuZWwgbG9nIGJ1ZmZl
ci4NCk9yaWdpbmFsbHksIHdlIGhhdmUgYSAidHJhY2UgbG9nIHJlZHVjZXIiIGluIC9zeXMvbW9k
dWxlcy9hY3BpL3BhcmFtZXRlciwgaXQgaXMgdGhlIG1ldGhvZCB0cmFjaW5nIGZhY2lsaXR5Lg0K
V2UgY2FuIHNwZWNpZnkgYSBtZXRob2QgbmFtZSwgZm9yIGV4YW1wbGUsICJfUFMwIiwgYW5kIGNv
cnJlc3BvbmRpbmcgZGVidWcgbGF5ZXIvbGV2ZWwgZm9yIHRoZSAidHJhY2UgbG9nIHJlZHVjZXIi
Lg0KV2hlbiB0aGUgQU1MIGludGVycHJldGVyIHN0YXJ0cyB0byBleGVjdXRlIHRoZSBtZXRob2Qs
IHRoZSB0cmFjaW5nIGRlYnVnIGxldmVsL2xheWVyIHdpbGwgYmUgYXBwbGllZC4NCldoZW4gdGhl
IEFNTCBpbnRlcnByZXRlciBzdG9wcyB0byBleGVjdXRlIHRoZSBtZXRob2QsIHRoZSBvcmlnaW5h
bCBkZWJ1ZyBsZXZlbC9sYXllciBpcyByZXN0b3JlZC4NClRodXMgdGhlIEFDUElDQSB0cmFjZSBs
b2dzIGNhbiBvbmx5IGJlIGVuYWJsZWQgZHVyaW5nIHRoZSBwZXJpb2QgdGhlIHNwZWNpZmllZCBt
ZXRob2QgaXMgZXhlY3V0ZWQgYW5kIGl0cyBvdXRwdXQgdGh1cyBjYW4gYmUgcmVkdWNlZC4NClRo
ZSBmYWNpbGl0eSBpbnZva2VzIGFjcGlfZGVidWdfdHJhY2UoKSB0byBkbyB0aGUgZmxleGlibGUg
c2V0dGluZ3MuDQpTZWUgRG9jdW1lbnRhdGlvbi9hY3BpL21ldGhvZC10cmFjaW5nLnR4dCBmb3Ig
cmVmZXJlbmNlLg0KDQpBY3R1YWxseSwgdGhlICJ0cmFjZSBsb2cgcmVkdWNlciIgZmFjaWxpdHkg
aXMgYnVnZ3kgYW5kIHNvbWUgb2YgdGhlIHNob3J0Y29taW5ncyBwdXQgdXMgaW50byB0aGUgdHJv
dWJsZSBpbiB1c2luZyBpdC4NCjEuIFdlIGNhbm5vdCBzcGVjaWZ5IGEgZnVsbCBwYXRoIGZvciB0
aGUgdHJhY2luZyBtZXRob2QuIEZvciBleGFtcGxlLCB0aG91Z2ggd2Ugb25seSB3YW50IHRvIHRy
YWNrIFxfU0IsUENJMC5JMkMwLl9QUzAsIHdlIGNhbiBvbmx5IHNwZWNpZnkgIl9QUzAiIGFuZCBh
bGwgX1BTMCBtZXRob2QgZXhlY3V0aW9uIGxvZ3Mgd2lsbCBiZSBkdW1wZWQsIHRoZSB1bndhbnRl
ZCBfUFMwIGV4ZWN1dGlvbiB0cmFjZSBsb2dzIG1heSBzdGlsbCBibG93IHRoZSBrZXJuZWwgbG9n
IGJ1ZmZlciB1cC4NCjIuIFdlIGNhbiBvbmx5IHNwZWNpZnkgYSBtZXRob2QgdGhhdCBpcyBwYXNz
ZWQgdG8gYWNwaV9ldmFsdWF0ZV9vYmplY3QoKS4gRm9yIGV4YW1wbGUsIGlmIFxfU0IuTElEMC5f
TElEIGludm9rZXMgXF9TQi5QQ0kwLkxQQ0IuSF9FQy5FQ1JELCBzaW5jZSBMaW51eCBuZXZlciBw
YXNzZXMgXF9TQi5QQ0kwLkxQQ0IuSF9FQy5FQ1JEIHRvIGFjcGlfZXZhbHVhdGVfb2JqZWN0KCks
IHNwZWNpZnlpbmcgIkVDUkQiIGNhbm5vdCBtYXRjaCB0aGUgc3RhcnQgb2YgdGhlIGV4ZWN1dGlv
biB0byBlbmFibGUgdGhlICJ0cmFjZSBsb2cgcmVkdWNlciIuDQoNClNvIGR1cmluZyB0aGlzIEFD
UElDQSByZWxlYXNlLCB3ZSByZS1pbXBsZW1lbnQgdGhlIGZhY2lsaXR5IGluIHRoZSBBQ1BJQ0Eg
ZGlzcGF0Y2hlciByYXRoZXIgdGhhbiBpbXBsZW1lbnRpbmcgaXQgaW4gYWNwaV9ldmFsdWF0ZV9v
YmplY3QgYW5kIGFsbG93cyB0aGUgZnVsbCBwYXRoIHRvIGJlIHNwZWNpZmllZCB0byBwcmVjaXNl
bHkgbG9jayBvbiBhIHNwZWNpZmljIGNvbnRyb2wgbWV0aG9kLg0KSXQgaXMgYWNoaWV2ZWQgYnkg
ZG9pbmcgdGhlIGZvbGxvd2luZyBpbXByb3ZlbWVudHM6DQoxLiBSZS1pbXBsZW1lbnRzIHRoZSBm
YWNpbGl0eSBpbiB0aGUgQUNQSUNBIGRpc3BhdGNoZXIgY29tcG9uZW50Lg0KMS4gSW50cm9kdWNl
IGEgbmV3IEFNTCBwYXRoIC0+IEFTTCBwYXRoIGRlY29kaW5nIGZhY2lsaXR5IHRvIHphcCB0aGUg
dHJhaWxpbmcgdW5kZXJzY29yZS4gT3JpZ2luYWxseSBBQ1BJQ0EgZGVjb2RlcyBBTUwgcGF0aCBp
bnRvIHN1Y2ggYSBmb3JtYXQgdGhhdCB0aGUgdXNlciBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSB0
aGUgdHJhaWxpbmcuIEFuZCB1c2VycyBhcmUgbGlrZWx5IHRvIGZvcmdldCB0byBwdXQgdGhlIHVu
ZGVyc2NvcmVzIGFuZCBsZWF2ZSB1cyB3aXRoIHVzZWxlc3MgdHJhY2UgbG9ncy4NCjIuIE1vdmUg
dGhlIGV4Y2VwdGlvbiBzdGFjayB3YWxrZXIgZnJvbSB0aGUgQUNQSUNBIGRlYnVnZ2VyIGNvbXBv
bmVudCB0byB0aGUgQUNQSUNBIGRpc3BhdGNoZXIgY29tcG9uZW50LiBXaGVuIGFuIGV4Y2VwdGlv
biBpcyBlbmNvdW50ZXJlZCwgQU1MIGludGVycHJldGVyIGp1c3QganVtcHMgdG8gdGhlIHRvcCBv
ZiB0aGUgc3RhY2suIFRodXMgd2UgbmVlZCBhIGZhY2lsaXR5IHRvIHdhbGsgdGhlIHN0YWNrIHNv
IHRoYXQgdGhlIG1ldGhvZCBjYW4gYmUgbWF0Y2hlZCB0byBpbXBsZW1lbnQgdGhlICJlbmQgb2Yg
dGhlIHRyYWNpbmciLg0KDQpBbmQgd2l0aCB0aGUgaW1wcm92ZW1lbnRzLCB3ZSBub3cgY2FuIGRv
IGFuIGV4Y2l0aW5nIHRyYWNpbmc6DQoxLiBXaGVuIHRoZSB0cmFjZSBpcyBlbmFibGVkLCB3ZSBh
ZGQgbmV3IGxvZyBlbnRyaWVzIGZvciB0aGUgYmVnaW4vZW5kIG9mIGVhY2ggY29udHJvbCBtZXRo
b2QgdGhhdCBpcyBleGVjdXRlZCBieSB0aGUgaW50ZXJwcmV0ZXIuDQoyLiBXaGVuIHRoZSB0cmFj
ZSBpcyBlbmFibGVkLCB3ZSBhZGQgbmV3IGxvZyBlbnRyaWVzIGZvciB0aGUgYmVnaW4vZW5kIG9m
IGVhY2ggb3Bjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgYnkgdGhlIGludGVycHJldGVyLg0KMy4gV2Ug
YWxsb3cgdGhlIG1ldGhvZCB2aXJ0dWFsIGFkZHJlc3MgYW5kIHRoZSBvcGNvZGUgdmlydHVhbCBh
ZGRyZXNzIHRvIGJlIGR1bXBlZCBhbG9uZyB3aXRoIHRoZSBiZWdpbi9lbmQgbG9ncy4NClRoaXMg
bWFrZXMgaXQgcG9zc2libGUgdG8gZHJhdyBhIEFNTCBjYWxsIGdyYXBoIHVzaW5nIHRoZSBkdW1w
ZWQgbG9nIGFuZCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBleGVjdXRpb24gdGltZSBvZiBhIGNvbnRy
b2wgbWV0aG9kL29wY29kZS4NCldlIGNhbiB1c2UgaXQgZWl0aGVyIGZvciBwZXJmb3JtYW5jZSB0
dW5pbmcgb3IgcmVtb3RlIGRlYnVnZ2luZy4NClRoZSBuZXcgZmVhdHVyZSBpcyBrbm93biBhcyAi
QU1MIGV4ZWN1dGlvbiB0cmFjZXIiLg0KDQpBbGwgb2YgYWJvdmUgaW1wcm92ZW1lbnRzIGFyZSBk
b25lIHRvIHRoZSBhY3BpX2RlYnVnX3RyYWNlKCksIG5ldyBmZWF0dXJlcy9wYXJhbWV0ZXJzIGFy
ZSBhZGRlZCB0byB0aGlzIEFDUElDQSBpbnRlcmZhY2UuDQpOb3cgYWNwaV9kZWJ1Z190cmFjZSgp
IGNhbiBiZSB1c2VkIG5vdCBvbmx5IGFzIHRoZSAidHJhY2UgbG9nIHJlZHVjZXIiIGJ1dCBhbHNv
IHRoZSAiQU1MIGV4ZWN1dGlvbiB0cmFjZXIiLg0KQXMgaXRzIHVzZXIsIC9zeXMvbW9kdWxlcy9h
Y3BpL3BhcmFtZXRlcnMvdHJhY2VfeHh4IGZpbGVzIG5lZWQgdG8gYmUgdXBkYXRlZCBzbyB0aGF0
IHdlIGNhbiB1c2UgdGhlIGZpeGVkL2ltcHJvdmVkIG9sZCBmZWF0dXJlIGFuZCB0aGUgbmV3IGZl
YXR1cmUgaW4gdGhlIExpbnV4IGtlcm5lbC4NCg0KVGhlcmUgaXMgYW4gdXNlciBleHBlcmllbmNl
IGV4YW1wbGUgb2YgdGhlIG5ldyBmZWF0dXJlIChBTUwgZXhlY3V0aW9uIHRyYWNlcikgb24gdGhl
IGtlcm5lbCBCdWd6aWxsYToNCmh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzA4OTENClRoZSB1c2VyIHJlcG9ydGVkIGEgZGVsYXkgdG8gdGhlIEFDUElDQSBkZXZl
bG9wZXJzIG1haWxpbmcgbGlzdCBhbmQgSSBoZWxwZWQgdG8gZmlsZSBhIGJ1ZyB0aGVyZS4NCldp
dGggdGhlIGFzc2lzdGFuY2Ugb2YgdGhpcyBkZWJ1Z2dpbmcgZmFjaWxpdHkgKHNlZSBjb21tZW50
IDI5LCAzMCwgMzEpLCBJIGZvdW5kIHRoZSBkZWxheSB3YXMgY2F1c2VkIGJ5IHRoZSBFQyBkcml2
ZXIgKHNvIHRoaXMgaXMgcmVhbGx5IGFuIGVmZmVjdGl2ZSBkZWJ1Z2dpbmcgZmFjaWxpdHkpLg0K
VGhpcyBidWcgKGVycm9uZW91c2x5IHJlcG9ydGVkIGFzIGFuIEFDUElDQSBpc3N1ZSkgbW90aXZh
dGVkIG1lIHRvIGxvb2sgYXQgdGhlIExpbnV4IEVDIGRyaXZlciBhbmQgb2ZmZXJlZCB0aGUgZml4
ZXMgdG8gaGVscCB0byBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mIHRoZSBFQy9HUEUgaW1wbGVtZW50
YXRpb25zLg0KDQpIb3BlIHRoaXMgZXhwbGFuYXRpb24gY2FuIGhlbHAuDQoNClRoYW5rcyBhbmQg
YmVzdCByZWdhcmRzDQotTHYNCg0KPiBGcm9tOiBSYWZhZWwgSi4gV3lzb2NraSBbbWFpbHRvOnJq
d0Byand5c29ja2kubmV0XQ0KPiBTZW50OiBGcmlkYXksIEp1bHkgMjQsIDIwMTUgNDo1MSBBTQ0K
PiANCj4gT24gVGh1cnNkYXksIEp1bHkgMjMsIDIwMTUgMDE6MDY6MzcgUE0gTHYgWmhlbmcgd3Jv
dGU6DQo+ID4gVGhpcyBwYXRjaCB1cGRhdGVzIG1ldGhvZCB0cmFjaW5nIGZhY2lsaXR5IGFjY29y
ZGluZyB0byBBQ1BJQ0EgMjAxNTA3MTcNCj4gPiByZWxlYXNlIGNoYW5nZXMuDQo+IA0KPiBDYW4g
eW91IHBsZWFzZSBleHBsYWluIHRoaXMgaW4gYSBmZXcgbW9yZSB3b3Jkcy4NCj4gDQo+IFdoeSBk
byB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaW50ZXJmYWNlPw0KPiANCj4gUmFmYWVsDQoNCg==
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1192594 — RE: [PATCH 0/4] ACPI: Update method tracing facility.

From"Zheng, Lv" <lv.zheng@intel.com>
Date2015-07-27 02:50 +0200
SubjectRE: [PATCH 0/4] ACPI: Update method tracing facility.
Message-ID<pQEMa-2uk-9@gated-at.bofh.it>
In reply to#1191450
SGksIFJhZmFlbA0KDQo+IEZyb206IGxpbnV4LWFjcGktb3duZXJAdmdlci5rZXJuZWwub3JnIFtt
YWlsdG86bGludXgtYWNwaS1vd25lckB2Z2VyLmtlcm5lbC5vcmddIE9uIEJlaGFsZiBPZiBSYWZh
ZWwgSi4gV3lzb2NraQ0KPiBTZW50OiBTYXR1cmRheSwgSnVseSAyNSwgMjAxNSAzOjU2IEFNDQo+
IA0KPiBPbiBGcmlkYXksIEp1bHkgMjQsIDIwMTUgMDI6MDI6MzMgQU0gWmhlbmcsIEx2IHdyb3Rl
Og0KPiA+IEhpLCBSYWZhZWwNCj4gDQo+IEhpLA0KPiANCj4gPiBBQ1BJQ0EgbG9ncyBjb250YWlu
IGRldGFpbHMgKHRyYWNlIGxvZ3MpIHRoYXQgbWF5IGJlIHVzZWZ1bCBmb3IgZGV2ZWxvcG1lbnQu
DQo+ID4gQnV0IHRoZSBxdWFudGl0eSBvZiB0aGUgdHJhY2UgbG9ncyBhcmUgaHVnZSB0byBiZSBw
dXQgaW50byB0aGUga2VybmVsIGxvZyBidWZmZXIuDQo+ID4gT3JpZ2luYWxseSwgd2UgaGF2ZSBh
ICJ0cmFjZSBsb2cgcmVkdWNlciIgaW4gL3N5cy9tb2R1bGVzL2FjcGkvcGFyYW1ldGVyLCBpdCBp
cyB0aGUgbWV0aG9kIHRyYWNpbmcgZmFjaWxpdHkuDQo+ID4gV2UgY2FuIHNwZWNpZnkgYSBtZXRo
b2QgbmFtZSwgZm9yIGV4YW1wbGUsICJfUFMwIiwgYW5kIGNvcnJlc3BvbmRpbmcgZGVidWcgbGF5
ZXIvbGV2ZWwgZm9yIHRoZSAidHJhY2UgbG9nIHJlZHVjZXIiLg0KPiA+IFdoZW4gdGhlIEFNTCBp
bnRlcnByZXRlciBzdGFydHMgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kLCB0aGUgdHJhY2luZyBkZWJ1
ZyBsZXZlbC9sYXllciB3aWxsIGJlIGFwcGxpZWQuDQo+ID4gV2hlbiB0aGUgQU1MIGludGVycHJl
dGVyIHN0b3BzIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCwgdGhlIG9yaWdpbmFsIGRlYnVnIGxldmVs
L2xheWVyIGlzIHJlc3RvcmVkLg0KPiA+IFRodXMgdGhlIEFDUElDQSB0cmFjZSBsb2dzIGNhbiBv
bmx5IGJlIGVuYWJsZWQgZHVyaW5nIHRoZSBwZXJpb2QgdGhlIHNwZWNpZmllZCBtZXRob2QgaXMg
ZXhlY3V0ZWQgYW5kIGl0cyBvdXRwdXQgdGh1cyBjYW4gYmUNCj4gcmVkdWNlZC4NCj4gPiBUaGUg
ZmFjaWxpdHkgaW52b2tlcyBhY3BpX2RlYnVnX3RyYWNlKCkgdG8gZG8gdGhlIGZsZXhpYmxlIHNl
dHRpbmdzLg0KPiA+IFNlZSBEb2N1bWVudGF0aW9uL2FjcGkvbWV0aG9kLXRyYWNpbmcudHh0IGZv
ciByZWZlcmVuY2UuDQo+ID4NCj4gPiBBY3R1YWxseSwgdGhlICJ0cmFjZSBsb2cgcmVkdWNlciIg
ZmFjaWxpdHkgaXMgYnVnZ3kgYW5kIHNvbWUgb2YgdGhlIHNob3J0Y29taW5ncyBwdXQgdXMgaW50
byB0aGUgdHJvdWJsZSBpbiB1c2luZyBpdC4NCj4gPiAxLiBXZSBjYW5ub3Qgc3BlY2lmeSBhIGZ1
bGwgcGF0aCBmb3IgdGhlIHRyYWNpbmcgbWV0aG9kLiBGb3IgZXhhbXBsZSwgdGhvdWdoIHdlIG9u
bHkgd2FudCB0byB0cmFjayBcX1NCLFBDSTAuSTJDMC5fUFMwLCB3ZSBjYW4gb25seQ0KPiBzcGVj
aWZ5ICJfUFMwIiBhbmQgYWxsIF9QUzAgbWV0aG9kIGV4ZWN1dGlvbiBsb2dzIHdpbGwgYmUgZHVt
cGVkLCB0aGUgdW53YW50ZWQgX1BTMCBleGVjdXRpb24gdHJhY2UgbG9ncyBtYXkgc3RpbGwgYmxv
dyB0aGUga2VybmVsDQo+IGxvZyBidWZmZXIgdXAuDQo+ID4gMi4gV2UgY2FuIG9ubHkgc3BlY2lm
eSBhIG1ldGhvZCB0aGF0IGlzIHBhc3NlZCB0byBhY3BpX2V2YWx1YXRlX29iamVjdCgpLiBGb3Ig
ZXhhbXBsZSwgaWYgXF9TQi5MSUQwLl9MSUQgaW52b2tlcw0KPiBcX1NCLlBDSTAuTFBDQi5IX0VD
LkVDUkQsIHNpbmNlIExpbnV4IG5ldmVyIHBhc3NlcyBcX1NCLlBDSTAuTFBDQi5IX0VDLkVDUkQg
dG8gYWNwaV9ldmFsdWF0ZV9vYmplY3QoKSwgc3BlY2lmeWluZyAiRUNSRCIgY2Fubm90DQo+IG1h
dGNoIHRoZSBzdGFydCBvZiB0aGUgZXhlY3V0aW9uIHRvIGVuYWJsZSB0aGUgInRyYWNlIGxvZyBy
ZWR1Y2VyIi4NCj4gPg0KPiA+IFNvIGR1cmluZyB0aGlzIEFDUElDQSByZWxlYXNlLCB3ZSByZS1p
bXBsZW1lbnQgdGhlIGZhY2lsaXR5IGluIHRoZSBBQ1BJQ0EgZGlzcGF0Y2hlciByYXRoZXIgdGhh
biBpbXBsZW1lbnRpbmcgaXQgaW4NCj4gYWNwaV9ldmFsdWF0ZV9vYmplY3QgYW5kIGFsbG93cyB0
aGUgZnVsbCBwYXRoIHRvIGJlIHNwZWNpZmllZCB0byBwcmVjaXNlbHkgbG9jayBvbiBhIHNwZWNp
ZmljIGNvbnRyb2wgbWV0aG9kLg0KPiA+IEl0IGlzIGFjaGlldmVkIGJ5IGRvaW5nIHRoZSBmb2xs
b3dpbmcgaW1wcm92ZW1lbnRzOg0KPiA+IDEuIFJlLWltcGxlbWVudHMgdGhlIGZhY2lsaXR5IGlu
IHRoZSBBQ1BJQ0EgZGlzcGF0Y2hlciBjb21wb25lbnQuDQo+ID4gMS4gSW50cm9kdWNlIGEgbmV3
IEFNTCBwYXRoIC0+IEFTTCBwYXRoIGRlY29kaW5nIGZhY2lsaXR5IHRvIHphcCB0aGUgdHJhaWxp
bmcgdW5kZXJzY29yZS4gT3JpZ2luYWxseSBBQ1BJQ0EgZGVjb2RlcyBBTUwgcGF0aCBpbnRvDQo+
IHN1Y2ggYSBmb3JtYXQgdGhhdCB0aGUgdXNlciBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUg
dHJhaWxpbmcuIEFuZCB1c2VycyBhcmUgbGlrZWx5IHRvIGZvcmdldCB0byBwdXQgdGhlIHVuZGVy
c2NvcmVzIGFuZCBsZWF2ZSB1cyB3aXRoDQo+IHVzZWxlc3MgdHJhY2UgbG9ncy4NCj4gPiAyLiBN
b3ZlIHRoZSBleGNlcHRpb24gc3RhY2sgd2Fsa2VyIGZyb20gdGhlIEFDUElDQSBkZWJ1Z2dlciBj
b21wb25lbnQgdG8gdGhlIEFDUElDQSBkaXNwYXRjaGVyIGNvbXBvbmVudC4gV2hlbiBhbg0KPiBl
eGNlcHRpb24gaXMgZW5jb3VudGVyZWQsIEFNTCBpbnRlcnByZXRlciBqdXN0IGp1bXBzIHRvIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLiBUaHVzIHdlIG5lZWQgYSBmYWNpbGl0eSB0byB3YWxrIHRoZSBz
dGFjayBzbyB0aGF0IHRoZQ0KPiBtZXRob2QgY2FuIGJlIG1hdGNoZWQgdG8gaW1wbGVtZW50IHRo
ZSAiZW5kIG9mIHRoZSB0cmFjaW5nIi4NCj4gPg0KPiA+IEFuZCB3aXRoIHRoZSBpbXByb3ZlbWVu
dHMsIHdlIG5vdyBjYW4gZG8gYW4gZXhjaXRpbmcgdHJhY2luZzoNCj4gPiAxLiBXaGVuIHRoZSB0
cmFjZSBpcyBlbmFibGVkLCB3ZSBhZGQgbmV3IGxvZyBlbnRyaWVzIGZvciB0aGUgYmVnaW4vZW5k
IG9mIGVhY2ggY29udHJvbCBtZXRob2QgdGhhdCBpcyBleGVjdXRlZCBieSB0aGUgaW50ZXJwcmV0
ZXIuDQo+ID4gMi4gV2hlbiB0aGUgdHJhY2UgaXMgZW5hYmxlZCwgd2UgYWRkIG5ldyBsb2cgZW50
cmllcyBmb3IgdGhlIGJlZ2luL2VuZCBvZiBlYWNoIG9wY29kZSB0aGF0IGlzIGV4ZWN1dGVkIGJ5
IHRoZSBpbnRlcnByZXRlci4NCj4gPiAzLiBXZSBhbGxvdyB0aGUgbWV0aG9kIHZpcnR1YWwgYWRk
cmVzcyBhbmQgdGhlIG9wY29kZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYmUgZHVtcGVkIGFsb25nIHdp
dGggdGhlIGJlZ2luL2VuZCBsb2dzLg0KPiA+IFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZHJh
dyBhIEFNTCBjYWxsIGdyYXBoIHVzaW5nIHRoZSBkdW1wZWQgbG9nIGFuZCB3ZSBjYW4gY2FsY3Vs
YXRlIHRoZSBleGVjdXRpb24gdGltZSBvZiBhIGNvbnRyb2wNCj4gbWV0aG9kL29wY29kZS4NCj4g
PiBXZSBjYW4gdXNlIGl0IGVpdGhlciBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nIG9yIHJlbW90ZSBk
ZWJ1Z2dpbmcuDQo+ID4gVGhlIG5ldyBmZWF0dXJlIGlzIGtub3duIGFzICJBTUwgZXhlY3V0aW9u
IHRyYWNlciIuDQo+ID4NCj4gPiBBbGwgb2YgYWJvdmUgaW1wcm92ZW1lbnRzIGFyZSBkb25lIHRv
IHRoZSBhY3BpX2RlYnVnX3RyYWNlKCksIG5ldyBmZWF0dXJlcy9wYXJhbWV0ZXJzIGFyZSBhZGRl
ZCB0byB0aGlzIEFDUElDQSBpbnRlcmZhY2UuDQo+ID4gTm93IGFjcGlfZGVidWdfdHJhY2UoKSBj
YW4gYmUgdXNlZCBub3Qgb25seSBhcyB0aGUgInRyYWNlIGxvZyByZWR1Y2VyIiBidXQgYWxzbyB0
aGUgIkFNTCBleGVjdXRpb24gdHJhY2VyIi4NCj4gPiBBcyBpdHMgdXNlciwgL3N5cy9tb2R1bGVz
L2FjcGkvcGFyYW1ldGVycy90cmFjZV94eHggZmlsZXMgbmVlZCB0byBiZSB1cGRhdGVkIHNvIHRo
YXQgd2UgY2FuIHVzZSB0aGUgZml4ZWQvaW1wcm92ZWQgb2xkIGZlYXR1cmUNCj4gYW5kIHRoZSBu
ZXcgZmVhdHVyZSBpbiB0aGUgTGludXgga2VybmVsLg0KPiA+DQo+ID4gVGhlcmUgaXMgYW4gdXNl
ciBleHBlcmllbmNlIGV4YW1wbGUgb2YgdGhlIG5ldyBmZWF0dXJlIChBTUwgZXhlY3V0aW9uIHRy
YWNlcikgb24gdGhlIGtlcm5lbCBCdWd6aWxsYToNCj4gPiBodHRwczovL2J1Z3ppbGxhLmtlcm5l
bC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODkxDQo+ID4gVGhlIHVzZXIgcmVwb3J0ZWQgYSBkZWxh
eSB0byB0aGUgQUNQSUNBIGRldmVsb3BlcnMgbWFpbGluZyBsaXN0IGFuZCBJIGhlbHBlZCB0byBm
aWxlIGEgYnVnIHRoZXJlLg0KPiA+IFdpdGggdGhlIGFzc2lzdGFuY2Ugb2YgdGhpcyBkZWJ1Z2dp
bmcgZmFjaWxpdHkgKHNlZSBjb21tZW50IDI5LCAzMCwgMzEpLCBJIGZvdW5kIHRoZSBkZWxheSB3
YXMgY2F1c2VkIGJ5IHRoZSBFQyBkcml2ZXIgKHNvIHRoaXMgaXMgcmVhbGx5DQo+IGFuIGVmZmVj
dGl2ZSBkZWJ1Z2dpbmcgZmFjaWxpdHkpLg0KPiA+IFRoaXMgYnVnIChlcnJvbmVvdXNseSByZXBv
cnRlZCBhcyBhbiBBQ1BJQ0EgaXNzdWUpIG1vdGl2YXRlZCBtZSB0byBsb29rIGF0IHRoZSBMaW51
eCBFQyBkcml2ZXIgYW5kIG9mZmVyZWQgdGhlIGZpeGVzIHRvIGhlbHAgdG8NCj4gaW1wcm92ZSB0
aGUgcXVhbGl0eSBvZiB0aGUgRUMvR1BFIGltcGxlbWVudGF0aW9ucy4NCj4gPg0KPiA+IEhvcGUg
dGhpcyBleHBsYW5hdGlvbiBjYW4gaGVscC4NCj4gDQo+IEFsbCBvZiB0aGF0IGlzIGdvb2QgaW5m
b3JtYXRpb24sIHNvIHdoYXQgYWJvdXQgc2VuZGluZyBhIGRvY3VtZW50YXRpb24gcGF0Y2gNCj4g
d2l0aCBpdD8NCg0KT0ssIEknbGwgcmUtc2VuZCB0aGlzIHBhdGNoc2V0IHRvIGluY2x1ZGUgdGhl
IGFib3ZlIGluZm9ybWF0aW9uIGluIERvY3VtZW50YXRpb24vYWNwaS9tZXRob2QtdHJhY2luZy50
eHQuDQoNClRoYW5rcyBhbmQgYmVzdCByZWdhcmRzDQotTHYNCg0KPiANCj4gUmFmYWVsDQo+IA0K
PiAtLQ0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5z
dWJzY3JpYmUgbGludXgtYWNwaSIgaW4NCj4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9y
ZG9tb0B2Z2VyLmtlcm5lbC5vcmcNCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3Zn
ZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sDQo=
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1194743

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2015-07-29 02:40 +0200
Message-ID<pRnzA-qS-5@gated-at.bofh.it>
In reply to#1190604
On Thursday, July 23, 2015 12:51:58 PM Lv Zheng wrote:
> The 20150717 ACPICA kernel-resident subsystem updates are linuxized based
> on the linux-pm/linux-next branch.
> 
> The patchset has passed the following build/boot tests.
> Build tests are performed as follows:
> 1. i386 + default + COFNIG_ACPI=y
> 2. i386 + allyes + CONFIG_ACPI=y
> 3. i386 + default + COFNIG_ACPI=n
> 4. i386 + allyes + CONFIG_ACPI=n
> 5. x86_64 + default + COFNIG_ACPI=y
> 6. x86_64 + allyes + CONFIG_ACPI=y
> 7. x86_64 + default + COFNIG_ACPI=n
> 8. x86_64 + allyes + CONFIG_ACPI=n
> Boot tests are performed as follows:
> 1. i386 + default + COFNIG_ACPI=y
> 2. x86_64 + default + COFNIG_ACPI=y
> Where:
> 1. i386: machine named as "Dell Inspiron Mini 1010"
> 2. x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
> 3. default: kernel configuration with following items enabled:
>    All hardware drivers related to the machines of i386/x86_64
>    All "drivers/acpi" configurations
>    All "drivers/platform" drivers
>    All other drivers that link the APIs provided by ACPICA subsystem
> 
> The divergences checking result:
> Before applying (20150619 Release):
>   539 lines
> After applying (20150717 Release):
>   518 lines
> Note that the reduction is due to:
> 1. The FACS related divergences are not counted;
> 2. Some debugger related divergences are merged in this release as the
>    configurability of the debugger code has improved.
> 
> Bob Moore (6):
>   ACPICA: iASL: Add new warnings for method local_x and arg_x
>     variables.
>   ACPICA: Cleanup use of all non-ANSI local C library functions.
>   ACPICA: Cleanup use of NEGATIVE and POSITIVE defines.
>   ACPICA: iASL: Add support for TCPA Server Table.
>   ACPICA: iASL/Disassembler: Add prototype verbose mode.
>   ACPICA: Update version to 20150717.
> 
> Lv Zheng (15):
>   ACPICA: Parser: Reduce parser/namespace divergences for tracer
>     support.
>   ACPICA: Parser: Cleanup aml_offset in struct acpi_walk_state.
>   ACPICA: Parser: Cleanup aml_offset in union acpi_operand_object.
>   ACPICA: Dispatcher: Cleanup union acpi_operand_object's AML address
>     assignments.
>   ACPICA: Executer: Add back pointing reference of method operand.
>   ACPICA: Namespace: Add function to directly return normalized full
>     path.
>   ACPICA: Dispatcher: Move stack traversal code to dispatcher.
>   ACPICA: Dispatcher: Add trace support for interpreter.
>   ACPICA: Executer: Add interpreter tracing mode for method tracing
>     facility.
>   ACPICA: Executer: Add OSL trace hook support.
>   ACPICA: Executer: Add option to bypass opcode tracing.
>   ACPICA: Parser: Remove redundant opcode execution debugging output.
>   ACPICA: MSVC: Fix inclusion order issue of <crtdbg.h>.
>   ACPICA: Debugger: Reduce structure size for debugger.
>   ACPICA: Debugger: Move debugger specific APIs to debugger component.
> 
> Markus Elfring (1):
>   ACPICA: Remove extraneous check for null walk_state.

Series queued up for 4.3, thanks!

Rafael

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1194766

From"Zheng, Lv" <lv.zheng@intel.com>
Date2015-07-29 03:50 +0200
Message-ID<pRoFj-1X0-1@gated-at.bofh.it>
In reply to#1194743
SGksIFJhZmFlbA0KIA0KWW91IG1heSBhbHNvIG5lZWQgdGhpcyBwYXRjaDoNCmh0dHBzOi8vcGF0
Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvNjg3OTYyMS8NCldoaWNoIGZpeGVzIGEgcHJvYmxlbSBp
biB0aGlzIHJlbGVhc2UuDQpTb3JyeSBmb3Igbm90aWNpbmcgdGhpcyBsYXRlLg0KDQpUaGFua3Mg
YW5kIGJlc3QgcmVnYXJkcw0KLUx2DQoNCj4gRnJvbTogUmFmYWVsIEouIFd5c29ja2kgW21haWx0
bzpyandAcmp3eXNvY2tpLm5ldF0NCj4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDI5LCAyMDE1IDg6
NTggQU0NCj4gDQo+IE9uIFRodXJzZGF5LCBKdWx5IDIzLCAyMDE1IDEyOjUxOjU4IFBNIEx2IFpo
ZW5nIHdyb3RlOg0KPiA+IFRoZSAyMDE1MDcxNyBBQ1BJQ0Ega2VybmVsLXJlc2lkZW50IHN1YnN5
c3RlbSB1cGRhdGVzIGFyZSBsaW51eGl6ZWQgYmFzZWQNCj4gPiBvbiB0aGUgbGludXgtcG0vbGlu
dXgtbmV4dCBicmFuY2guDQo+ID4NCj4gPiBUaGUgcGF0Y2hzZXQgaGFzIHBhc3NlZCB0aGUgZm9s
bG93aW5nIGJ1aWxkL2Jvb3QgdGVzdHMuDQo+ID4gQnVpbGQgdGVzdHMgYXJlIHBlcmZvcm1lZCBh
cyBmb2xsb3dzOg0KPiA+IDEuIGkzODYgKyBkZWZhdWx0ICsgQ09GTklHX0FDUEk9eQ0KPiA+IDIu
IGkzODYgKyBhbGx5ZXMgKyBDT05GSUdfQUNQST15DQo+ID4gMy4gaTM4NiArIGRlZmF1bHQgKyBD
T0ZOSUdfQUNQST1uDQo+ID4gNC4gaTM4NiArIGFsbHllcyArIENPTkZJR19BQ1BJPW4NCj4gPiA1
LiB4ODZfNjQgKyBkZWZhdWx0ICsgQ09GTklHX0FDUEk9eQ0KPiA+IDYuIHg4Nl82NCArIGFsbHll
cyArIENPTkZJR19BQ1BJPXkNCj4gPiA3LiB4ODZfNjQgKyBkZWZhdWx0ICsgQ09GTklHX0FDUEk9
bg0KPiA+IDguIHg4Nl82NCArIGFsbHllcyArIENPTkZJR19BQ1BJPW4NCj4gPiBCb290IHRlc3Rz
IGFyZSBwZXJmb3JtZWQgYXMgZm9sbG93czoNCj4gPiAxLiBpMzg2ICsgZGVmYXVsdCArIENPRk5J
R19BQ1BJPXkNCj4gPiAyLiB4ODZfNjQgKyBkZWZhdWx0ICsgQ09GTklHX0FDUEk9eQ0KPiA+IFdo
ZXJlOg0KPiA+IDEuIGkzODY6IG1hY2hpbmUgbmFtZWQgYXMgIkRlbGwgSW5zcGlyb24gTWluaSAx
MDEwIg0KPiA+IDIuIHg4Nl82NDogbWFjaGluZSBuYW1lZCBhcyAiSFAgQ29tcGFxIDgyMDAgRWxp
dGUgU0ZGIFBDIg0KPiA+IDMuIGRlZmF1bHQ6IGtlcm5lbCBjb25maWd1cmF0aW9uIHdpdGggZm9s
bG93aW5nIGl0ZW1zIGVuYWJsZWQ6DQo+ID4gICAgQWxsIGhhcmR3YXJlIGRyaXZlcnMgcmVsYXRl
ZCB0byB0aGUgbWFjaGluZXMgb2YgaTM4Ni94ODZfNjQNCj4gPiAgICBBbGwgImRyaXZlcnMvYWNw
aSIgY29uZmlndXJhdGlvbnMNCj4gPiAgICBBbGwgImRyaXZlcnMvcGxhdGZvcm0iIGRyaXZlcnMN
Cj4gPiAgICBBbGwgb3RoZXIgZHJpdmVycyB0aGF0IGxpbmsgdGhlIEFQSXMgcHJvdmlkZWQgYnkg
QUNQSUNBIHN1YnN5c3RlbQ0KPiA+DQo+ID4gVGhlIGRpdmVyZ2VuY2VzIGNoZWNraW5nIHJlc3Vs
dDoNCj4gPiBCZWZvcmUgYXBwbHlpbmcgKDIwMTUwNjE5IFJlbGVhc2UpOg0KPiA+ICAgNTM5IGxp
bmVzDQo+ID4gQWZ0ZXIgYXBwbHlpbmcgKDIwMTUwNzE3IFJlbGVhc2UpOg0KPiA+ICAgNTE4IGxp
bmVzDQo+ID4gTm90ZSB0aGF0IHRoZSByZWR1Y3Rpb24gaXMgZHVlIHRvOg0KPiA+IDEuIFRoZSBG
QUNTIHJlbGF0ZWQgZGl2ZXJnZW5jZXMgYXJlIG5vdCBjb3VudGVkOw0KPiA+IDIuIFNvbWUgZGVi
dWdnZXIgcmVsYXRlZCBkaXZlcmdlbmNlcyBhcmUgbWVyZ2VkIGluIHRoaXMgcmVsZWFzZSBhcyB0
aGUNCj4gPiAgICBjb25maWd1cmFiaWxpdHkgb2YgdGhlIGRlYnVnZ2VyIGNvZGUgaGFzIGltcHJv
dmVkLg0KPiA+DQo+ID4gQm9iIE1vb3JlICg2KToNCj4gPiAgIEFDUElDQTogaUFTTDogQWRkIG5l
dyB3YXJuaW5ncyBmb3IgbWV0aG9kIGxvY2FsX3ggYW5kIGFyZ194DQo+ID4gICAgIHZhcmlhYmxl
cy4NCj4gPiAgIEFDUElDQTogQ2xlYW51cCB1c2Ugb2YgYWxsIG5vbi1BTlNJIGxvY2FsIEMgbGli
cmFyeSBmdW5jdGlvbnMuDQo+ID4gICBBQ1BJQ0E6IENsZWFudXAgdXNlIG9mIE5FR0FUSVZFIGFu
ZCBQT1NJVElWRSBkZWZpbmVzLg0KPiA+ICAgQUNQSUNBOiBpQVNMOiBBZGQgc3VwcG9ydCBmb3Ig
VENQQSBTZXJ2ZXIgVGFibGUuDQo+ID4gICBBQ1BJQ0E6IGlBU0wvRGlzYXNzZW1ibGVyOiBBZGQg
cHJvdG90eXBlIHZlcmJvc2UgbW9kZS4NCj4gPiAgIEFDUElDQTogVXBkYXRlIHZlcnNpb24gdG8g
MjAxNTA3MTcuDQo+ID4NCj4gPiBMdiBaaGVuZyAoMTUpOg0KPiA+ICAgQUNQSUNBOiBQYXJzZXI6
IFJlZHVjZSBwYXJzZXIvbmFtZXNwYWNlIGRpdmVyZ2VuY2VzIGZvciB0cmFjZXINCj4gPiAgICAg
c3VwcG9ydC4NCj4gPiAgIEFDUElDQTogUGFyc2VyOiBDbGVhbnVwIGFtbF9vZmZzZXQgaW4gc3Ry
dWN0IGFjcGlfd2Fsa19zdGF0ZS4NCj4gPiAgIEFDUElDQTogUGFyc2VyOiBDbGVhbnVwIGFtbF9v
ZmZzZXQgaW4gdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdC4NCj4gPiAgIEFDUElDQTogRGlzcGF0
Y2hlcjogQ2xlYW51cCB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0J3MgQU1MIGFkZHJlc3MNCj4g
PiAgICAgYXNzaWdubWVudHMuDQo+ID4gICBBQ1BJQ0E6IEV4ZWN1dGVyOiBBZGQgYmFjayBwb2lu
dGluZyByZWZlcmVuY2Ugb2YgbWV0aG9kIG9wZXJhbmQuDQo+ID4gICBBQ1BJQ0E6IE5hbWVzcGFj
ZTogQWRkIGZ1bmN0aW9uIHRvIGRpcmVjdGx5IHJldHVybiBub3JtYWxpemVkIGZ1bGwNCj4gPiAg
ICAgcGF0aC4NCj4gPiAgIEFDUElDQTogRGlzcGF0Y2hlcjogTW92ZSBzdGFjayB0cmF2ZXJzYWwg
Y29kZSB0byBkaXNwYXRjaGVyLg0KPiA+ICAgQUNQSUNBOiBEaXNwYXRjaGVyOiBBZGQgdHJhY2Ug
c3VwcG9ydCBmb3IgaW50ZXJwcmV0ZXIuDQo+ID4gICBBQ1BJQ0E6IEV4ZWN1dGVyOiBBZGQgaW50
ZXJwcmV0ZXIgdHJhY2luZyBtb2RlIGZvciBtZXRob2QgdHJhY2luZw0KPiA+ICAgICBmYWNpbGl0
eS4NCj4gPiAgIEFDUElDQTogRXhlY3V0ZXI6IEFkZCBPU0wgdHJhY2UgaG9vayBzdXBwb3J0Lg0K
PiA+ICAgQUNQSUNBOiBFeGVjdXRlcjogQWRkIG9wdGlvbiB0byBieXBhc3Mgb3Bjb2RlIHRyYWNp
bmcuDQo+ID4gICBBQ1BJQ0E6IFBhcnNlcjogUmVtb3ZlIHJlZHVuZGFudCBvcGNvZGUgZXhlY3V0
aW9uIGRlYnVnZ2luZyBvdXRwdXQuDQo+ID4gICBBQ1BJQ0E6IE1TVkM6IEZpeCBpbmNsdXNpb24g
b3JkZXIgaXNzdWUgb2YgPGNydGRiZy5oPi4NCj4gPiAgIEFDUElDQTogRGVidWdnZXI6IFJlZHVj
ZSBzdHJ1Y3R1cmUgc2l6ZSBmb3IgZGVidWdnZXIuDQo+ID4gICBBQ1BJQ0E6IERlYnVnZ2VyOiBN
b3ZlIGRlYnVnZ2VyIHNwZWNpZmljIEFQSXMgdG8gZGVidWdnZXIgY29tcG9uZW50Lg0KPiA+DQo+
ID4gTWFya3VzIEVsZnJpbmcgKDEpOg0KPiA+ICAgQUNQSUNBOiBSZW1vdmUgZXh0cmFuZW91cyBj
aGVjayBmb3IgbnVsbCB3YWxrX3N0YXRlLg0KPiANCj4gU2VyaWVzIHF1ZXVlZCB1cCBmb3IgNC4z
LCB0aGFua3MhDQo+IA0KPiBSYWZhZWwNCg0K
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web