ACPI fix for 4.17-rc6
Fix an ACPICA regression introduced in this cycle and related to the handling of package objects loaded by the Load and loadTable AML operators that are not initialized properly after recent changes (Bob Moore). -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJa/ny1AAoJEILEb/54YlRxNN4P+wc8EikqQqKSUxkml0RVtI3D br8IgrdnUYW2jiz8C1ibo6trUL9Ab8hNMh7TbDUnbl7fNtqbcTPtcgXmC5cDo+ZI CTuD1mQ8/oakvMs1vZ/5F/h7ZlbJHn84LCjrW7+u0V66WoRJ9nUh3x9ahEyQ+Bmm od/d+YrbiVh2/MfVQ5Ije4ugzvQL7JBeUkC4e8bsE7HkZK8lFJ7WCx9fHTdyn8fb LBw2hPqhTzRLVPsK97U68Zo8t2yqlHNGjk5P1SiSg0pe6IU/DjdS+fBC8sBPgRh1 A4kHRzJyajZMphBtgVQJn4tKSR/bGL39r/2hCtojC/pYhcm1ZIqu5AmCPOJtYIPb zIgSXLS8debnVfz4UeKBV5Jn38uZfWxj48pzt92EVxJ2/MVyZkDHMa/kVicC/K1l owZ1O1eDKK2KYs8Eebp8GgPHLDp6IDVFLJjmUDNCKegTKro1fzia1lh5bdiv1lWU zoMWGUCHo9ngJ+OEnwuOc/j7al7PHQ0fZznzR+Pu6s5VmY3IHf905is4cLG73ZRn ya+fF64K2YUsPPUK5X/ywRT2UxIahrlGXoVhbfwCUHm2OXS/EVtaOuGnbaJbDrnN M/gUQE0TKwtcmHadCfDBsb+DJ+kO4Yyt5Yfgl7e0cY/CUKXboNoSZp5Z4rlS814L EjIPdMpAyKlKq+/gLge1 =pVWi -----END PGP SIGNATURE----- Merge tag 'acpi-4.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull ACPI fix from Rafael Wysocki: "Fix an ACPICA regression introduced in this cycle and related to the handling of package objects loaded by the Load and loadTable AML operators that are not initialized properly after recent changes (Bob Moore)" * tag 'acpi-4.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPICA: Add deferred package support for the Load and loadTable operators
This commit is contained in:
commit
d315482168
@ -56,6 +56,10 @@ acpi_status acpi_ns_initialize_objects(void);
|
||||
|
||||
acpi_status acpi_ns_initialize_devices(u32 flags);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_init_one_package(acpi_handle obj_handle,
|
||||
u32 level, void *context, void **return_value);
|
||||
|
||||
/*
|
||||
* nsload - Namespace loading
|
||||
*/
|
||||
|
@ -174,6 +174,13 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/* Complete the initialization/resolution of package 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) */
|
||||
|
||||
if (parameter_node) {
|
||||
@ -430,6 +437,13 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/* Complete the initialization/resolution of package objects */
|
||||
|
||||
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 */
|
||||
|
||||
status = acpi_ex_store(ddb_handle, target, walk_state);
|
||||
|
@ -240,6 +240,58 @@ error_exit:
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ns_init_one_package
|
||||
*
|
||||
* PARAMETERS: obj_handle - Node
|
||||
* level - Current nesting level
|
||||
* context - Not used
|
||||
* return_value - Not used
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Callback from acpi_walk_namespace. Invoked for every package
|
||||
* within the namespace. Used during dynamic load of an SSDT.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_init_one_package(acpi_handle obj_handle,
|
||||
u32 level, void *context, void **return_value)
|
||||
{
|
||||
acpi_status status;
|
||||
union acpi_operand_object *obj_desc;
|
||||
struct acpi_namespace_node *node =
|
||||
(struct acpi_namespace_node *)obj_handle;
|
||||
|
||||
obj_desc = acpi_ns_get_attached_object(node);
|
||||
if (!obj_desc) {
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/* Exit if package is already initialized */
|
||||
|
||||
if (obj_desc->package.flags & AOPOBJ_DATA_VALID) {
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
status = acpi_ds_get_package_arguments(obj_desc);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
status =
|
||||
acpi_ut_walk_package_tree(obj_desc, NULL,
|
||||
acpi_ds_init_package_element, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
obj_desc->package.flags |= AOPOBJ_DATA_VALID;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ns_init_one_object
|
||||
@ -360,27 +412,11 @@ acpi_ns_init_one_object(acpi_handle obj_handle,
|
||||
|
||||
case ACPI_TYPE_PACKAGE:
|
||||
|
||||
/* Complete the initialization/resolution of the package object */
|
||||
|
||||
info->package_init++;
|
||||
status = acpi_ds_get_package_arguments(obj_desc);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
break;
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW((ACPI_DB_PARSE,
|
||||
"%s: Completing resolution of Package elements\n",
|
||||
ACPI_GET_FUNCTION_NAME));
|
||||
|
||||
/*
|
||||
* Resolve all named references in package objects (and all
|
||||
* sub-packages). This action has been deferred until the entire
|
||||
* namespace has been loaded, in order to support external and
|
||||
* forward references from individual package elements (05/2017).
|
||||
*/
|
||||
status = acpi_ut_walk_package_tree(obj_desc, NULL,
|
||||
acpi_ds_init_package_element,
|
||||
NULL);
|
||||
|
||||
obj_desc->package.flags |= AOPOBJ_DATA_VALID;
|
||||
status =
|
||||
acpi_ns_init_one_package(obj_handle, level, NULL, NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user