ACPICA: Add new ACPI 6.4 semantics for LoadTable() operator
authorBob Moore <robert.moore@intel.com>
Mon, 11 Apr 2022 18:52:26 +0000 (20:52 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 13 Apr 2022 18:24:57 +0000 (20:24 +0200)
ACPICA commit b32dde35e26a63a85d78d4dc0a7260b61e626ac1

DDB_HANDLE is gone, now LoadTable() returns a pass/fail integer.

Link: https://github.com/acpica/acpica/commit/b32dde35
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/exconfig.c

index d92e9e8e42bae74ad8d09b7174ed6cc7b6129bfd..0c12c951948bb2ccdef09ee18f17aefcb88fa4bb 100644 (file)
@@ -87,11 +87,21 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
        struct acpi_namespace_node *parent_node;
        struct acpi_namespace_node *start_node;
        struct acpi_namespace_node *parameter_node = NULL;
+       union acpi_operand_object *return_obj;
        union acpi_operand_object *ddb_handle;
        u32 table_index;
 
        ACPI_FUNCTION_TRACE(ex_load_table_op);
 
+       /* Create the return object */
+
+       return_obj = acpi_ut_create_integer_object((u64)0);
+       if (!return_obj) {
+               return_ACPI_STATUS(AE_NO_MEMORY);
+       }
+
+       *return_desc = return_obj;
+
        /* Find the ACPI table in the RSDT/XSDT */
 
        acpi_ex_exit_interpreter();
@@ -106,12 +116,6 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
 
                /* Table not found, return an Integer=0 and AE_OK */
 
-               ddb_handle = acpi_ut_create_integer_object((u64) 0);
-               if (!ddb_handle) {
-                       return_ACPI_STATUS(AE_NO_MEMORY);
-               }
-
-               *return_desc = ddb_handle;
                return_ACPI_STATUS(AE_OK);
        }
 
@@ -198,7 +202,13 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
                }
        }
 
-       *return_desc = ddb_handle;
+       /* Remove the reference to ddb_handle created by acpi_ex_add_table above */
+
+       acpi_ut_remove_reference(ddb_handle);
+
+       /* Return -1 (non-zero) indicates success */
+
+       return_obj->integer.value = 0xFFFFFFFFFFFFFFFF;
        return_ACPI_STATUS(status);
 }