Commit d46b6537 authored by Erik Schmauss's avatar Erik Schmauss Committed by Rafael J. Wysocki
Browse files

ACPICA: AML Parser: ignore all exceptions resulting from incorrect AML during table load



Macros to classify different AML exception codes have been added in
order to ignore the exceptions,

Signed-off-by: default avatarErik Schmauss <erik.schmauss@intel.com>
[ rjw: Fix damaged white space ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 2c20443e
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -709,20 +709,20 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
			} else
			    if ((walk_state->
				 parse_flags & ACPI_PARSE_MODULE_LEVEL)
				&& status != AE_CTRL_TRANSFER
				&& ACPI_FAILURE(status)) {
				&& (ACPI_AML_EXCEPTION(status)
				    || status == AE_ALREADY_EXISTS
				    || status == AE_NOT_FOUND)) {
				/*
				 * ACPI_PARSE_MODULE_LEVEL flag means that we are currently
				 * loading a table by executing it as a control method.
				 * However, if we encounter an error while loading the table,
				 * we need to keep trying to load the table rather than
				 * aborting the table load (setting the status to AE_OK
				 * continues the table load). If we get a failure at this
				 * point, it means that the dispatcher got an error while
				 * processing Op (most likely an AML operand error) or a
				 * control method was called from module level and the
				 * dispatcher returned AE_CTRL_TRANSFER. In the latter case,
				 * leave the status alone, there's nothing wrong with it.
				 * ACPI_PARSE_MODULE_LEVEL flag means that we
				 * are currently loading a table by executing
				 * it as a control method. However, if we
				 * encounter an error while loading the table,
				 * we need to keep trying to load the table
				 * rather than aborting the table load (setting
				 * the status to AE_OK continues the table
				 * load). If we get a failure at this point, it
				 * means that the dispatcher got an error while
				 * trying to execute the Op.
				 */
				status = AE_OK;
			}
+6 −0
Original line number Diff line number Diff line
@@ -59,6 +59,12 @@ struct acpi_exception_info {

#define AE_OK                           (acpi_status) 0x0000

#define ACPI_ENV_EXCEPTION(status)      (status & AE_CODE_ENVIRONMENTAL)
#define ACPI_AML_EXCEPTION(status)      (status & AE_CODE_AML)
#define ACPI_PROG_EXCEPTION(status)     (status & AE_CODE_PROGRAMMER)
#define ACPI_TABLE_EXCEPTION(status)    (status & AE_CODE_ACPI_TABLES)
#define ACPI_CNTL_EXCEPTION(status)     (status & AE_CODE_CONTROL)

/*
 * Environmental exceptions
 */