* 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
@ 2016-04-10 17:59 gregkh
2016-04-11 1:50 ` Zheng, Lv
0 siblings, 1 reply; 2+ messages in thread
From: gregkh @ 2016-04-10 17:59 UTC (permalink / raw)
To: lv.zheng, chris.bainbridge, rafael.j.wysocki; +Cc: stable
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@vger.kernel.org>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
>From 5508df89756f8378024828e185724a9bd2348985 Mon Sep 17 00:00:00 2001
From: Lv Zheng <lv.zheng@intel.com>
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@gmail.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
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.
^ permalink raw reply related [flat|nested] 2+ messages in thread* RE: 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
2016-04-10 17:59 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 gregkh
@ 2016-04-11 1:50 ` Zheng, Lv
0 siblings, 0 replies; 2+ messages in thread
From: Zheng, Lv @ 2016-04-11 1:50 UTC (permalink / raw)
To: gregkh@linuxfoundation.org, chris.bainbridge@gmail.com,
Wysocki, Rafael J
Cc: stable@vger.kernel.org
Hi,
> From: gregkh@linuxfoundation.org [mailto:gregkh@linuxfoundation.org]
> 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@vger.kernel.org>.
[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@intel.com>
> 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@gmail.com>
> Signed-off-by: Lv Zheng <lv.zheng@intel.com>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> 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.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-04-11 1:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-10 17:59 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 gregkh
2016-04-11 1:50 ` Zheng, Lv
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.