ACK: [PATCH][V2] lib: fwts_acpi_object_eval: report better advice on exec failure (LP: #1296710)

IvanHu ivan.hu at canonical.com
Tue Mar 25 10:36:58 UTC 2014


On 03/25/2014 05:29 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> The feedback given when an ACPI evaluation fails was rather limited and
> poor, so add a per-error advice text to explain the error.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>   src/lib/src/fwts_acpi_object_eval.c | 298 +++++++++++++++++++++++++++---------
>   1 file changed, 229 insertions(+), 69 deletions(-)
>
> diff --git a/src/lib/src/fwts_acpi_object_eval.c b/src/lib/src/fwts_acpi_object_eval.c
> index c61e7c8..177d2d2 100644
> --- a/src/lib/src/fwts_acpi_object_eval.c
> +++ b/src/lib/src/fwts_acpi_object_eval.c
> @@ -32,81 +32,239 @@ typedef struct {
>   	const fwts_log_level level;
>   	const char *error_type;
>   	const char *error_text;
> +	const char *advice;
>   } acpi_eval_error;
>
>   static const acpi_eval_error errors[] = {
>   	/* ACPI_STATUS			fwts_log_level		error_type		error_text */
> -	{ AE_ERROR,			LOG_LEVEL_HIGH,		"AEError",		"Environment error" },
> -	{ AE_NO_ACPI_TABLES,		LOG_LEVEL_HIGH,		"AENoACPITables",	"NO ACPI tables" },
> -	{ AE_NO_NAMESPACE,		LOG_LEVEL_HIGH,		"AENoNamespace",	"No namespace" },
> -	{ AE_NO_MEMORY,			LOG_LEVEL_CRITICAL,	"AENoMemory",		"Out of memory" },
> -	{ AE_NOT_FOUND,			LOG_LEVEL_CRITICAL,	"AENotFound",		"Not found" },
> -	{ AE_NOT_EXIST,			LOG_LEVEL_CRITICAL,	"AENotExist",		"Not exist" },
> -	{ AE_ALREADY_EXISTS,		LOG_LEVEL_HIGH,		"AEAlreadyExists",	"Already exists" },
> -	{ AE_TYPE,			LOG_LEVEL_CRITICAL,	"AETtype",		"Type" },
> -	{ AE_NULL_OBJECT,		LOG_LEVEL_CRITICAL,	"AENullObject",		"Null object" },
> -	{ AE_NULL_ENTRY,		LOG_LEVEL_CRITICAL,	"AENullEntry",		"Null entry" },
> -	{ AE_BUFFER_OVERFLOW,		LOG_LEVEL_CRITICAL,	"AEBufferOverflow",	"Buffer overflow" },
> -	{ AE_STACK_OVERFLOW,		LOG_LEVEL_CRITICAL,	"AEStackOverflow",	"Stack overflow" },
> -	{ AE_STACK_UNDERFLOW,		LOG_LEVEL_CRITICAL,	"AEStackUnderflow",	"Stack underflow" },
> -	{ AE_NOT_IMPLEMENTED,		LOG_LEVEL_HIGH,		"AENotImplemented",	"Not implemented" },
> -	{ AE_SUPPORT,			LOG_LEVEL_HIGH,		"AESupport",		"Support" },
> -	{ AE_LIMIT,			LOG_LEVEL_CRITICAL,	"AELimit",		"Limit" },
> -	{ AE_TIME,			LOG_LEVEL_HIGH,		"AETime",		"Timeout" },
> -	{ AE_ACQUIRE_DEADLOCK,		LOG_LEVEL_CRITICAL,	"AEAcqDeadlock",	"Acquire deadlock" },
> -	{ AE_RELEASE_DEADLOCK,		LOG_LEVEL_CRITICAL,	"AERelDeadlock",	"Release deadlock" },
> -	{ AE_NOT_ACQUIRED,		LOG_LEVEL_CRITICAL,	"AENotAcq",		"Not acquired" },
> -	{ AE_ALREADY_ACQUIRED,		LOG_LEVEL_CRITICAL,	"AEAlreadyAcq",		"Already acquired" },
> -	{ AE_NO_HARDWARE_RESPONSE,	LOG_LEVEL_HIGH,		"AENoHWResponse",	"No hardware response" },
> -	{ AE_NO_GLOBAL_LOCK,		LOG_LEVEL_HIGH,		"AENoGlobalLock",	"No global lock" },
> -	{ AE_ABORT_METHOD,		LOG_LEVEL_CRITICAL,	"AEAbortMethod",	"Abort method" },
> -	{ AE_SAME_HANDLER,		LOG_LEVEL_HIGH,		"AESameHandler",	"Same handler" },
> -	{ AE_NO_HANDLER,		LOG_LEVEL_CRITICAL,	"AENoHandler",		"No handler" },
> -	{ AE_OWNER_ID_LIMIT,		LOG_LEVEL_HIGH,		"AEOwnerIDLimit",	"Owner ID limit" },
> +	{ AE_ERROR,			LOG_LEVEL_HIGH,		"AEError",		"Unspecified error",
> +		"An internal unspecified ACPICA execution error has occurred."
> +	},
> +	{ AE_NO_ACPI_TABLES,		LOG_LEVEL_HIGH,		"AENoACPITables",	"No ACPI tables",
> +		"No ACPI tables could be found.  Normally this indicates the tables could not be loaded "
> +		"from firmware or a provided firmware dump file."
> +	},
> +	{ AE_NO_NAMESPACE,		LOG_LEVEL_HIGH,		"AENoNamespace",	"No namespace",
> +		"An ACPI namespace was not loaded. This happens if an ACPI root node could not be found."
> +	},
> +	{ AE_NO_MEMORY,			LOG_LEVEL_CRITICAL,	"AENoMemory",		"Out of memory",
> +		"No more memory could be allocated from the heap."
> +	},
> +	{ AE_NOT_FOUND,			LOG_LEVEL_CRITICAL,	"AENotFound",		"Not found",
> +		"An ACPI object or entity was requested but could not be found. Running fwts with the "
> +		"--acpica=slack option may work around this issue."
> +	},
> +	{ AE_NOT_EXIST,			LOG_LEVEL_CRITICAL,	"AENotExist",		"Not exist",
> +		"An ACPI object or entity was requested but does not exist.",
> +	},
> +	{ AE_ALREADY_EXISTS,		LOG_LEVEL_HIGH,		"AEAlreadyExists",	"Already exists",
> +		"An ACPI object or entity already exists.  Sometimes this occurs when code is not "
> +		"serialized and it has been created a second time by another thread. ACPICA can detect "
> +		"these errors and enable auto serialization to try to work around this error. "
> +	},
> +	{ AE_TYPE,			LOG_LEVEL_CRITICAL,	"AETtype",		"Type",
> +		"The type of an object is incorrect and does not match the expected type. ACPI will "
> +		"generally abort execution of the AML op-code that causes this error."
> +	},
> +	{ AE_NULL_OBJECT,		LOG_LEVEL_CRITICAL,	"AENullObject",		"Null object",
> +		"An ACPI object is NULL when it was expected to be non-NULL."
> +	},
> +	{ AE_NULL_ENTRY,		LOG_LEVEL_CRITICAL,	"AENullEntry",		"Null entry",
> +		"The requested ACPI object did not exist.  This can occur when a root entry is "
> +		"NULL."
> +	},
> +	{ AE_BUFFER_OVERFLOW,		LOG_LEVEL_CRITICAL,	"AEBufferOverflow",	"Buffer overflow",
> +		"An ACPI buffer that was provided was too small to contain the data to be copied "
> +		"into it. This generally indicates an AML bug."
> +	},
> +	{ AE_STACK_OVERFLOW,		LOG_LEVEL_CRITICAL,	"AEStackOverflow",	"Stack overflow",
> +		"An ACPI method call failed because the call nesting was too deep and the "
> +		"internal APCI execution stack overflowed. This generally occurs with AML that "
> +		"may be recursing too deeply."
> +	},
> +	{ AE_STACK_UNDERFLOW,		LOG_LEVEL_CRITICAL,	"AEStackUnderflow",	"Stack underflow",
> +		"An ACPI method call failed because the internal ACPI execution stack underflowed. "
> +		"This occurred while walking the object stack and popping off an object from an empty stack."
> +	},
> +	{ AE_NOT_IMPLEMENTED,		LOG_LEVEL_HIGH,		"AENotImplemented",	"Not implemented",
> +		"The ACPICA execution engine has not implemented a feature."
> +	},
> +	{ AE_SUPPORT,			LOG_LEVEL_HIGH,		"AESupport",		"Support",
> +		"Normally this occurs when AML attempts to perform an action that is not supported, "
> +		"such as converting objects in an unsupported way or attempting to access memory using "
> +		"an unsupported address space type."
> +	},
> +	{ AE_LIMIT,			LOG_LEVEL_CRITICAL,	"AELimit",		"Limit",
> +		"A predefined limit was reached, for example, attempting to access an I/O port above the "
> +		"allowed 64K limit or a semaphore handle is out of range."
> +	},
> +	{ AE_TIME,			LOG_LEVEL_HIGH,		"AETime",		"Timeout",
> +		"A timeout has been reached, for example a semaphore has timed out."
> +	},
> +	{ AE_ACQUIRE_DEADLOCK,		LOG_LEVEL_CRITICAL,	"AEAcqDeadlock",	"Acquire deadlock",
> +		"A mutex acquire was aborted because a potential deadlock was detected."
> +	},
> +	{ AE_RELEASE_DEADLOCK,		LOG_LEVEL_CRITICAL,	"AERelDeadlock",	"Release deadlock",
> +		"A mutex release was aborted because a potential deadlock was detected."
> +	},
> +	{ AE_NOT_ACQUIRED,		LOG_LEVEL_CRITICAL,	"AENotAcq",		"Not acquired",
> +		"An attempt to release a mutex or an ACPI global lock failed because it "
> +		"had not previously acquired. This normally indicates an AML programming bug."
> +	},
> +	{ AE_ALREADY_ACQUIRED,		LOG_LEVEL_CRITICAL,	"AEAlreadyAcq",		"Already acquired",
> +		"An attempt to re-acquire mutex or an ACPI global lock failed because it "
> +		"had not previously acquired. This normally indicates an AML programming bug."
> +	},
> +	{ AE_NO_HARDWARE_RESPONSE,	LOG_LEVEL_HIGH,		"AENoHWResponse",	"No hardware response",
> +		"ACPI gave up waiting for hardware to respond. For example, a SMI_CMD failed or "
> +		"the platform does not have an ACPI global lock defined or an ACPI event could "
> +		"not be enabled."
> +	},
> +	{ AE_NO_GLOBAL_LOCK,		LOG_LEVEL_HIGH,		"AENoGlobalLock",	"No global lock",
> +		"The platform does not define an ACPI global lock in the FACS."
> +	},
> +	{ AE_ABORT_METHOD,		LOG_LEVEL_CRITICAL,	"AEAbortMethod",	"Abort method",
> +		"Execution of an ACPI method was aborted because the internal ACPICA AcpiGbl_AbortMethod "
> +		"flag was set to true.  This should not occur."
> +	},
> +	{ AE_SAME_HANDLER,		LOG_LEVEL_HIGH,		"AESameHandler",	"Same handler",
> +		"An attempt was made to install the same handler that is already installed."
> +	},
> +	{ AE_NO_HANDLER,		LOG_LEVEL_CRITICAL,	"AENoHandler",		"No handler",
> +		"A handler for a General Purpose Event operation was not installed."
> +	},
> +	{ AE_OWNER_ID_LIMIT,		LOG_LEVEL_HIGH,		"AEOwnerIDLimit",	"Owner ID limit",
> +		"A maximum of 255 OwnerIds have been used. There are no more Owner IDs available for "
> +		"ACPI tables or control methods."
> +	},
>
> -	{ AE_BAD_PARAMETER,		LOG_LEVEL_HIGH,		"AEBadParam",		"Args: Bad paramater" },
> -	{ AE_BAD_CHARACTER,		LOG_LEVEL_HIGH,		"AEBadChar",		"Args: Bad character" },
> -	{ AE_BAD_PATHNAME,		LOG_LEVEL_HIGH,		"AEBadPathname",	"Args: Bad pathname" },
> -	{ AE_BAD_DATA,			LOG_LEVEL_HIGH,		"AEBadData",		"Args: Bad data" },
> -	{ AE_BAD_HEX_CONSTANT,		LOG_LEVEL_HIGH,		"AEBadHexConst",	"Args: Bad hex constant" },
> -	{ AE_BAD_OCTAL_CONSTANT,	LOG_LEVEL_HIGH,		"AEBadOctConst",	"Args: Bad octal constant" },
> -	{ AE_BAD_DECIMAL_CONSTANT,	LOG_LEVEL_HIGH,		"AEBadDecConst",	"Args: Bad decimal constant" },
> -	{ AE_MISSING_ARGUMENTS,		LOG_LEVEL_CRITICAL,	"AEMissingArgs",	"Args: Missing arguments" },
> -	{ AE_BAD_ADDRESS,		LOG_LEVEL_CRITICAL,	"AEBadAddr",		"Args: Bad address" },
> +	{ AE_BAD_PARAMETER,		LOG_LEVEL_HIGH,		"AEBadParam",		"Args: Bad paramater",
> +		"A parameter passed is out of range or invalid."
> +	},
> +	{ AE_BAD_CHARACTER,		LOG_LEVEL_HIGH,		"AEBadChar",		"Args: Bad character",
> +		"An invalid character was found in an ACPI name."
> +	},
> +	{ AE_BAD_PATHNAME,		LOG_LEVEL_HIGH,		"AEBadPathname",	"Args: Bad pathname",
> +		"An internal AML namestring could not be built because of an invalid pathname."
> +	},
> +	{ AE_BAD_DATA,			LOG_LEVEL_HIGH,		"AEBadData",		"Args: Bad data",
> +		"A buffer or package contained some incorrect data."
> +	},
> +	{ AE_BAD_HEX_CONSTANT,		LOG_LEVEL_HIGH,		"AEBadHexConst",	"Args: Bad hex constant",
> +		"An invalid character was found in a hexadecimal constant."
> +	},
> +	{ AE_BAD_OCTAL_CONSTANT,	LOG_LEVEL_HIGH,		"AEBadOctConst",	"Args: Bad octal constant",
> +		"An invalid character was found in an octal constant."
> +	},
> +	{ AE_BAD_DECIMAL_CONSTANT,	LOG_LEVEL_HIGH,		"AEBadDecConst",	"Args: Bad decimal constant",
> +		"An invalid character was found in a decimal constant."
> +	},
> +	{ AE_MISSING_ARGUMENTS,		LOG_LEVEL_CRITICAL,	"AEMissingArgs",	"Args: Missing arguments",
> +		"Too few arguments were passed into an ACPI control method."
> +	},
> +	{ AE_BAD_ADDRESS,		LOG_LEVEL_CRITICAL,	"AEBadAddr",		"Args: Bad address",
> +		"An illegal null I/O address was referenced by the AML."
> +	},
>
> -	{ AE_AML_BAD_OPCODE, 		LOG_LEVEL_CRITICAL,	"AEAMLBadOpCode",	"Bad AML opcode" },
> -	{ AE_AML_NO_OPERAND, 		LOG_LEVEL_HIGH,		"AEAMLNoOperand",	"Missing operand" },
> -	{ AE_AML_OPERAND_TYPE, 		LOG_LEVEL_HIGH,		"AEAMLOperandType",	"Incorrect operand type" },
> -	{ AE_AML_OPERAND_VALUE, 	LOG_LEVEL_HIGH,		"AEAMLOperandValue",	"Incorrect operand value" },
> -	{ AE_AML_UNINITIALIZED_LOCAL, 	LOG_LEVEL_HIGH,		"AEAMLUninitLocal",	"Uninitialized local variable" },
> -	{ AE_AML_UNINITIALIZED_ARG, 	LOG_LEVEL_HIGH,		"AEAMLUninitArg",	"Uninitialized argument" },
> -	{ AE_AML_UNINITIALIZED_ELEMENT, LOG_LEVEL_HIGH,		"AEAMLUninitElement",	"Uninitialized element" },
> -	{ AE_AML_NUMERIC_OVERFLOW, 	LOG_LEVEL_HIGH,		"AEAMLNumericOverflow",	"Numeric overflow" },
> -	{ AE_AML_REGION_LIMIT, 		LOG_LEVEL_CRITICAL,	"AEAMLRegionLimit",	"Region limit" },
> -	{ AE_AML_BUFFER_LIMIT, 		LOG_LEVEL_CRITICAL,	"AEAMLBufferLimit",	"Buffer limit" },
> -	{ AE_AML_PACKAGE_LIMIT, 	LOG_LEVEL_CRITICAL,	"AEAMLPackgeLimit",	"Package limit" },
> -	{ AE_AML_DIVIDE_BY_ZERO, 	LOG_LEVEL_CRITICAL,	"AEAMLDivideByZero",	"Division by zero" },
> -	{ AE_AML_NAME_NOT_FOUND, 	LOG_LEVEL_HIGH,		"AEAMLNameNotFound",	"Name not found" },
> -	{ AE_AML_INTERNAL, 		LOG_LEVEL_HIGH,		"AEAMLInternal",	"Internal ACPICA execution engine error" },
> -	{ AE_AML_INVALID_SPACE_ID, 	LOG_LEVEL_HIGH,		"AEAMLInvalidSpaceID",	"Invalid space ID error" },
> -	{ AE_AML_STRING_LIMIT, 		LOG_LEVEL_HIGH,		"AEAMLStringLimit",	"String limit" },
> -	{ AE_AML_NO_RETURN_VALUE, 	LOG_LEVEL_HIGH,		"AEAMLNoReturnValue",	"No return value" },
> -	{ AE_AML_METHOD_LIMIT, 		LOG_LEVEL_HIGH,		"AEAMLMethodLimit",	"Method limit" },
> -	{ AE_AML_NOT_OWNER, 		LOG_LEVEL_HIGH,		"AEAMLNotOwner",	"Not owner" },
> -	{ AE_AML_MUTEX_ORDER, 		LOG_LEVEL_HIGH,		"AEAMLMutexOrder",	"Mutex order" },
> -	{ AE_AML_MUTEX_NOT_ACQUIRED, 	LOG_LEVEL_HIGH,		"AEAMLMutexNotAcq",	"Mutux not acquired" },
> -	{ AE_AML_INVALID_RESOURCE_TYPE, LOG_LEVEL_HIGH,		"AEAMLInvResourceType", "Invalid resource type" },
> -	{ AE_AML_INVALID_INDEX, 	LOG_LEVEL_HIGH,		"AEAMLInvIndex",	"Invalid index" },
> -	{ AE_AML_REGISTER_LIMIT, 	LOG_LEVEL_HIGH,		"AEAMLRegisterLimit",	"Register limit" },
> -	{ AE_AML_NO_WHILE, 		LOG_LEVEL_CRITICAL,	"AEAMLNoWhile",		"No while" },
> -	{ AE_AML_ALIGNMENT, 		LOG_LEVEL_CRITICAL,	"AEAMLAlignment",	"Misaligmnent" },
> -	{ AE_AML_NO_RESOURCE_END_TAG, 	LOG_LEVEL_HIGH,		"AEAMLNoResEndTag",	"No resource end tag"},
> -	{ AE_AML_BAD_RESOURCE_VALUE, 	LOG_LEVEL_HIGH,		"AEAMLBadResValue",	"Bad resource value" },
> -	{ AE_AML_CIRCULAR_REFERENCE,	LOG_LEVEL_CRITICAL,	"AEAMLCircularRef",	"Circular reference" },
> -	{ AE_AML_BAD_RESOURCE_LENGTH,	LOG_LEVEL_HIGH,		"AEAMLBadResLength",	"Bad resource length" },
> -	{ AE_AML_ILLEGAL_ADDRESS, 	LOG_LEVEL_CRITICAL,	"AEAMLIllegalAddr",	"Illegal address" },
> -	/* { AE_AML_INFINITE_LOOP, 	LOG_LEVEL_HIGH,		"AEAMLInfiniteLoop",	"Infinite loop" }, */
> -	{ 0,				0,			NULL,			NULL }
> +	{ AE_AML_BAD_OPCODE, 		LOG_LEVEL_CRITICAL,	"AEAMLBadOpCode",	"Bad AML opcode",
> +		"An invalid AML opcode encountered during AML execution."
> +	},
> +	{ AE_AML_NO_OPERAND, 		LOG_LEVEL_HIGH,		"AEAMLNoOperand",	"Missing operand",
> +		"An AML opcode was missing a required operand."
> +	},
> +	{ AE_AML_OPERAND_TYPE, 		LOG_LEVEL_HIGH,		"AEAMLOperandType",	"Incorrect operand type",
> +		"An AML opcode had an operand of an incorrect type."
> +	},
> +	{ AE_AML_OPERAND_VALUE, 	LOG_LEVEL_HIGH,		"AEAMLOperandValue",	"Incorrect operand value",
> +		"An AML opcode has an operand of an inappropriate or invalid value.",
> +	},
> +	{ AE_AML_UNINITIALIZED_LOCAL, 	LOG_LEVEL_HIGH,		"AEAMLUninitLocal",	"Uninitialized local variable",
> +		"A method attempted to use a local variable that was not initialized."
> +	},
> +	{ AE_AML_UNINITIALIZED_ARG, 	LOG_LEVEL_HIGH,		"AEAMLUninitArg",	"Uninitialized argument",
> +		"A method attempted to use an uninitialized argument."
> +	},
> +	{ AE_AML_UNINITIALIZED_ELEMENT, LOG_LEVEL_HIGH,		"AEAMLUninitElement",	"Uninitialized element",
> +		"A method attempted to use an empty element in an ACPI package."
> +	},
> +	{ AE_AML_NUMERIC_OVERFLOW, 	LOG_LEVEL_HIGH,		"AEAMLNumericOverflow",	"Numeric overflow",
> +		"A numeric overflow occurred, for example when coverting a BCD value."
> +	},
> +	{ AE_AML_REGION_LIMIT, 		LOG_LEVEL_CRITICAL,	"AEAMLRegionLimit",	"Region limit",
> +		"An attempt to access beyond the end of an ACPI Operation Region occurred."
> +	},
> +	{ AE_AML_BUFFER_LIMIT, 		LOG_LEVEL_CRITICAL,	"AEAMLBufferLimit",	"Buffer limit",
> +		"An attempt to access beyond the end of an ACPI buffer occurred."
> +	},
> +	{ AE_AML_PACKAGE_LIMIT, 	LOG_LEVEL_CRITICAL,	"AEAMLPackgeLimit",	"Package limit",
> +		"An attempt to access beyond the endof an ACPI package occurred."
> +	},
> +	{ AE_AML_DIVIDE_BY_ZERO, 	LOG_LEVEL_CRITICAL,	"AEAMLDivideByZero",	"Division by zero",
> +		"A division by zero error occurred while excuting the AML Divide op-code"
> +	},
> +	{ AE_AML_NAME_NOT_FOUND, 	LOG_LEVEL_HIGH,		"AEAMLNameNotFound",	"Name not found",
> +		"An ACPI named reference could not be resolved."
> +	},
> +	{ AE_AML_INTERNAL, 		LOG_LEVEL_HIGH,		"AEAMLInternal",	"Internal ACPICA execution engine error",
> +		"An internal error occurred in the ACPICA execution interpreter.  A bug report should "
> +		"be filed against fwts so that this can be resolved."
> +	},
> +	{ AE_AML_INVALID_SPACE_ID, 	LOG_LEVEL_HIGH,		"AEAMLInvalidSpaceID",	"Invalid space ID error",
> +		"An invalid ACPI Operation Region Space ID has been encountered."
> +	},
> +	{ AE_AML_STRING_LIMIT, 		LOG_LEVEL_HIGH,		"AEAMLStringLimit",	"String limit",
> +		"A string more than 200 characters long has been used."
> +	},
> +	{ AE_AML_NO_RETURN_VALUE, 	LOG_LEVEL_HIGH,		"AEAMLNoReturnValue",	"No return value",
> +		"A method did not return the required value that was expected."
> +	},
> +	{ AE_AML_METHOD_LIMIT, 		LOG_LEVEL_HIGH,		"AEAMLMethodLimit",	"Method limit",
> +		"A control method reached a limit of 255 concurrent thread executions and hit the ACPICA "
> +		"re-entrancy limit."
> +	},
> +	{ AE_AML_NOT_OWNER, 		LOG_LEVEL_HIGH,		"AEAMLNotOwner",	"Not owner",
> +		"A thread attempted to release a mutex that it did not own.",
> +	},
> +	{ AE_AML_MUTEX_ORDER, 		LOG_LEVEL_HIGH,		"AEAMLMutexOrder",	"Mutex order",
> +		"Deadlock prevention has detected that the current mutex sync level is too large."
> +	},
> +	{ AE_AML_MUTEX_NOT_ACQUIRED, 	LOG_LEVEL_HIGH,		"AEAMLMutexNotAcq",	"Mutux not acquired",
> +		"An attempt was made to release a mutex that had not been acquired."
> +	},
> +	{ AE_AML_INVALID_RESOURCE_TYPE, LOG_LEVEL_HIGH,		"AEAMLInvResourceType", "Invalid resource type",
> +		"An ACPI resource list contained an invalid resource type."
> +	},
> +	{ AE_AML_INVALID_INDEX, 	LOG_LEVEL_HIGH,		"AEAMLInvIndex",	"Invalid index",
> +		"An attempt to get a node with an index that was too large occurred, for example an ACPI "
> +		"ArgN or LocalN were N was out of range."
> +	},
> +	{ AE_AML_REGISTER_LIMIT, 	LOG_LEVEL_HIGH,		"AEAMLRegisterLimit",	"Register limit",
> +		"An attempt to use a bank value that is beyong the capacity of a register occurred."
> +	},
> +	{ AE_AML_NO_WHILE, 		LOG_LEVEL_CRITICAL,	"AEAMLNoWhile",		"No while",
> +		"A Break or Continue op-code was reached without a matching While op-code."
> +	},
> +	{ AE_AML_ALIGNMENT, 		LOG_LEVEL_CRITICAL,	"AEAMLAlignment",	"Misaligmnent",
> +		"A non-aligned memory transfer was attempted on a machine that does not "
> +		"support it."
> +	},
> +	{ AE_AML_NO_RESOURCE_END_TAG, 	LOG_LEVEL_HIGH,		"AEAMLNoResEndTag",	"No resource end tag",
> +		"An ACPI resource list had a missing End Tag."
> +	},
> +	{ AE_AML_BAD_RESOURCE_VALUE, 	LOG_LEVEL_HIGH,		"AEAMLBadResValue",	"Bad resource value",
> +		"An ACPI resource element had an invalid value."
> +	},
> +	{ AE_AML_CIRCULAR_REFERENCE,	LOG_LEVEL_CRITICAL,	"AEAMLCircularRef",	"Circular reference",
> +		"Two references refer to each other, which is not allowed."
> +	},
> +	{ AE_AML_BAD_RESOURCE_LENGTH,	LOG_LEVEL_HIGH,		"AEAMLBadResLength",	"Bad resource length",
> +		"The length of an ACPI Resource Descriptor was incorrect."
> +	},
> +	{ AE_AML_ILLEGAL_ADDRESS, 	LOG_LEVEL_CRITICAL,	"AEAMLIllegalAddr",	"Illegal address",
> +		"An memory, PCI configuration or I/O address was encountered with an illegal address."
> +	},
> +	/* { AE_AML_INFINITE_LOOP, 	LOG_LEVEL_HIGH,		"AEAMLInfiniteLoop",	"Infinite loop", NULL }, */
> +	{ 0,				0,			NULL,			NULL , 		NULL}
>   };
>
>   static fwts_list *fwts_object_names;
> @@ -250,6 +408,8 @@ void fwts_acpi_object_evaluate_report_error(
>   			fwts_failed(fw, errors[i].level, errors[i].error_type,
>   				"Detected error '%s' when evaluating '%s'.",
>   				errors[i].error_text, name);
> +			if (errors[i].advice != NULL)
> +				fwts_advice(fw, "%s", errors[i].advice);
>   			return;
>   		}
>   	}
>

Acked-by: Ivan Hu <ivan.hu at canonical.com>



More information about the fwts-devel mailing list