OSDN Git Service

Revert "ACPICA: Update table load object initialization"
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 10 Jul 2019 09:52:50 +0000 (11:52 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 10 Jul 2019 09:52:50 +0000 (11:52 +0200)
Revert commit c522ad0637ca ("ACPICA: Update table load object
initialization") as it causes systems to hang on attempts to load
OEM ACPI tables.

Reported-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/exconfig.c
drivers/acpi/acpica/tbxfload.c

index 58c04d7..587aeee 100644 (file)
@@ -174,9 +174,12 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
                return_ACPI_STATUS(status);
        }
 
-       /* Complete the initialization/resolution of new objects */
+       /* Complete the initialization/resolution of package objects */
 
-       acpi_ns_initialize_objects();
+       status = acpi_ns_walk_namespace(ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
+                                       ACPI_UINT32_MAX, 0,
+                                       acpi_ns_init_one_package, NULL, NULL,
+                                       NULL);
 
        /* Parameter Data (optional) */
 
@@ -434,11 +437,12 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
                return_ACPI_STATUS(status);
        }
 
-       /* Complete the initialization/resolution of new objects */
+       /* Complete the initialization/resolution of package objects */
 
-       acpi_ex_exit_interpreter();
-       acpi_ns_initialize_objects();
-       acpi_ex_enter_interpreter();
+       status = acpi_ns_walk_namespace(ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
+                                       ACPI_UINT32_MAX, 0,
+                                       acpi_ns_init_one_package, NULL, NULL,
+                                       NULL);
 
        /* Store the ddb_handle into the Target operand */
 
index 86f1693..ef8f8a9 100644 (file)
@@ -297,11 +297,15 @@ acpi_status acpi_load_table(struct acpi_table_header *table)
        status = acpi_tb_install_and_load_table(ACPI_PTR_TO_PHYSADDR(table),
                                                ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL,
                                                FALSE, &table_index);
-       if (ACPI_SUCCESS(status)) {
 
-               /* Complete the initialization/resolution of new objects */
+       if (ACPI_SUCCESS(status)) {
+               /* Complete the initialization/resolution of package objects */
 
-               acpi_ns_initialize_objects();
+               status = acpi_ns_walk_namespace(ACPI_TYPE_PACKAGE,
+                                               ACPI_ROOT_OBJECT,
+                                               ACPI_UINT32_MAX, 0,
+                                               acpi_ns_init_one_package,
+                                               NULL, NULL, NULL);
        }
 
        return_ACPI_STATUS(status);