Hi, > From: gregkh@xxxxxxxxxxxxxxxxxxx [mailto:gregkh@xxxxxxxxxxxxxxxxxxx] > Subject: FAILED: patch "[PATCH] ACPICA / Interpreter: Fix a regression > triggered because of ACPICA: Events: Enhance acpi_ev_execute_reg_method() > to" failed to apply to 4.5-stable tree > > > The patch below does not apply to the 4.5-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. [Lv Zheng] I can help to port it to 4.5-stable. I'll send it to the stable mailing list later when this is done. Thanks -Lv > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > From 5508df89756f8378024828e185724a9bd2348985 Mon Sep 17 00:00:00 > 2001 > From: Lv Zheng <lv.zheng@xxxxxxxxx> > Date: Thu, 10 Mar 2016 10:54:29 +0800 > Subject: [PATCH] ACPICA / Interpreter: Fix a regression triggered because of > wrong Linux ECDT support > > It is reported that the following commit triggers regressions: > Linux commit: efaed9be998b5ae0afb7458e057e5f4402b43fa0 > ACPICA commit: 31178590dde82368fdb0f6b0e466b6c0add96c57 > Subject: ACPICA: Events: Enhance acpi_ev_execute_reg_method() to > ensure no _REG evaluations can happen during OS early boot > stages > > This is because that the ECDT support is not corrected in Linux, and Linux > requires to execute _REG for ECDT (though this sounds so wrong), we need to > ensure acpi_gbl_namespace_initialized is set before ECDT probing in order > for _REG to be executed. Since we have to move > "acpi_gbl_namespace_initialized = TRUE" to the initialization step > happening before ECDT probing, acpi_load_tables() is the best candidate for > now. Thus this patch fixes the regression by doing so. > > But if the ECDT support is fixed, Linux will not execute _REG for ECDT, and > ECDT probing will happen before acpi_load_tables(). At that time, we still > want to ensure acpi_gbl_namespace_initialized is set after executing > acpi_ns_initialize_objects() (under the condition of > acpi_gbl_group_module_level_code = FALSE), this patch also moves > acpi_ns_initialize_objects() to acpi_load_tables() accordingly. > > Since acpi_ns_initialize_objects() doesn't seem to be skippable, this > patch also removes ACPI_NO_OBJECT_INIT for the one invoked in > acpi_load_tables(). And since the default region handlers should always be > installed before loading the tables, this patch also removes useless > acpi_gbl_group_module_level_code check accordingly. Reported by Chris > Bainbridge, Fixed by Lv Zheng. > > Fixes: efaed9be998b (ACPICA: Events: Enhance acpi_ev_execute_reg_method() > to ensure no _REG evaluations can happen during OS early boot stages) > Reported-and-tested-by: Chris Bainbridge <chris.bainbridge@xxxxxxxxx> > Signed-off-by: Lv Zheng <lv.zheng@xxxxxxxxx> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > diff --git a/drivers/acpi/acpica/nsinit.c b/drivers/acpi/acpica/nsinit.c > index f029a3da67eb..d4aa8b696ee9 100644 > --- a/drivers/acpi/acpica/nsinit.c > +++ b/drivers/acpi/acpica/nsinit.c > @@ -84,6 +84,8 @@ acpi_status acpi_ns_initialize_objects(void) > > ACPI_FUNCTION_TRACE(ns_initialize_objects); > > + ACPI_DEBUG_PRINT((ACPI_DB_EXEC, > + "[Init] Completing Initialization of ACPI Objects\n")); > ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, > "**** Starting initialization of namespace objects > ****\n")); > ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, > diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c > index 9496b84476a4..3151968c10d1 100644 > --- a/drivers/acpi/acpica/tbxfload.c > +++ b/drivers/acpi/acpica/tbxfload.c > @@ -81,13 +81,11 @@ acpi_status __init acpi_load_tables(void) > * between acpi_initialize_subsystem() and acpi_load_tables() to use > * their customized default region handlers. > */ > - if (acpi_gbl_group_module_level_code) { > - status = acpi_ev_install_region_handlers(); > - if (ACPI_FAILURE(status) && status != AE_ALREADY_EXISTS) { > - ACPI_EXCEPTION((AE_INFO, status, > - "During Region initialization")); > - return_ACPI_STATUS(status); > - } > + status = acpi_ev_install_region_handlers(); > + if (ACPI_FAILURE(status) && status != AE_ALREADY_EXISTS) { > + ACPI_EXCEPTION((AE_INFO, status, > + "During Region initialization")); > + return_ACPI_STATUS(status); > } > > /* Load the namespace from the tables */ > @@ -105,6 +103,20 @@ acpi_status __init acpi_load_tables(void) > "While loading namespace from ACPI tables")); > } > > + if (!acpi_gbl_group_module_level_code) { > + /* > + * 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. > + */ > + status = acpi_ns_initialize_objects(); > + if (ACPI_FAILURE(status)) { > + return_ACPI_STATUS(status); > + } > + } > + > + acpi_gbl_namespace_initialized = TRUE; > return_ACPI_STATUS(status); > } > > diff --git a/drivers/acpi/acpica/utxfinit.c b/drivers/acpi/acpica/utxfinit.c > index d70649d3ac60..75b5f27da267 100644 > --- a/drivers/acpi/acpica/utxfinit.c > +++ b/drivers/acpi/acpica/utxfinit.c > @@ -154,23 +154,6 @@ acpi_status __init acpi_enable_subsystem(u32 flags) > */ > acpi_gbl_early_initialization = FALSE; > > - /* > - * Install the default operation region handlers. These are the > - * handlers that are defined by the ACPI specification to be > - * "always accessible" -- namely, system_memory, system_IO, and > - * PCI_Config. This also means that no _REG methods need to be > - * run for these address spaces. We need to have these handlers > - * installed before any AML code can be executed, especially any > - * module-level code (11/2015). > - */ > - if (!acpi_gbl_group_module_level_code) { > - status = acpi_ev_install_region_handlers(); > - if (ACPI_FAILURE(status)) { > - ACPI_EXCEPTION((AE_INFO, status, > - "During Region initialization")); > - return_ACPI_STATUS(status); > - } > - } > #if (!ACPI_REDUCED_HARDWARE) > > /* Enable ACPI mode */ > @@ -284,25 +267,21 @@ acpi_status __init acpi_initialize_objects(u32 flags) > */ > if (acpi_gbl_group_module_level_code) { > acpi_ns_exec_module_code_list(); > - } > > - /* > - * 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. > - */ > - if (!(flags & ACPI_NO_OBJECT_INIT)) { > - ACPI_DEBUG_PRINT((ACPI_DB_EXEC, > - "[Init] Completing Initialization of ACPI > Objects\n")); > - > - status = acpi_ns_initialize_objects(); > - if (ACPI_FAILURE(status)) { > - return_ACPI_STATUS(status); > + /* > + * 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. > + */ > + if (!(flags & ACPI_NO_OBJECT_INIT)) { > + status = acpi_ns_initialize_objects(); > + if (ACPI_FAILURE(status)) { > + return_ACPI_STATUS(status); > + } > } > } > > - acpi_gbl_namespace_initialized = TRUE; > - > /* > * Initialize all device/region objects in the namespace. This runs > * the device _STA and _INI methods and region _REG methods. -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html