]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ACPICA: AML Parser: ignore all exceptions resulting from incorrect AML during table load
authorErik Schmauss <erik.schmauss@intel.com>
Fri, 10 Aug 2018 21:42:54 +0000 (14:42 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 14 Aug 2018 21:49:13 +0000 (23:49 +0200)
Macros to classify different AML exception codes have been added in
order to ignore the exceptions,

Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
[ rjw: Fix damaged white space ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/psloop.c
include/acpi/acexcep.h

index 44f35ab3347d1a57aded2402e6e386c4d792d759..42f694f4481e88c518f8cf25da945916f7d95238 100644 (file)
@@ -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;
                        }
index 226e5aeba6c21b03465afd2e9177b50994ce425d..856c56ef01431e0467ac63fadeeee0907202c2f0 100644 (file)
@@ -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
  */