ACPICA: Update for object initialization sequence
authorBob Moore <robert.moore@intel.com>
Wed, 3 Jul 2019 20:15:38 +0000 (13:15 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 3 Jul 2019 22:59:43 +0000 (00:59 +0200)
ACPICA commit 106c72a97f5ca972f29956e5e9a0429b8c4a2723

 1) Do not allow the objects to be initialized twice
 2) Only package objects require a deferred initialization
 3) Cleanup initialization output

Link: https://github.com/acpica/acpica/commit/106c72a9
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/dsinit.c
drivers/acpi/acpica/nsinit.c
drivers/acpi/acpica/utxfinit.c

index 4ebd237..a1ffed2 100644 (file)
@@ -202,7 +202,7 @@ acpi_ds_initialize_objects(u32 table_index,
 
        if (ACPI_COMPARE_NAMESEG(table->signature, ACPI_SIG_DSDT)) {
                ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
-                                     "\nInitializing Namespace objects:\n"));
+                                     "\nACPI table initialization:\n"));
        }
 
        /* Summary of objects initialized */
index 53e5d00..61e9dfc 100644 (file)
@@ -55,14 +55,19 @@ acpi_status acpi_ns_initialize_objects(void)
        ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
                          "**** Starting initialization of namespace objects ****\n"));
        ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
-                             "Completing Region/Field/Buffer/Package initialization:\n"));
+                             "Final data object initialization: "));
 
-       /* Set all init info to zero */
+       /* Clear the info block */
 
        memset(&info, 0, sizeof(struct acpi_init_walk_info));
 
        /* Walk entire namespace from the supplied root */
 
+       /*
+        * TBD: will become ACPI_TYPE_PACKAGE as this type object
+        * is now the only one that supports deferred initialization
+        * (forward references).
+        */
        status = acpi_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
                                     ACPI_UINT32_MAX, acpi_ns_init_one_object,
                                     NULL, &info, NULL);
@@ -71,13 +76,8 @@ acpi_status acpi_ns_initialize_objects(void)
        }
 
        ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
-                             "    Initialized %u/%u Regions %u/%u Fields %u/%u "
-                             "Buffers %u/%u Packages (%u nodes)\n",
-                             info.op_region_init, info.op_region_count,
-                             info.field_init, info.field_count,
-                             info.buffer_init, info.buffer_count,
-                             info.package_init, info.package_count,
-                             info.object_count));
+                             "Namespace contains %u (0x%X) objects\n",
+                             info.object_count, info.object_count));
 
        ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
                          "%u Control Methods found\n%u Op Regions found\n",
@@ -382,34 +382,18 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
        acpi_ex_enter_interpreter();
 
        /*
-        * Each of these types can contain executable AML code within the
-        * declaration.
+        * Only initialization of Package objects can be deferred, in order
+        * to support forward references.
         */
        switch (type) {
-       case ACPI_TYPE_REGION:
-
-               info->op_region_init++;
-               status = acpi_ds_get_region_arguments(obj_desc);
-               break;
-
-       case ACPI_TYPE_BUFFER_FIELD:
-
-               info->field_init++;
-               status = acpi_ds_get_buffer_field_arguments(obj_desc);
-               break;
-
        case ACPI_TYPE_LOCAL_BANK_FIELD:
 
+               /* TBD: bank_fields do not require deferred init, remove this code */
+
                info->field_init++;
                status = acpi_ds_get_bank_field_arguments(obj_desc);
                break;
 
-       case ACPI_TYPE_BUFFER:
-
-               info->buffer_init++;
-               status = acpi_ds_get_buffer_arguments(obj_desc);
-               break;
-
        case ACPI_TYPE_PACKAGE:
 
                /* Complete the initialization/resolution of the package object */
@@ -421,8 +405,13 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
 
        default:
 
-               /* No other types can get here */
+               /* No other types should get here */
 
+               status = AE_TYPE;
+               ACPI_EXCEPTION((AE_INFO, status,
+                               "Opcode is not deferred [%4.4s] (%s)",
+                               acpi_ut_get_node_name(node),
+                               acpi_ut_get_type_name(type)));
                break;
        }
 
index 077b1af..cf769e9 100644 (file)
@@ -211,11 +211,17 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_objects(u32 flags)
 
        ACPI_FUNCTION_TRACE(acpi_initialize_objects);
 
+#ifdef ACPI_OBSOLETE_BEHAVIOR
+       /*
+        * 05/2019: Removed, initialization now happens at both object
+        * creation and table load time
+        */
+
        /*
         * Initialize the objects that remain uninitialized. This
         * runs the executable AML that may be part of the
-        * declaration of these objects:
-        * operation_regions, buffer_fields, Buffers, and Packages.
+        * declaration of these objects: operation_regions, buffer_fields,
+        * bank_fields, Buffers, and Packages.
         */
        if (!(flags & ACPI_NO_OBJECT_INIT)) {
                status = acpi_ns_initialize_objects();
@@ -223,6 +229,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_objects(u32 flags)
                        return_ACPI_STATUS(status);
                }
        }
+#endif
 
        /*
         * Initialize all device/region objects in the namespace. This runs